📝笔记:SLAM常见问题(四):求解ICP,利用SVD分解得到旋转矩阵

今天讲一篇关于利用SVD方法求解ICP问题的文献《Least-Squares Rigid Motion Using SVD》,这篇文章非常精彩地推导出将3D点对齐问题的解析解,同时总结了求解该问题的统一范式。

问题描述

已知(1)P={p1,p2,,pn}以及(2)Q={q1,q2,,qn}是空间中(文中说的更加普适,pi,qiRd,可以表示d维空间)的匹配点集,我们试图找到这样的旋转矩阵R和平移向量t最小化如下对齐误差(即ICP问题的形式):

(1)(R,t)=argminRSO(d),tRdi=1nwi(Rpi+t)qi2

接下来文章分别推导了平移向量t以及旋转矩阵R的解析解。

计算平移量

此时假定旋转矩阵R是固定的,令(3)F(t)=i=1nwi(Rpi+t)qi2,我们可以通过Ft求导的方式得到平移量的最优解,如下: (2)0=Ft=i=1n2wi(Rpi+tqi)==2t(i=1nwi)+2R(i=1nwipi)2i=1nwiqi

令: (3)p=i=1nwipii=1nwi,q=i=1nwiqii=1nwi

于是我们得到t的解:

(4)t=qRp

从上式看出最优的平移量tP点集的加权中心映射到了Q点集的中心。接下来将上式带入优化方程,得: (5)i=1nwi(Rpi+t)qi2=i=1nwiRpi+qRpqi2=i=1nwiR(pip)(qiq)2

由此我们将原问题转换成了无平移量的优化问题,令:

(6)xi:=pipyi:=qiq 我们把问题简写成如下形式:

(7)R=argminRSO(d)i=1nwiRxiyi2

计算旋转量

简化上式: (8)Rxiyi2=(Rxiyi)T(Rxiyi)=(xiTRTyiT)(Rxiyi)=xiTRTRxixiTRTyiyiTRxi+yiTyi 又因为旋转矩阵的正交性:RTR=I;另外xiTRTyi是标量:xi维度为1×dRT维度为d×dyi维度为d×1。于是有下式: (9)xiTRTyi=(xiTRTyi)T=yiTRxi 得: (10)Rxiyi2=xiTxi2yiTRxi+yiTyi

将整理好的上式带入简化后的R优化问题,得:

(11)argminRSO(d)i=1nwiRxiyi2=argminRSO(d)i=1nwi(xixi2yiRxi+yiyi)==argminRSO(d)(i=1nwixixi2i=1nwiyiRxi+i=1nwiyiyi)==argminRSO(d)(2i=1nwiyiRxi) 接下来将要利用到如下关于迹的技巧:

(4)[w1w1wn][y1Ty2TynT][R][||||x1x2xn||||]=[w1y1Tw2y2TwnynT][||||Rx1Rx2Rxn||||]=[w1y1TRx1w2y2TRx2wnynTRxn]

上式就是对(5)i=1nwiyiRxi=tr(WYTRX)的完美解释。

利用上式,式(11)可以整理得:

(12)argminRSO(d)(2i=1nwiyiRxi)=argmaxRSO(d)(i=1nwiyiRxi)=argmaxRSO(d)tr(WYTRX) 这里说明一下维度:W=diag(w1,w2,...,wn)维度为n×nYT维度为n×dR维度为d×dX维度为d×n

接下来回顾一下迹的性质:tr(AB)=tr(BA),因此有下式: (13)tr(WYTRX)=tr((WYT)(RX))=tr(RXWYT)

d×d的“covariance”矩阵S=XWYT,求SSVD分解:

(14)S=UΣVT.

于是式(13)变为:

(15)tr(WYTRX)=tr(RS)=tr(RUΣVT)=tr(ΣVTRU)

由于V,T,R均为正交矩阵,因此M=VTRU也是正交阵,也就是说M的列向量mj是互相正交的单位向量,即mjTmj=1,于是:

(16)1=mjmj=i=1dmij2mij21|mij|1

由于SVD分解的性质可知σ的元素均为非负数:σ1,σ2,σd0,于是式(18)变为如下形式:

(17)tr(ΣM)=(σ1σ2σd)(m11m12m1dm21m22m2dmd1md2mdd)=i=1dσimiii=1dσi

可见,当迹最大时mii=1,又由于M是正交阵,这使得M为单位阵!

(18)I=M=VTRUR=VUT

看到没,R的解析解竟然如此简单,并且与SVD分解产生了联系,让人感觉到了数学的美妙。不过到这里还没完,后面作者进行了一步方向矫正,大意是这样的:利用公式(18)得到的矩阵并不一定是一个旋转矩阵,也可能为反射矩阵,此时可以通过验证VUT的行列式来判断到底是旋转(行列式 = 1)还是反射(行列式 = -1)。但我们要求的是旋转矩阵,这时需要对公式(18)进行一步处理。

假设det(VUT)=1,则限制R为旋转就意味着M=VTRU反射矩阵, 于是我们试图找到一个反射矩阵M最大化下式: (19)tr(ΣM)=σ1m11+σ2m22+...+σdmdd:=f(m11,m11,...,mdd)f是以m11,m11,...,mdd为变量的线性函数,由于mii[1,1],其极大值肯定在其定义域的边界处。于是当i,mii=1时,f取得极大值,但是此时的R反射矩阵,所以并不能这样取值。然后我们看第二个极大值点(1,1,...,1),有: (20)f=tr(ΣM)=σ1+σ2+...+σd1σd 这个值大于任何其它的自变量取值(±1,±1,...,±1)的组合(除了(1,1,...,1)),因为奇异值是经过排序的,σd是最小的一个奇异值。

综上,为了将解转换为旋转矩阵要进行如下处理: (21)R=V(11det(VU))U

可以总结的套路

为了得到ICP问题的最优解,我们可以采取如下套路:

step1. 计算两组匹配点的加权中心:

(6)p=i=1nwipii=1nwi,q=i=1nwiqii=1nwi

step2. 得到去中心化的点集:

(7)xi:=pipyi:=qiq,i=1,2...n

step3. 计算d×d的covariance矩阵:

(8)S=XWYT

其中,X,Yd×n的矩阵,xi,yi分别是它们的列元素,另外W=diag(w1,w2,...,wn)

step4. 对S进行SVD分解S=UΣVT,得到旋转矩阵:

(9)R=V(11det(VU))U

step5. 计算平移量:

(10)t=qRp