点云配准--对称式ICP

news2024/11/18 9:24:18

对称式ICP

写在前面的话

针对于局部平面不完美的情况,提出了一种对称式ICP目标函数,相较于传统的ICP方法,增大了收敛域,提高了收敛速度。论文理论说明不甚清楚,实验较少,但代码开源。

理论

对称目标函数

在icp中对于一对对应点p,q:在点到法线的度量中:
( p − q ) ⋅ n q (3) (p-q) \cdot n_q\tag{3} (pq)nq(3)
只有当局部表面是一个完美平面时上式才成立,因此提出一种标准对称式度量:
( p − q ) ⋅ ( n p + n q ) . (4) (p-q) \cdot\left(n_p+n_q\right) .\tag{4} (pq)(np+nq).(4)
在这里插入图片描述

如图1所示,只要p,q位于圆弧上,此时向量(p-q)垂直于向量(np-nq),等式4恒成立。
在这里插入图片描述

图2中,当 p 相对于 q 移动时,只要存在某个与 p、q、np 和 nq 一致的圆弧,性质 (p − q) · (np + nq ) = 0 就成立。点到面:当 p 位于 q 和 nq 定义的平面中时,无论 np 如何,点到平面度量为零。
对于等式4而言,在 3D 中也成立:只要 p 和 q 及其法线与某个圆柱体一致,方程 4 的计算结果就为零。
此外,4.1 节研究了一个不同的属性:只要 p 和 q 与位于它们之间的局部二阶曲面一致,方程 4 也成立。虽然此约束仍然为 (p, np ) 相对于 (q, nq ) 移动提供了更大的自由度,但它是比点到平面度量提供的“更有用”的自由形式。(增大了收敛域,更容易找到全局最优变换)。
对于目标函数而言,大多数先前的工作仅将刚体变换应用于其中一个表面(例如,点到面中的变换仅应用于 p),但我们考虑变换的对称形式:我们想象在一个固定的“中性”坐标中(既不在p坐标系也不在q坐标系中)评估度量,并对 P 和 Q 应用相反的变换。因此,我们可以将对称目标制定为:
E s y m m − R N = ∑ i [ ( R i − R − 1 q i + t ) ⋅ ( R n p , i + R − 1 n q , i ) ] 2 , (5) \mathcal{E}_{s y m m-R N}=\sum_i\left[\left(\mathrm{R}_i-\mathrm{R}^{-1} q_i+t\right) \cdot\left(\mathrm{R} n_{p, i}+\mathrm{R}^{-1} n_{q, i}\right)\right]^2,\tag{5} EsymmRN=i[(RiR1qi+t)(Rnp,i+R1nq,i)]2,(5)
我们还探索了该目标的一个更简单的版本,其中法线不旋转。也就是说,每个点对的最小化方向保持固定,而点本身沿相反方向旋转:
E s y m m = ∑ i [ ( R i − R − 1 q i + t ) ⋅ ( n p , i + n q , i ) ] 2 (6) \mathcal{E}_{s y m m}=\sum_i\left[\left(\mathrm{R}_i-\mathrm{R}^{-1} q_i+t\right) \cdot\left(n_{p, i}+n_{q, i}\right)\right]^2\tag{6} Esymm=i[(RiR1qi+t)(np,i+nq,i)]2(6)
为什么这是一个合理的简化?考虑二维中两个单位长度向量的总和。对向量应用相反的旋转可以保留它们的总和的方向,以便每个点对对目标的两个变体的贡献在一定程度上是相同的。在 3D 中,并非所有旋转轴都如此,但当 np 接近 nq 时,这一点也接近正确。 4.3 节中的实验表明,两个目标导致相似的收敛,但 Esymm 导致更简单的推导和实现。因此,本文的其余部分采用 Esymm 作为对称目标。

线性化

