SLAM入门之视觉里程计(5):单应矩阵
在之前的博文OpenCV,计算两幅图像的单应矩阵,介绍调用OpenCV中的函数,通过4对对应的点的坐标计算两个图像之间单应矩阵
单应(Homography)是射影几何中的概念,又称为射影变换。它把一个射影平面上的点(三维齐次矢量)映射到另一个射影平面上,并且把直线映射为直线,具有保线性质。总的来说,单应是关于三维齐次矢量的一种线性变换,可以用一个
这是一个齐次坐标的等式,
假设已经取得了两图像之间的单应,则可单应矩阵
其中,
同一相机在不同的位姿得到同一平面的图像
假设使用同一相机在不同的位姿拍摄同一平面,如下图:
上图表示场景中的平面
即
其中,
将上面式子结合起来,
所以就得到了同一平面两个不同相机坐标系的单应矩阵
上面提到单应表示的是两个平面之间的映射,这里为何得到了同一平面两个不同相机坐标系的单应矩阵。虽然平面是通过,但是在不同坐标系中会有不同的表示,单应也是将平面从一个位置映射到另一个位置,并保持其某些性质不变,例如保线性。
上面得到的单应矩阵第一个相机坐标系取得,还需要将其变换到成像平面坐标系中,取得两图像间的单应矩阵。设
所以,同一平面得到的两个图像间的单应矩阵
平面的单应和对极约束的区别
两图像间的单应矩阵后,有什么作用呢?它和两幅图像间的对极约束有何区别
两图像间的对极约束和场景的结构无关,也就是说对极约束对于任意场景结构的两幅图像都是成立的,不能给出两幅图像上的像点的一一对应关系,只能给出点对应的必要条件,另一幅图像上与图像上对应的像点在位于对应的对极线上。基础矩阵
平面间的单应,并不像对极约束完全不需要场景的结构信息,它对场景的结构有了要求:场景的点必须在同一个平面上,因此单应矩阵
也就说,三维点如果不是在同一个平面上,可以使用基础矩阵
通过平面
在这种情形下,使用单应矩阵
- 三维点
p′ 和单应矩阵H 对应的平面P 之间的距离。
从上图可知使用H 计算p′ 像点位置时,实际得到的是却是平面P 上的点p 在图像2的像点,而p 是相机1的中心O1 和p′ 确定的直线和平面P 的交点。 - 相机2相对于相机1的平移。
具体分析可看下一小节相机只有旋转无平移下的单应。
也就是说,在相机的平移相对于场景的深度足够小时,仍然可以使用单应矩阵
该段分析多数参考Homography 知多少?
相机只有旋转无平移下的单应
当相机在只有旋转而没有平移的情况下取得同一场景的两幅图像,可以使用单应矩阵
通过前面的文章知道,相机在不同位姿下取得同一场景的图像,可以使用基础矩阵
假设得到两幅图像的相机之间只有旋转,而没有平移
其中,
从上面公式可得到
又有两个图像间的单应
也就是在相机只有旋转的情况下,可像求解两图像间的单应矩阵
基础矩阵
- 在相机只有旋转而没有平移的情况下,两视图的对极约束就不再适用,这时可以使用单应矩阵
H 来描述两个图像像点的对应关系。 - 在这种情况下,两图像点的匹配不依赖于三维点的深度信息,无法使用三角法重构出三维点在世界坐标系中的三维坐标。
通过匹配的点对计算单应矩阵
两图像上的像点
将矩阵的乘法展开,即可得到
方便求解,可以将上面等式变换为
第一和第二个式子的左右两边同时乘以第三个式子的左右两边得到
将式子的右边变为0
将上面的等式改写为向量积的形式,令
则上面两个式子可以改写为
其中,
一对匹配的点对,可以得到上述等式,
具体求解方法,可以参考SLAM入门之视觉里程计(4):基础矩阵的估计,首先将图像坐标归一化,然后使用最小二乘法或者随机采样一致性(RANSAC)的方法估计得到单应矩阵
在OpenCV 中也封装了各种求解单应矩阵的方法,具体的使用可以参考OpenCV,计算两幅图像的单应矩阵,通过求解两图像的单应矩阵,将图像变换到同一个视角下,然后叠加到一起。
总结
相比于两视图的基础矩阵(本质矩阵)来说,两图像的单应矩阵比较难理解一些。针对本文,总结以下几点
-
使用场景
- 基础矩阵表示的是两视图的对极约束,和三维场景的结构无关,只依赖于相机的内参数以及外参数,需要两个相机的位置有旋转和平移
- 单应矩阵对场景的三维结构有了更多的要求,需要场景中的点在同一个平面上; 或者是,对相机的位姿有了要求,两个相机之间只有旋转而无平移
-
约束关系
- 基础矩阵表示的像点和另一幅图像上的对极线的映射关系,使用基础矩阵无法得到像点对应点在另一幅图像上的确切位置。
- 单应矩阵则是点和点的映射,使用单应矩阵可以找到像点在另一幅图像上对应点的确切位置。
-
使用单应矩阵而不是基础基础
- 相机只有旋转而无平移的时候,两视图的对极约束不成立,基础矩阵
F 为零矩阵,这时候需要使用单应矩阵H - 场景中的点都在同一个平面上,可以使用单应矩阵计算像点的匹配点。
- 相机的平移距离相对于场景的深度较小的时候,也可以使用单应矩阵
H 。
- 相机只有旋转而无平移的时候,两视图的对极约束不成立,基础矩阵