最近公众号组织了ORB-SLAM2理论与代码的学习会,正常进行中,有兴趣的可以积极参与第三期:一起来学SLAM
其中ORB-SLAM点云地图中相机的位姿初始化,无论算法工作在平面场景,还是非平面场景下,都能够完成初始化的工作。其中主要是使用了适用于平面场景的单应性矩阵H和适用于非平面场景的基础矩阵F,程序中通过一个评分规则来选择适合的模型,恢复相机的旋转矩阵R和平移矩阵t
那么下面主要讲解关于对极几何中的基础矩阵,本质矩阵,和单应矩阵之间的区别与联系。
对极几何(Epipolar Geometry)描述的是两幅视图之间的内在射影关系,与外部场景无关,只依赖于摄像机内参数和这两幅视图之间的相对位姿。
两视图的对极几何可以理解为图像平面与以基线为轴的平面束相交的几何关系,其中主要有几种概念:
(1)基线(base line):两个相机中心的连线CC'称为基线。
(2)对极点(epipolar):ee'是对极点,是基线与两个成像平面的交点,也就是两个相机在另一个成像平面上的像点。
(3)对极平面(epipolar plane):过基线的平面都称之为对极平面,其中两个相机的中心C和C',三维点X,以及三维点在两个相机成像点xx'这五点必定在同一对极平面上,当三维点X变化时,对极平面绕着基线旋转,形成对极平面束。
(4)对极线(epipolar line):是对极平面和成像平面的交线,所有的对极线都相交于极点。
那么由对极几何的基本性质引出了对极约束的概念,对极约束是指在平面2上的p点在平面1上的对应点一定在基线I'上,这句话说明了对极约束是一个点到直线的射影映射关系。如图所示:
根据对极约束可以引出本质矩阵和基础矩阵。在已知相机标定的情况下,假设有一个三维坐标点P(X,Y,Z)在两个视图上的点分别为p1,p2,由于第一个相机的中心作为世界坐标系的原点,也就是说第一个相机没有旋转R和平移t,通过小孔相机模型有:
p1=KP, p2=K(RP t)
其中,K是相机的内参,R,t是第二个相机相对于第一个相机的旋转和平移。
从p1=KP可以得到
带入到第二个式子得到
两边同时乘以K_1得到
设x1,和x2表示为
带入到x2=Rx1 t中,两边同时左乘向量t的反对称矩阵t×,由于t×t=0,消除t,
两边再同时左乘xT2
由于t×x2是向量t和向量x2的叉积,同时垂直于向量t和向量x2,所以左边的式子为0得到:
将x1,x2替掉
上式是对极约束的一种表示,该式子中仅包含像点,相机的旋转和平移,中间的矩阵就是基础矩阵F:
当K已知时提取中间的矩阵得到本质矩阵E,E矩阵同样表示的是对极约束的关系,只不过它不再涉及相机内参,只由两视图之间的姿态关系决定:
F矩阵的性质有三:
1, 3*3且自由度为7的矩阵
2,kF 为基础矩阵,相差一个尺度自由度
3,F矩阵的秩为2
基础矩阵的求解方法:
1,直接线性变换法(8点法 最小二乘法)
2,RANSAC-估计基础矩阵
求解基础矩阵后,我们实际上是想求R和t.所以还是要继续求解本质矩阵直到分解出R,t
E矩阵的性质:
(1)3*3且自由度为5的矩阵
(2)因为只包含R,t共有6个自由度,又因为尺度等价去掉一个自由度
(3)本质矩阵E的奇异值 必定为[ delta delta,0]T 的形式
ORB-SLAM中通过E、F矩阵就可以利用两视图中的匹配点求解出相对姿态了,不过这个方法存在一个问题——当两个视图的相机中心相同时,也就是R,t中的t为0,这时对极几何的基础也就不成立了,可知E、F均为0无法求解。这时就需要使用平面间的单应性H矩阵恢复R,t。
单应性矩阵Homogeneous是射影几何中的一个术语,又称之为射影变换。本质上是一个数学概念,一般所说的单应矩阵是平面上的单应性矩阵,主要用来解决两个问题:
(1)表述真实世界中一个平面与他对应图像的透视变换
(2)通过透视变换实现图像从一个视图变换到另一个视图的转换。
把一个射影平面上的点(三维齐次矢量)映射到另一个射影平面上,并且把直接射影为直线,具有保线性,总的来说单应是关于三维齐次矢量的一种线性变换,如图所示,两个平面之间的关系可以用一个3*3的非奇异矩阵H表示x1=Hx2,H表示单应矩阵,定义了八个自由度。这种关系定义为平面单应性。
假设已经取得了两图像之间的单应,则可单应矩阵HH可以将两幅图像关联起来:
其中,(u1,v1,1)T(u1,v1,1)T表示图像1中的像点,(u2,v2,1)T(u2,v2,1)T是图像2中的像点,也就是可以通过单应矩阵H将图像2变换到图像1,该功能有很多实际的应用,例如图像的校正、对齐以及在SLAM中估计两个相机间的运动。并保持某些性质的不变性,显然具有保线性。
而在视觉slam中一般为同一相机在不同的位姿得到同一平面的图像有以下公式
以上公式如何推导而来呢?假设使用同一相机在不同的位姿下拍摄了同一平面,如图:
上图表示场景中的平面π在两相机的成像,设平面π在第一个相机坐标系下的单位法向量为N,其到第一个相机中心(坐标原点)的距离为d,则平面π可表示为:
变换为
其中,X1是三维点P在第一相机坐标系下的坐标,其在第二个相机坐标系下的坐标为X2,则
将上面式子结合起来有
得到了同一平面两个不同相机坐标系的单应矩阵
单应矩阵求解方法:
(1)直接线性变换法。
(2)RANSAC-估计单应矩阵
平面的单应矩阵和对极约束的F矩阵的区别
两图像间的对极约束和场景的结构无关,可以理解对极约束对于任意场景结构的两幅图像都是成立的,约束是不能给出两幅图像上的像点的一一对应关系,但是可以给出点对应的必要条件,另一幅图像上对应的像点位于对应的对极线上。基础矩阵F描述的实际是一种点和直线的映射关系,而不是一种点对点的约束关系,并不能给出另一个点的确切位置。
平面间的单应矩阵,并不像对极约束完全不需要场景的结构信息,它对场景的结构有了要求,场景的点必须在同一个平面上,因此单应矩阵H也就能够对两图像上对应点的提供更多的约束,知道了某点在一幅图像的像点位置后,可以通过单应矩阵,求得其在另一幅图像中像点的确切位置。
单应矩阵的应用场景是相机只有旋转而无平移的时候,两视图的对极约束不成立,基础矩阵F为零矩阵,这时候需要使用单应矩阵H,场景中的点都在同一个平面上,可以使用单应矩阵计算像点的匹配点。 相机的平移距离相对于场景的深度较小的时候,也可以使用单应矩阵H。
本文内容推导大部分来自《视觉SLAM14讲》。如有补充请大家积极留言,并且希望大家能够在阅读论文或者有推荐的论文或者开源代码,只要和点云相关,都可以留言给群主,如果有必要将会出与你推荐相关的资料。希望大家能够积极参与分享。如有侵权请第一时间联系本平台,将及时删除。
作者:dianyunpcl
排版 :dianyunpcl
点一下“在看”你会更好看耶