本文主要是针对《Least-Squares Fitting of Two 3-D Point Sets》论文SVD求解旋转矩阵中推导过程中使用到的一些线性代数相关的内容做一些说明,具体算法实现不是很复杂,也有很多其他博客可以参考,比如参考中第2条SVD分解求变换矩阵(C++版)。
这里直接贴论文中算法截图了(只截取了部分截图),算法过程这一部分不是本文重点,之后有需要再详细补充。本文主要是为了解决《Least-Squares Fitting of Two 3-D Point Sets》第3部分B.Derivation中的一些困惑,为什么SVD可以求解旋转矩阵,为什么使用了SVD。
论文是用最小二乘的方式求解R和T,通过误差方程最小来获得最优的R和T。
论文中一些标识说明,其中
p
i
,
p
i
′
{p_i},{p_i'}
pi,pi′是输入的两组三维点集,
p
i
p_i
pi是
3
×
1
3 \times 1
3×1的列向量。
p
p
p表示输入点集
p
i
{p_i}
pi的质心,
p
′
p'
p′表示输入点集
p
i
′
{p_i'}
pi′的质心,
p
′
′
p''
p′′表示输入点集
p
i
′
′
{p_i''}
pi′′的质心。



论文中III部分B小节是SVD可以计算得到R的推导,本文主要是针对该部分。


在Lemma中证明当一个矩阵式正定矩阵时,任何正交矩阵乘该矩阵的迹都比矩阵自身的迹要小。而 X H = V Λ V t XH=V \Lambda V^t XH=VΛVt就是一个对称的正定矩阵。而对称正定矩阵(正定对称矩阵)可以分解为 A A T AA^T AAT,或者 A T A A^TA ATA,例如使用Cholesky分解,可以分解为一个下三角矩阵和一个上三角矩阵的乘积。可知 X H XH XH满足Lemma,可以证明在 X = V U t X=VU^t X=VUt时, T r a c e ( X H ) Trace(XH) Trace(XH)最大,即R=X时 T r a c e ( R H ) Trace(RH) Trace(RH)最大,由此可以由SVD分解得到R。

