链接:https://www.cnblogs.com/wangguchangqing/p/8287585.html
单应(Homography)是射影几何中的概念,又称为射影变换。它把一个射影平面上的点(三维齐次矢量)映射到另一个射影平面上,并且把直线映射为直线,具有保线性质。总的来说,单应是关于三维齐次矢量的一种线性变换,可以用一个3×3的非奇异矩阵H表示
这是一个齐次坐标的等式,H乘以一个非零的比例因子上述等式仍然成立,即H是一个3×3齐次矩阵,具有8个未知量。
假设已经取得了两图像之间的单应,则可单应矩阵H可以将两幅图像关联起来
上面提到单应表示的是两个平面之间的映射,这里为何得到了同一平面两个不同相机坐标系的单应矩阵。虽然平面是通过,但是在不同坐标系中会有不同的表示,单应也是将平面从一个位置映射到另一个位置,并保持其某些性质不变,例如保线性。[image]
上面得到的单应矩阵第一个相机坐标系取得,还需要将其变换到成像平面坐标系中,取得两图像间的单应矩阵。设x1,x2为P在两图像的像点坐标,
平面的单应和对极约束的区别
两图像间的单应矩阵后,有什么作用呢?它和两幅图像间的对极约束有何区别
两图像间的对极约束和场景的结构无关,也就是说对极约束对于任意场景结构的两幅图像都是成立的,不能给出两幅图像上的像点的一一对应关系,只能给出点对应的必要条件,另一幅图像上与图像上对应的像点在位于对应的对极线上。基础矩阵F描述的实际是一种点和直线的映射关系,而不是一种点对点的约束关系,并不能给出另一个点的确切位置。
平面间的单应,并不像对极约束完全不需要场景的结构信息,它对场景的结构有了要求:场景的点必须在同一个平面上,因此单应矩阵H也就能够对两图像上对应点的提供更多的约束,知道了某点在一幅图像的像点位置后,可以通过单应矩阵,求得其在另一幅图像中像点的确切位置。
也就说,三维点如果不是在同一个平面上,可以使用基础矩阵F来计算图像上像点在另一幅图像上对应的对极线,而不能使用单应矩阵H得到对应点的确切位置。但如果在这种情况下,仍使用单应矩阵H计算对应点的位置,其结果会如何呢,如下图
通过平面P在两图像上的匹配点,计算得到了其两图像间的单应矩阵H。三维点p′并不在平面P上,其在图像1中的像点为x1,使用单应矩阵H计算其在图像2中对应的像点。从上图可以看出,p′在图像2上的像点是x′2,而使用单应矩阵计算得到的像点却是x2。
在这种情形下,使用单应矩阵H估计图像上对应点位置,误差来自两个方面:
三维点p′和单应矩阵H对应的平面P之间的距离。
从上图可知使用H计算p′像点位置时,实际得到的是却是平面P上的点p在图像2的像点,而p是相机1的中心O1和p′确定的直线和平面P的交点。
相机2相对于相机1的平移。
具体分析可看下一小节相机只有旋转无平移下的单应。
也就是说,在相机的平移相对于场景的深度足够小时,仍然可以使用单应矩阵H来计算图像中匹配像点的对应位置