仿射变换和单应矩阵
首先明确:二者的应用场景相同,都是针对二维图片的变换。仿射变换affine是透视变换的子集,透视变换是通过homography单应矩阵实现的。
从数学的角度,homography即H阵,是一个秩为3的可逆矩阵:
仿射矩阵是:
由于第三行没有未知数,仿射矩阵最常用的是两行三列的形式。计算H阵需要4对不共线点,计算仿射阵只需要3对不共线的点。
通常会才用RANSAC方法从多对匹配点中计算得到精确、鲁棒的结果。affine一般比homography更稳定一些,所以可以先计算affine,然后再用affine作为homography的初始值,进行非线性优化。
仿射变换的实际意义
仿射变换在图形中的变换包括:平移、缩放、旋转、斜切及它们的组合形式。这些变换的特点是:平行关系和线段的长度比例保持不变。
平移变换
数学形式:
矩阵形式:
尺度变换
矩阵形式:
旋转变换
矩阵形式:
刚体运动:旋转缩放平移
矩阵形式:
斜切变换
矩阵表示:
这个也是更为一般的仿射变换的形式,xy轴的旋转是两个自由度。
透视投影变换的实际意义
首先,继续上面的示例,透视变换的矩阵形式:
这个变换看似是很随意的,变化的可能性也是非常多。但投影变化具有其明确的意义:共面点成像。
先回顾下摄像机模型:
世界坐标系映射到摄像机坐标系:Pc即上图的Mext
其中Maff表示像素坐标系和单位距离坐标系之间的转化,与硬件设备相关。不考虑像素坐标系,在以米等单位距离为尺度的笛卡尔坐标系中,有:
对于共面点,我们可以另其一个坐标为0(肯定存在一个适当的世界坐标系满足的),不妨设为第三维度,上述矩阵可以得到简化:
最终得到的3*3的矩阵,称之为“Homography矩阵”,该矩阵是可逆的。
研究共面点成像有什么意义呢?两个不同位置的相机,共面点对应有两个单应矩阵H1和H2。
两个角度拍摄的一堆共面点,可以通过H1和H2以及C阵(上面的Mext)得到变换矩阵H。矩阵的形式:
求解上述方程,有两种方式,一种是设:
;两一种是添加约束:。
选择第一种约束:
得到:
写成矩阵的形式:
线性最小二乘为题:
1997年,Hartley发表“In Defense of the Eight Point Algorithm”对原始8点算法进行改进,在构造解的方程之前对输入的数据进行适当的归一化。即在形成8点算法的线性方程组之前,图像点的一个简单变换(平移或变尺度)将使这个问题的条件极大地改善,从而提高结果的稳定性。而且进行这种变换所增加的计算复杂性并不显著。算法具体过程具体如下:
a.对原始图象坐标做一个平移变换,使原来以左上角为原点的图象坐标变成以所有图像点的重心为原点的图像坐标;
b.再对图象坐标做一个尺度变换,使得点到原点的平均距离为
。
分别对两幅图像进行以上两步变换,然后将变换后的图像坐标作为输入数据计算基础矩阵。计算过程如下:
第二种求解方式:这里可以使用SVD分解
得到:
矩阵的形式:
齐次最小二乘法:Ah=0,h的解是A的SVD分解V的最后一列向量,右奇异向量还是单位向量,正好满足条件。
透视变换的应用主要有两个:消除透视投影导致的失真,校正图像;图像拼接。