SVD分解(奇异值分解)求旋转矩阵

参考文献:http://igl.ethz.ch/projects/ARAP/svd_rot.pdf

一 问题描述

假设P={p1,p2,...,pn}和Q={q1,q2,...,qn}是两组Rd空间中的对应点集,现在想要根据这个两个点集的数据来计算出它们之间的刚性转置信息,可以知道这其实是一个最小二乘求优问题,问题可以用如下计算式描述:



其中wi>0,是点集中每个点对的权重。

要求(1)式中的最小值,即为求式中对R和t求导数为0的解。


二 计算位移

将(1)式中的R设为不变量对t进行求导,同时令F(t)=(R,t),对F(t)求导可得:


从上可以看出,问题经过转化后变得更加简单,对原来的点集做一个减中心点的预处理,然后再求两个最小二乘的旋转量。


三 计算旋转量

将(8)式用矩阵表示形式展开,可得:




(由于旋转矩阵R是正交矩阵,因而有RRT = I)。同时可以知道上式中yiTRxi和xiTRTyi都是标量,而一个标量的转置仍然等于标量本身,因而有:



现在变成要求(11)式的最小值,而该式中只有一项与R有关,其他两项(xiTxi和yiTyi)都是常量,所以问题转换为求其中一项可变量的最小值,即

 

(14)式中的转换是将累加转换成矩阵相乘,其中W是n×n的对角矩阵,X和Y是3×n的矩阵,这些矩阵相乘后的迹就等于等式左边的值。同时,对于矩阵的迹,有如下变换关系:




(18)式中最后一步的变换也用到了(15)式的性质。由于U、R、V都是正交矩阵,那么M=VTRU也是正交矩阵。



由上述两式可以知道,要求最大迹,就必须使得mii的值等于1,而M又是正交矩阵,那么M就必然是单位矩阵,即有


I = M = VTRU  => V = RU ⇒ R = VUT(21)


四 旋转结果校正

到上面(21)式为止,求得的R是最优的正交矩阵,但是这个正交矩阵既可以是旋转矩阵,也可以是反射矩阵。反射矩阵参见博文“旋转和反射”。


根据R的行列式值可以判断该结果是旋转矩阵还是反射矩阵,假如是反射矩阵,那么其行列式值就为-1。如果我们严格限定我们求解的必须是旋转矩阵,那么当前求解出来的反射矩阵就不符合要求。这个时候就必须求解下一个符合要求的最优解。


将目标问题重新组织成如下形式:




如果我们将mii当作变量,它的取值范围就是[-1,1]。函数f对于mii来说是线性的,所以它在定义域的边界上才取得极值。很显然对于所有的mii来说,所有都取1能取得最大的极值,但是该取值必须被排除(用这个得出的R是反射矩阵),那么下一个最优的(m11,m22,...,mdd)取值就是(1,1,...1,-1),即除最后一个值取-1外,其他的值仍然为1。




为什么是取最后一个mdd为-1,这是进行SVD分解之后,Σ矩阵里对角线上的值经过了排序的,即σd的值最小

展开阅读全文

没有更多推荐了,返回首页