我们从 Rodrigues 旋转公式开始的线性化,以了解旋转 R 对向量 v 的影响:
R v = v cos ⁡ θ + ( a × v ) sin ⁡ θ + a ( a ⋅ v ) ( 1 − cos ⁡ θ ) (7) \mathrm{R} v=v \cos \theta+(a \times v) \sin \theta+a(a \cdot v)(1-\cos \theta)\tag{7} Rv=vcosθ+(a×v)sinθ+a(av)(1cosθ)(7)
其中 a 和 θ 是旋转轴和角度。我们观察到,(7) 中的最后一项与增量旋转角 θ 成二次方,因此我们将其丢弃以进行线性化:
R v ≈ v cos ⁡ θ + ( a × v ) sin ⁡ θ = cos ⁡ θ ( v + ( a ~ × v ) ) , (8) \begin{aligned} \mathrm{R} v & \approx v \cos \theta+(a \times v) \sin \theta \\ & =\cos \theta(v+(\tilde{a} \times v)), \end{aligned}\tag{8} Rvvcosθ+(a×v)sinθ=cosθ(v+(a~×v)),(8)

where a ~ = a tan ⁡ θ \tilde{a}=a \tan \theta a~=atanθ. Substituting into (6),
E symm  ≈ ∑ i [ cos ⁡ θ ( p i − q i ) ⋅ n i + cos ⁡ θ ( a ~ × ( p i + q i ) ) ⋅ n i + t ⋅ n i ] 2 = ∑ i cos ⁡ 2 θ [ ( p i − q i ) ⋅ n i + ( ( p i + q i ) × n i ) ⋅ a ~ + n i ⋅ t ~ ] 2 , (9) \begin{aligned} \mathcal{E}_{\text {symm }} \approx & \sum_i\left[\cos \theta\left(p_i-q_i\right) \cdot n_i+\right. \\ & \left.\cos \theta\left(\tilde{a} \times\left(p_i+q_i\right)\right) \cdot n_i+t \cdot n_i\right]^2 \\ =\sum_i \cos ^2 \theta & {\left[\left(p_i-q_i\right) \cdot n_i+\right.} \\ & \left.\left(\left(p_i+q_i\right) \times n_i\right) \cdot \tilde{a}+n_i \cdot \tilde{t}\right]^2, \end{aligned}\tag{9} Esymm =icos2θi[cosθ(piqi)ni+cosθ(a~×(pi+qi))ni+tni]2[(piqi)ni+((pi+qi)×ni)a~+nit~]2,(9)
其中 n i = n p , i + n q , i n_i=n_{p, i}+n_{q, i} ni=np,i+nq,i and t ~ = t / cos ⁡ θ \tilde{t}=t / \cos \theta t~=t/cosθ。现在,我们对目标进行额外的近似加权 1/cos2 θ ,对于较小的 θ ,该值接近 1。 为了数值稳定性进一步考虑归一化,等式9变为如下形式:
∑ i [ ( p ~ i − q ~ i ) ⋅ n i + ( ( p ~ i + q ~ i ) × n i ) ⋅ a ~ + n i ⋅ t ~ ] 2 (10) \sum_i\left[\left(\tilde{p}_i-\tilde{q}_i\right) \cdot n_i+\left(\left(\tilde{p}_i+\tilde{q}_i\right) \times n_i\right) \cdot \tilde{a}+n_i \cdot \tilde{t}\right]^2\tag{10} i[(p~iq~i)ni+((p~i+q~i)×ni)a~+nit~]2(10)
where p ~ i = p i − p ˉ \tilde{p}_i=p_i-\bar{p} p~i=pipˉ and q ~ i = q i − q ˉ \tilde{q}_i=q_i-\bar{q} q~i=qiqˉ. This is a least-squares problem in a ~ \tilde{a} a~ and t ~ \tilde{t} t~, and the final transformation from P \mathcal{P} P to Q Q Q is:
trans ⁡ ( q ˉ ) ∘ rot ⁡ ( θ , a ~ ∥ a ~ ∥ ) ∘ trans ⁡ ( t ~ cos ⁡ θ ) ∘ rot ⁡ ( θ , a ~ ∥ a ~ ∥ ) ∘ trans ⁡ ( − p ˉ ) , (11) \operatorname{trans}(\bar{q}) \circ \operatorname{rot}\left(\theta, \frac{\tilde{a}}{\|\tilde{a}\|}\right) \circ \operatorname{trans}(\tilde{t} \cos \theta) \circ \operatorname{rot}\left(\theta, \frac{\tilde{a}}{\|\tilde{a}\|}\right) \circ \operatorname{trans}(-\bar{p}),\tag{11} trans(qˉ)rot(θ,a~a~)trans(t~cosθ)rot(θ,a~a~)trans(pˉ),(11)
where θ = tan ⁡ − 1 ∥ a ~ ∥ \theta=\tan ^{-1}\|\tilde{a}\| θ=tan1a~.
理论到此结束,后面我会对代码进行分析测试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1155602.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Simulink】飞轮储能系统的建模与MATLAB仿真(永磁同步电机作为飞轮驱动电机)

