任意的两个三维笛卡尔坐标系之间的旋转都可以用一个3x3的矩阵来表示。在关于相机标定的问题里,经常需要计算两个坐标系之间点的关系。只要能算出变换矩阵,就可以算出A坐标系的一个点P在坐标系B里的对应点坐标,即 P B = T ∗ P A + t P_B=T*P_A+t PB=T∗PA+t, T T T为3x3的转换矩阵, t t t为3x1的位移变换向量,这里点坐标均为3x1的列向量。
只要给定至少3个点,就能计算出 T T T和 t t t,一般来说点越多,计算出来的转换就越精确。
参考《Estimating 3-D Rigid Body Transformations: A Comparison of Four Major Algorithms》,可以使用SVD方法计算 T T T和 t t t。
计算原理如下图:
Python代码如下,实验中采集了两个三维坐标下的8个点对,使用6个点对计算转换矩阵,用了2个点对用于验证。
注意点坐标是