前言
Sim(3)三维空间的相似变换,计算Sim(3)实际上就是计算三个参数:旋转R、平移t、尺度因子s。
计算Sim(3) 的目的: 已知至少三个匹配的不共线的三维点对,求它们之间的相对旋转、平移、尺度因子。
假设坐标系1下有三个不共线的三维点P1,P2,P3,它们分别和坐标系2下的三个不共线的三维点 Q1 , Q2 ,Q3对应。
1.构建一个新的坐标系:
根据坐标系1下的三个点,计算各个方向的单位向量。
1.x方向
2.y方向
后者利用了向量的投影公式。
3. z方向
同理也可对坐标系2求解坐标系单位向量。
2.由坐标系单位向量构成的基底矩阵分别记为:
3.设一向量v,它在不同基底的坐标系下分为v1,v2,两者是同一向量在不同坐标系下的表示,满足下列关系:
4.由此推出从坐标系1到坐标系2的旋转为:
利用上述方法计算Sim(3)中的参数R会存在一些问题:
1.假设我们在构建新的坐标系时,不是以P1为坐标原点时,得到的结果会不同。
2.这种方法只适合匹配点是三对的情况,当大于三对点时则不适用。
所以我们采用一种更稳定、更精确的计算方式:最小二乘法。
最小二乘法求解sim(3)变换
1.构建残差方程
假如我们得到了n(n>3)对匹配的三维点观测坐标分别记为P = {Pi} 和Q = {Qi} ,根据变换关系有:
我们定义一个误差ei:
最后的目的就转化为寻找s、R、t使得ei最小,这就变成了一个最小二乘问题:
定义两个三维点集合中所有三维点的均值向量:
求解去中心化后的坐标向量:
性质:
将残差方程作适当变形和化简:
令:
化简为:
利用去中心化坐标向量的性质化简:
2. 计算sim(3)中的尺度因子s
利用残差方程的第一项:
对第一项进行展开并化简有:
其中旋转对模长无影响则有:
最后的结果为:
适当的进行变形:
可以看出这是一个关于s的一元二次方程,利用方程性质得出s的值为:
但是这里存在一个不对称问题:我们调换了变换顺序但是尺度因子却不是倒数:
因此尺度因子并不具有对称性,因此要利用下面的构造函数来使其对称:
从这个等式可以看出第一项只和s有关,我们可以的出最优解s使第一项等于0:
从等式的第二项可以看出使D尽可能大就会使残差尽可能小。
3. 计算sim(3)中的旋转R
在利用旋转矩阵时需要保证矩阵的正交性的约束但是这个约束太强了,因此我们可以用四元数来代替,这样只需要保证四元数的模值为1即可,有利于推导。
对于空间中的三维点P=[x,y,z]可以用一个虚四元数进行表示:
四元数的一些性质:
1. 旋转可以用单位四元数 进行表示,旋转变换为:
其中单位四元数的逆是其共轭四元数。
2.四元数的矩阵表示:
3.
计算R
我们对求尺度因子s中D做出适当化简变形:
令去中心化的坐标向量分别为:
利用四元数性质转换成对称矩阵的形式:
我们先定义一个矩阵M来简化矩阵N的表示:
则最后的矩阵N的形式为:
我们对其进行特征值分解,求出最大特征值对应的特征向量就是待求的最优四元数。
4.计算sim(3)中的平移t
利用残差方程的第二项:
我们观察残差方程等式右侧全是大于等于0的平方项并且只有第二项与平移t有关,因此只需要让第二项为0即可找到最优解t使得残差尽可能小:
结束语
以上就是我学习到的内容,如果对您有帮助请多多支持我,如果哪里有问题欢迎大家在评论区积极讨论,我看到会及时回复。
标签:推导,变换,矩阵,残差,三维,四元,向量,坐标系,sim From: https://blog.csdn.net/2301_76831056/article/details/144474385