目录 ​1 主要内容 2 结果分析 3 程序链接 ​1 主要内容 该仿真为飞轮储能系统的建模,包括电网侧和电机侧两部分模型,仿真采用永磁同步电机作为飞轮驱动电机,通过矢量控制的方式对其发电和电动的工况进行控制,同时&#xff0c…

数据库访问跳板机

应用场景 在安全性要求高的网络环境,可能会出现数据库ip访问限制,导致数据库只有指定服务器才能访问,在特定业务场景我们可能会经常多人查询该数据库的表,为了解决这个问题,我写了一个小工具。 核心思想 解决方案实…

WindowsTerminal 配置标签页(快速使用PowerCli)

需求 避免每次都需要手动输入密码、手动填写信息才能访问vcenter。结合WindowsTerminal快速创建标签页,需要时一键开启Powercli。 解决 编写启动PowerCli的bat脚本 内容如下 echo off powershell -NoExit -ExecutionPolicy Bypass -Command "Connect-VISe…

NLP之LSTM原理剖析

文章目录 背景simpleRNN的局限性 LSTM手写一下sigmoid例子支持长记忆的神经网络解读3重门 背景 SimpleRNN有一定局限性, 图片上的文字内容: 图片标题提到“SimpleRNN是一种基础模型。它用于解决序列型问题,其中的每一步的输出会影响到下一步的结果。图…

[计算机提升] 查看系统软件

3.1 查看系统软件 此处系统软件为系统安装后自带的一些软件、工具等。包括:管理工具、系统工具、轻松使用工具、附件等。 方法一:通过菜单打开系统软件 1、点击左下角windows菜单键,在弹出的菜单中,任一点击一个字母(示例中为C)&…

听GPT 讲Rust源代码--library/std(10)

题图来自 Rust Development Roadmap[1] File: rust/library/std/src/sys/windows/c.rs 在Rust源代码的rust/library/std/src/sys/windows/c.rs文件中,主要定义了Rust对于Windows操作系统的系统调用接口。该文件定义了各种Windows特定的结构体、枚举和常量&#xff0…

NAS(qnap)中安装git服务(gogs),硬件为TS-453Bmini,固件版本:QTS 5.1.2.2533

NAS(qnap)中安装git服务(gogs),硬件为TS-453Bmini,固件版本:QTS 5.1.2.2533 1.进入nas的管理界面,找到App Center: 2.在AppCenter中,安装ContainerStation容器工作站: 3.ContainerStation容器工作站中&…

linux驱动开发环境搭建

使用的是parallel 创建的ubuntu 16.04 ubuntu20.04虚拟机 源码准备 # 先查看本机版本 $ uname -r 5.15.0-86-generic# 搜索相关源码 $ sudo apt-cache search linux-source [sudo] password for showme: linux-source - Linux kernel source with Ubuntu patches linux-sourc…

【Kubernetes 基本概念】Kubernetes 的架构和核心概念

目录 一、Kurbernetes1.1 简介1.2 为什么要用K8s?1.3 K8s的特性 二、Kurbernetes集群架构与组件三、Kurbernetes的核心组件3.1 Master组件3.1.1 Kube-apiserver3.1.2 Kube-controller-manager3.1.3 Kube-scheduler 3.2 配置存储中心——etcd3.3 Node组件3.3.1 Kubelet3.3.2 Ku…

