Least-Squares Fitting of Two 3-D Point Sets

这是一篇非常老的论文,最关键的点其实是作者关于闭式解退化情况的描述

摘要

两个点集{pi}\{p_i\}{pi​}和{pi′}\{p_i^{'}\}{pi′​};i=1,2,...,Ni = 1,2,...,Ni=1,2,...,N由pi′=Rpi+T+Nip_i^{'} = Rp_i + T + N_ipi′​=Rpi​+T+Ni​所关联,这里RRR是旋转矩阵,TTT是平移向量,NiN_iNi​是噪声向量。给定{pi}\{p_i\}{pi​}和{pi′}\{p_i^{'}\}{pi′​},我们提出了一种算法来找到RRR和TTT的最小二乘解,这个方法基于3×33 \times 33×3矩阵的奇异值分解(SVD)。在计算时间方面,将此算法与两种较早提出的算法进行了比较。

引言

在许多计算机视觉的应用,尤其是使用3-D点对的对应关系[1]来估计刚体的运动参数以及刚体相对于参考坐标系的位姿[2]中,我们遇到了下面的数学问题。我们给定两个3-D点集{pi}\{p_i\}{pi​}和{pi′}\{p_i^{'}\}{pi′​};i=1,2,...,Ni = 1, 2, ...,Ni=1,2,...,N(这里pip_ipi​和pi′p_i^{'}pi′​是视为3×13 \times 13×1的列矩阵)
pi′=Rpi+T+Ni(1)p_i^{'} = Rp_i + T+N_i \tag{1} pi′​=Rpi​+T+Ni​(1)
这里RRR是3×33 \times 33×3的旋转矩阵,TTT是平移向量(3×13 \times 13×1的列矩阵),NiN_iNi​是噪声向量(我们假设旋转是沿着一个通过原点的旋转轴进行的)。我们想要找到一个RRR和TTT来最小化
Σ2=∑i=1N∣∣pi−(Rpi+T)∣∣2(2)\Sigma^2 = \sum_{i=1}^{N}{|| p_i - (Rp_i + T) ||^2} \tag{2} Σ2=i=1∑N​∣∣pi​−(Rpi​+T)∣∣2(2)
Huang,Blostein和Margerum[3]提出了一种用于寻找解的迭代算法,Faugeras和Hebert提出了一种基于四元数的非迭代算法。在本文中,我们提出了一种新的非迭代算法,该算法涉及到3×33 \times 33×3矩阵的奇异值分解(SVD)。我们比较了三种算法的计算时间。

解耦平移和旋转

根据[3]中所述,如果公式(1)的最小二乘解为R^\hat{R}R^和T^\hat{T}T^,则{pi′}\{p_i^{'}\}{pi′​}和{pi′′≡R^pi+T^}\{p_i^{''} \equiv \hat{R}p_i +\hat{T}\}{pi′′​≡R^pi​+T^}有着相同的质心,也就是说
p′=p′′.(3)p^{'} = p^{''}. \tag{3} p′=p′′.(3)
这里
p′=1N∑i=1Npi′.(4)p^{'} = \frac{1}{N} \sum_{i = 1}^{N}{p_i^{'}}. \tag{4} p′=N1​i=1∑N​pi′​.(4)
p′′=1N∑i=1Npi′′=R^p+T^(5)p^{''} = \frac{1}{N} \sum_{i=1}^{N}{p_i^{''}} = \hat{R}p + \hat{T} \tag{5} p′′=N1​i=1∑N​pi′′​=R^p+T^(5)
p=1N∑i=1Npip = \frac{1}{N} \sum_{i=1}^{N}{p_i} p=N1​i=1∑N​pi​

qi=pi−p(7)q_i = p_i - p \tag{7} qi​=pi​−p(7)
qi′=pi′−p′(8)q_i^{'} = p_i^{'} - p^{'} \tag{8} qi′​=pi′​−p′(8)
我们有
∑i=1N∣∣qi′−Rqi∣∣2(9)\sum_{i = 1}^{N}{|| q_i^{'} - Rq_{i} ||^2} \tag{9} i=1∑N​∣∣qi′​−Rqi​∣∣2(9)

因此,原始的最小二乘问题可以被分为两部分
(i) 寻找R^\hat{R}R^来最小化公式(9)中的Σ2\Sigma^2Σ2
(ii) 之后平移向量可以根据以下公式计算得到
T^=p′−R^p(10)\hat{T} = p^{'} - \hat{R}p \tag{10} T^=p′−R^p(10)
在下一部分,我们将会描述一种使用奇异值分解来求解第i部分的算法。

一种使用奇异值分解来寻找R^\hat{R}R^的算法

A.算法

Step 1:

从{pi}\{p_i\}{pi​},{pi′}\{p_i^{'}\}{pi′​}计算ppp和p′p^{'}p′,之后计算{qi}\{q_i\}{qi​}和{qi′}\{q_i^{'}\}{qi′​}

Step 2:

计算3×33 \times 33×3的矩阵
H=∑i=1Nqiqi′T(11)H = \sum_{i=1}^{N}{q_i {q_i^{'}}^T} \tag{11} H=i=1∑N​qi​qi′​T(11)
这里上标TTT定义为矩阵的转置

Step 3:

对矩阵H进行SVD分解
H=UΛVT(12)H = U \Lambda V^T \tag{12} H=UΛVT(12)

Step 4:

计算
X=VUT(13)X = VU^T \tag{13} X=VUT(13)

Step 5:

计算矩阵X的行列式det(X)det(X)det(X)
如果det(X)=+1det(X) = +1det(X)=+1,则R^=X\hat{R} = XR^=X
如果det(X)=−1det(X) = -1det(X)=−1,则算法失败(这种情况通常不会出现)

B.推导

展开公式(9)的右侧
Σ2=∑i=1N(qi′−Rqi)T(qi′−Rqi)=∑i=1N(qi′Tqi′+qiTqi−qi′TRqi−qiTRTqi′)=∑i=1N(qi′Tqi′+qiTqi−2qi′TRqi)\Sigma^2 = \sum_{i=1}^{N}{ (q_i^{'} - Rq_i)^T (q_i^{'} - Rq_i) } \\ = \sum_{i=1}^{N}{( {q_i^{'}}^Tq_i^{'} + q_i^T q_i - {q_i^{'}}^TRq_i - q_i^T R^T q_i^{'} )} \\ = \sum_{i=1}^{N}{( {q_i^{'}}^Tq_i^{'} + q_i^T q_i - 2{q_i^{'}}^TRq_i )} Σ2=i=1∑N​(qi′​−Rqi​)T(qi′​−Rqi​)=i=1∑N​(qi′​Tqi′​+qiT​qi​−qi′​TRqi​−qiT​RTqi′​)=i=1∑N​(qi′​Tqi′​+qiT​qi​−2qi′​TRqi​)
因此,最小化Σ2\Sigma^2Σ2等价于最大化
F=∑i=1Nqi′TRqi=Trace(∑i=1NRqiqi′T)=Trace(RH)(14)F = \sum_{i=1}^{N}{{q_i^{'}}^T R q_i} \\ = Trace(\sum_{i=1}^{N}{ Rq_i {q_i^{'}}^T}) \\ = Trace(RH) \tag{14} F=i=1∑N​qi′​TRqi​=Trace(i=1∑N​Rqi​qi′​T)=Trace(RH)(14)
这里
H=∑i=1Nqiqi′T(15)H = \sum_{i=1}^{N}{q_i {q_i^{'}}^T} \tag{15} H=i=1∑N​qi​qi′​T(15)

定理:

对于任何正定的矩阵AATAA^TAAT以及任何正交矩阵B
Trace(AAT)≥Trace(BAAT)Trace(AA^T) \geq Trace(BAA^T) Trace(AAT)≥Trace(BAAT)

定理证明:

令aia_iai​为矩阵AAA的第iii列,所以
Trace(BAAT)=Trace(ATBA)=∑i=1aiT(Bai)Trace(BAA^T) = Trace(A^TBA) = \sum_{i=1}{a_i^T(Ba_i)} Trace(BAAT)=Trace(ATBA)=i=1∑​aiT​(Bai​)
但是,根据施瓦茨不等式
aiT(Bai)≤(aiTai)(aiTBTBai)=aiTaia_i^T(B a_i) \leq \sqrt{(a_i^Ta_i)(a_i^T B^T B a_i)} = a_i^Ta_i aiT​(Bai​)≤(aiT​ai​)(aiT​BTBai​)​=aiT​ai​
因此Trace(BAAT)≤∑iaiTai=Trace(AAT)Trace(BAA^T) \leq \sum_{i}{a_i^Ta_i} = Trace(AA^T)Trace(BAAT)≤∑i​aiT​ai​=Trace(AAT)

对HHH进行SVDSVDSVD分解
H=UΛVT(16)H = U \Lambda V^T \tag{16} H=UΛVT(16)
这里UUU和VVV为3×33 \times 33×3的正交矩阵,Λ\LambdaΛ为具有非负元素的3×33 \times 33×3的对角矩阵,现在令
X=VUTX = VU^T X=VUT
我们有
XH=VUTUΛVT=VΛVT(17)XH = VU^TU \Lambda V^T = V \Lambda V^T \tag{17} XH=VUTUΛVT=VΛVT(17)
这里XHXHXH为正定对称矩阵,因此,根据定理,对于任何的3×33 \times 33×3正交矩阵B
Trace(XH)≥Trace(BXH)(18)Trace(XH) \geq Trace(BXH) \tag{18} Trace(XH)≥Trace(BXH)(18)
因此,在所有的3×33 \times 33×3正交矩阵中,XXX最大化了公式(14)中的FFF,并且如果det(X)=+1det(X) = +1det(X)=+1,XXX是一个旋转,这正是我们想要的。

然而,如果det(X)=−1det(X) = -1det(X)=−1,XXX是一个反射,这并不是我们想要的。幸运的是,这种退化的情况通常来说并不会发生,我们将会在下面的两个章节中关于这种退化的细节。

退化:无噪声的情况

假设公式(1)中对于所有iii,Ni=0N_i = 0Ni​=0。那么显然存在一个解R^\hat{R}R^(这里R^\hat{R}R^是一个旋转,也就是det(R^)=+1det(\hat{R}) = +1det(R^)=+1),并且这个R^\hat{R}R^对于{qi′}\{q_i^{'}\}{qi′​}和{R^qi}\{\hat{R}q_i\}{R^qi​}是全等的,因此Σ2=0\Sigma^2 = 0Σ2=0。从几何层面来考虑,很容易看出存在三种可能性。

1){qi}\{q_i\}{qi​}不共面,那么旋转的解是唯一的。进一步,没有反射XXX可以使得Σ2=0\Sigma^2 = 0Σ2=0。因此,SVDSVDSVD算法给出了一个期望的解。
2){qi}\{q_i\}{qi​}是共面但是不共线的,这里存在一个唯一的旋转和一个唯一的反射可以使得Σ2=0\Sigma^2 = 0Σ2=0。因此,SVDSVDSVD算法可能给出另外一个解。我们将看到,这种情况很容易解决。
3){qi}\{q_i\}{qi​}是共线的,这里有无数种旋转和反射可以使得Σ2=0\Sigma^2 = 0Σ2=0.

现在我们回到共面的情况,通过检查3×33 \times 33×3矩阵HHH的元素,可以很容易发现当且仅当矩阵H的三个奇异值之中的一个为0时点集{qi}\{q_i\}{qi​}是共面的。令三个奇异值为λ1>λ2>λ3=0\lambda_1 > \lambda_2 > \lambda_3 = 0λ1​>λ2​>λ3​=0。然后
H=λ1uiv1T+λ2u2v2T+0⋅u3v3T.(19)H = \lambda_1 u_i v_1^T + \lambda_2u_2v_2^T + 0 \cdot u_3 v_3^T. \tag{19} H=λ1​ui​v1T​+λ2​u2​v2T​+0⋅u3​v3T​.(19)
这里uiu_iui​和viv_ivi​分别是矩阵UUU和VVV对应的列。注意,改变u3u_3u3​或者v3v_3v3​的符号不会改变HHH。因此,如果X=VUTX = VU^TX=VUT最小化了Σ2\Sigma^2Σ2,则X′=V′UTX^{'} = V^{'}U^TX′=V′UT也是如此,这里
V′=[v1,v2,−v3](20)V^{'} = [v_1,v_2,-v_3] \tag{20} V′=[v1​,v2​,−v3​](20)
如果XXX是一个反射,则X′X^{'}X′是一个旋转,反之依然。因此,如果SVDSVDSVD分解给出了一个解XXX且det(X)=−1det(X) = -1det(X)=−1,我们只需要令X′=V′UTX^{'} = V^{'}U^TX′=V′UT,这是我们需要的旋转。

我们顺便注意到,当且仅当矩阵HHH的三个奇异值中的两个是相等时,{qi}\{q_i\}{qi​}是共线的。

退化:带噪声的情况

如果{qi}\{q_i\}{qi​}或者{qi′}\{q_i^{'}\}{qi′​}是共面的,那么很容易证明前面的讨论仍然是有效的,除了Σ2\Sigma^2Σ2不再为0。因此,如果SVDSVDSVD算法给出了一个反射X=VUTX = VU^TX=VUT,我们只需要令X′=V′UTX^{'} = V^{'}U^TX′=V′UT,这是我们需要的旋转。一种特殊的情况是当N=3N=3N=3并且{qi}\{q_i\}{qi​}或者{qi′}\{q_i^{'}\}{qi′​}是共面的点集。

我们无法处理的情况是SVDSVDSVD算法给出了一个det(X)=−1det(X) = -1det(X)=−1的XXX,并且HHH的奇异值均不为0时。这意味着{qi}\{q_i\}{qi​}和{qi′}\{q_i^{'}\}{qi′​}都是共面的点集,但是没有一个旋转可以使得Σ2\Sigma^2Σ2比反射计算的值更小。这种情况只会发生在噪声NiN_iNi​非常大时。在这种情况下,最小二乘解可能无论如何都是无效的。一种更好的方法是使用类似RANSAC的方法来去除外点。

算法总结

使用前述的方法,我们可以得到
X=VUTX = VU^T X=VUT

1)如果det(X)=+1det(X) = +1det(X)=+1,则XXX就是我们期望的旋转的解
2)如果det(X)=−1det(X) = -1det(X)=−1,则XXX是一个反射,对于这种情况,我们有以下两种更处理方法

  • 如果矩阵HHH的任何一个奇异值为0,则期望的旋转矩阵为
    X=V′UTX = V^{'}U^T X=V′UT
    这里V′V^{'}V′是通过改变矩阵VVV第三列的符号获得的。
  • 如果矩阵HHH的任何一个奇异值都不为0,则最小二乘方法可能是无效的,我们需要使用类似RANSAC的技术。

计算时间需求

在VAX 11/780上进行计算机模拟,以在时间需求方面比较三种算法(SVD,四元数,迭代)。在每次模拟中,都会生成一组3D点{pi}\{p_i\}{pi​}。他们随机分布在一个中心为(0,0,0)的尺寸为6×6×66\times6\times66×6×6的立方体中。然后将点{pi}\{p_i\}{pi​}平移(80,60,70),接着绕着通过原点并且方向余弦为(0.6,0.7,0.39)的旋转轴旋转75°75^{\degree}75°,最后在结果点的每一个坐标上添加均值为0,标准差为0.5的高斯随机噪声来计算得到{pi′}\{p_i^{'}\}{pi′​}。然后使用三种算法来估计R^\hat{R}R^和T^\hat{T}T^,对应的CPU使用时间如表I所示。对于迭代算法,迭代次数在括号中给出。

我们注意到,SVD和四元数算法的计算时间需求是可比的,而迭代算法需要更长的时间。但是,在迭代算法中,解的计算精度为7位。如果我们可以接受百分之十的精度,那么迭代次数可以减少2-3倍。此外,收敛速率可以通过超松弛来增加。

参考文献

雷达系列论文翻译(一):Least-Squares Fitting of Two 3-D Point Sets相关推荐

  1. 雷达系列论文翻译(十二):Cartographer系列(三)

    Real-Time Loop Closure in 2D LIDAR SLAM 摘要 便携式激光测距仪,又称激光雷达,同时定位和建图(SLAM)是一种有效的获取竣工平面图的方法.实时生成和可视化楼层平 ...

  2. 雷达系列论文翻译(六):LIO-SAM

    LIO-SAM: Tightly-coupled Lidar Inertial Odometry viaSmoothing and Mapping 摘要 我们提出了一种通过平滑和建图实现紧耦合的激光雷 ...

  3. 雷达系列论文翻译(七):Lio-mapping

    Tightly Coupled 3D Lidar Inertial Odometry and Mapping 摘要 自我运动估计是大多数移动机器人应用的基本要求.通过传感器融合,我们可以弥补独立传感器 ...

  4. 雷达系列论文翻译(四):LeGO-LOAM

    LeGO-LOAM: Lightweight and Ground-OptimizedLidar Odometry and Mapping on Variable Terrain 摘要 我们提出了一种 ...

  5. 雷达系列论文翻译(十一):LVI-SAM: Tightly-coupled Lidar-Visual-Inertial Odometryvia Smoothing and Mapping

    LVI-SAM: Tightly-coupled Lidar-Visual-Inertial Odometryvia Smoothing and Mapping 摘要 我们提出了一个通过平滑和映射实现 ...

  6. 雷达系列论文翻译(十):Scan registration using segmented region growing NDT

    Scan registration using segmented region growing NDT 这篇论文可以视为对上一篇论文的详述版本,作者为同一人,这篇中对于每一部分的算法给出了详细的公式 ...

  7. 分布式系统领域经典论文翻译集

    分布式领域论文译序 sql&nosql年代记 SMAQ:海量数据的存储计算和查询 一.google论文系列 1.      google系列论文译序 2.      The anatomy o ...

  8. php 谷歌翻译api_科研福音,论文翻译神器系列!

    参考文献很大程度上反映了一篇论文的水平.对于研究生来说,自己动手写论文前的第一步工作就是阅读大量高水平.前沿的文献,而这些论文大多是英文写就. 人工翻译一般比较耗时且需要扎实的语言功底,对于初学者来说 ...

  9. A Survey of Deep Learning-based Object Detection论文翻译 + 阅读笔记

    A Survey of Deep Learning-based Object Detection论文翻译 + 阅读笔记 //2022.1.7 日下午16:00开始阅读 双阶段检测器示意图 单阶段检测器 ...

最新文章

  1. 循环测试:结果为空时的处理
  2. Swift 位运算练习
  3. IE浏览器怎么清理缓存
  4. 使用 Spring Validation 优雅地进行参数校验
  5. stcc52单片机时钟电路_单片机与晶振到底有什么关系?
  6. java发送接收组播(多播)数据包(UDP包)
  7. 基于linux嵌入式的开发,基于Linux的嵌入式GUI的研究与开发
  8. 宠物医院app开发的功能有哪些?
  9. Linux学习整理-网络防火墙iptables-实践篇2
  10. 基于Python开发WebService-2:客户端(suds、zeep)
  11. 为什么犹太人能出这么多诺贝尔奖,看看他们的家庭教育吧!
  12. CF1427E Xum
  13. 拆弹实验-phase_7(隐藏关)
  14. 大白菜安装系统两种方式
  15. Problem I: 零起点学算法89——程序设计竞赛
  16. SpringBoot项目中自动加载datasourceConfig配置导致启动失败
  17. (一)--使用RSA公钥证书解密
  18. 什么是404页面,如何正确设置制作404页面
  19. style-loader 与css-loader 处理 css样式文件
  20. Ola Hallengren 脚本 经常问的问题

热门文章

  1. 网络安全竞赛试题(总分100分)
  2. 如何建设人工智能教学体系
  3. 怎么做室内导航?室内导航图用什么做的?
  4. 转载 | 万字深度解析 NFT 借贷市场
  5. 震惊!小猪的设计模式初涉总结!纯干货~
  6. 3D人物建模到底需要掌握哪些技术,大佬年薪百万前都在学习这些知识
  7. 《消失的微生物》书中的精髓:微生物如何影响人体健康以及抗生素滥用又会引起怎样的后果?
  8. 概率论与数理统计期末复习题(3)
  9. cocos2dx以前的一些文章的项目下载地址
  10. 时序数据库 influxDB (入门)/InfluxDB stadio可视化工具 部署、管理、配置、使用