基本变换公式
我们考虑二维平面的仿射变换;缩放,旋转,平移变换;假设两个点P1(x1,y1),p2(x2,y2) 经过仿射变换后变为 P1'(x1',y1'),P2'(x2',y2')
假如只有缩放变换,比例为s, 则
x1' = s * x1
y1' = s * y1
x2',y2'同理
假如只有旋转变换,旋转角度为theta,则
x1' = x1 * cos(theta) + y1 * sin(theta)
y1' = -x1 * sinn(theta) + y1 * cos(theta)
x2',y2'同理
3 假如只有平移变换,平移(dx,dy),则
x1' = x1 + dx
y1' = y1 + dy
x2',y2'同理
不变性
如果只有旋转和平移变换,两个点之间的距离仍然保持不变;即如果只经过旋转和平移变换;P1P2 之间的距离和 P1'P2'之间的距离相等;平移变换不证明了,旋转变换下通过旋转公式,计算 (x1' - x2')^2 + (y1'-y2')^2 易得:
(x1' - x2')^2 + (y1'-y2')^2 = (x1 - x2)^2 + (y1-y2)^2
如果只有缩放和平移变换,向量 P1P2 和 向量 P1'P2' 平行;向量 P1P2可表示为:(x2-x1,y2-y1) 向量P1'P2'可表示为(x2'-x1', y2'-y1');向量 P1P2 和 向量 P1'P2' 平行可表示为: (x2-x1)(y2'-y1') - (x2'-x1')(y2-y1) = 0
参数估算回推
利用不变性以及特征点来匹配来推算变换参数;估算顺序需要为 缩放-> 旋转 -> 平移;参见参考资料;
利用LM等优化算法以及RANSAC 等一致性算法来优化参数以及排除外点
如果两张图之间只有仿射变换,那么在通过特征点匹配算法得到两张图之间的匹配关系后;我们如何进行仿射变换参数的估量?
一种通用方法是将变换整体考虑,例如计算单应矩阵,然后根据单应矩阵推算仿射变换参数
但是在一些场景下,例如我们需要一些快速算法,或者一些可解释性的场景,我们可以利用仿射变换的性质分别进行缩放/旋转/平移参数的估算
缩放参数估算
缩放和旋转参数需要首先进行估算;其一,缩放参数不受旋转和平移参数的影响,其次,缩放参数会影响旋转和平移参数的估算;
缩放不变性
缩放不变性指缩放参数不受旋转和平移参数的影响,两个特征点之间的距离即可代表两张图的缩放比例
一个误区
之前觉得可以以一个特征点在两张图中不同的坐标到图像中心的距离来代表两张图之间的缩放比例,后来发现问题很大,主要问题是图像经过仿射变换后图像的中心点发生了偏移,只能是匹配的特征点之间的距离才能代表两图之间的缩放比例。
旋转参数估算
旋转参数的估算类似缩放参数的估算,旋转参数的估算可以在缩放参数估算前或者之后;
基本思路类似类似缩放参数,以一个匹配点作为参考点,计算其他匹配点的向量旋转角度
平移参数估算
应用到三维
参考资料:
为什么坐标变换的顺序必须是: 缩放->旋转->平移