qnx resource managers 实例

文章目录 前言一、resource managers 是什么二、device resource managers 实例1. Single-threaded device resource manager2.Multithreaded device resource manager3.Resource Managers that Handle Multiple Devices总结参考资料前言 本文主要介绍如何编写一个 qnx 下 的 …

CSS图片下方4px间距

目录 1,问题表现2,问题解决 1,问题表现 .test-img {height: 100px;outline: 1px solid salmon; }图片下方有4px间距。 图片下方是图片时问题也存在。 2,问题解决 图片设置 display: block;图片设置 vertical-align: middle; …

【Java 进阶篇】深入理解 Java Response:从基础到高级

HTTP响应(Response)是Web开发中的一个关键概念,它是服务器向客户端(通常是浏览器)返回数据的方式。理解如何在Java中处理和构建HTTP响应是开发Web应用程序的重要一部分。本文将从基础知识到高级技巧,详细介…

Python---判定表法(功能测试)

能对多条件依赖关系进行设计测试点---判定表法 等价类、边界值分析法主要关注单个输入类条件的测试 定义:是一种以表格形式表达多条件逻辑判断的工具。 条件桩: 列出问题中的所有条件,列出条件的次序无关紧要动作桩: 列出问题中可能采取的操作,操作的…

安装最新版vue-cli,并搭建一个vue2项目

安装最新版vue-cli,并搭建一个vue2项目 卸载旧版本环境 卸载node.js 可以使用qq电脑管家,找到nodejs卸载即可 cmd查看vue cli版本(可以看到我们是vue cli 2.x) C:\Users\youzhengjie666> vue -V 2.9.6卸载vue cli 2.x np…

学习笔记|单样本t检验|无统计学意义|规范表达|《小白爱上SPSS》课程:SPSS第四讲 | 单样本T检验怎么做?很单纯很简单!

目录 学习目的软件版本原始文档一、实战案例二、案例解析本案例之目的 四、SPSS操作1、正态性检验Tips:无统计学意义 2、t检验结果 五、结果解读六、规范报告1、规范表格2、规范文字 注意划重点 学习目的 SPSS第四讲 | 单样本T检验怎么做?很单纯很简单&…

Python爬取读书网的图片链接和书名并保存在数据库中

一个比较基础且常见的爬虫,写下来用于记录和巩固相关知识。 一、前置条件 本项目采用scrapy框架进行爬取,需要提前安装 pip install scrapy# 国内镜像 pip install scrapy -i https://pypi.douban.com/simple 由于需要保存数据到数据库,因…

CCLINK IEFB转Profinet协议网关连接1200和三菱FX5U的通讯方法

捷米JM-PN-CCLKIE这款网关主要功能是实现CCLINK IEFB总线和PROFINET网络的数据互通。 JM-PN-CCLKIE网关连接到PROFINET总线中做为从站使用,连接到CCLINK IEFB总线中做为从站使用。该产品主要功能是实现CCLINK IEFB总线和PROFINET网络的数据互通。JM-PN-CCLKIE网关分…

PyQt5:构建目标检测算法GUI界面 (附python代码)

文章目录 1.界面2.代码3.Analyze 1.界面 目标检测算法一般就是检测个图片,然后显示图片结果。 最简单的情况,我们需要一个按钮读取图片,然后后有一个地方显示图片。 2.代码 import sys import numpy as np from PIL import Imagefrom PyQt…

问题 C: 搬寝室(DP)

算法分析: 题目意思为求n个物品,拿k对使得消耗的体力最少, 或者说是这k对物品,每一对中两件物品的质量差平方最小, 所以要使得质量差的平方小,只能排序后取质量相邻两个物品作为一对; 现在设f…

Leetcode刷题笔记--Hot91--100

1--汉明距离&#xff08;461&#xff09; 主要思路&#xff1a; 按位异或&#xff0c;统计1的个数&#xff1b; #include <iostream> #include <vector>class Solution { public:int hammingDistance(int x, int y) {int z x ^ y; // 按位异或int res 0;while(…