视觉SLAM笔记--第6篇: 单目初始化和三角测量

单目初始化和三角测量

参考博客

参考博客:https://blog.csdn.net/llfjcmx/article/details/83410318

1. 三角测量

在得到了相机的运动之后,下一步我们需要用相机的运动来估计特征点的空间位置,但是在单目SLAM中,仅通过单张图像是无法获得像素的深度信息的,需要用三角测量(三角化)的方法来估计地图点的深度。

三角测量是指通过在两处观察同一个点的夹角,来确定该点的距离。

在这里插入图片描述
考虑图像I1,I2I_{1},I_{2},相机的光心为o1,o2o_{1},o_{2},以左图为参考,右图的变换矩阵为R,tR, t

假设在I1I_{1}中有特征点p1p_{1},对应到I2I_{2}中的特征点p2p_{2},理论上讲o1p1o2p2o_{1}p_{1}和o_{2}p_{2}会相交于某一点P,该点即是两个特征点所对应的地图点在三维场景中的位置,但是由于噪声的影响,这两条直线往往无法相交,因此可以通过最小二乘法来求解出距离最近的那个点作为相交点。

按照对极几何中的定义,如果设x1,x2x_1,x_{2}为两个特征点的归一化座标,于是有下列关系式:
s1x1=s2x2R+ts_{1}x_{1}=s_{2}x_{2}R+t已知:座标系oo1o到o_{1}的变换矩阵RtR、t归一化座标x1,x2x_{1},x_{2},现在要求的就是两个特征点的深度s1,s2s_{1},s_{2}

左乘[x1]×[x_{1}]_{\times}可得s1[x1]×x1=0s_{1}[x_{1}]_{\times}x_{1}=0
s2[x1]×x2R+[x1]×t=0s_{2}[x_{1}]_{\times}x_{2}R+[x_{1}]_{\times}t =0可以解出s2s_{2}, 将其带入原来的式子可解出s1s_{1}.
但是,由于噪声的存在,我们求出来的R,t不一定能够使得上式精确等于0,因此在实际情况中,更常见的做法是求最小二乘解而不是零解。

2. 单目初始化

由于 E(本质矩阵)本身具有尺度等价性,它分解得到的 RtR、t也有一个尺度等价性。而本身具有约束,所以我们认为 tt 具有一个尺度。换言之,在分解过程中,对t乘以任意非零常数,分解都是成立的。因此,我们通常把t进行归一化,让它的长度等于1.

tt 长度的归一化,直接导致了单目视觉的尺度不确定性。因为对t乘以任意一个比例常数后,对极约束仍然是成立的。换言之,在单目SLAM中,对轨迹和地图同时缩放任意倍数,我们得到的图仍然是一样的。

单目视觉的初始化问题

在单目视觉中,我们对两张图像的t进行归一化,相当于固定了一个尺度。虽然我们不知道它的实际长度是多少,但是我们可以以这时的 tt 为单目1,计算相机运动和特征点的3D位置,这一步称为单目SLAM的初始化。

在初始化之后,就可以用3D-2D来计算相机的运动了,初始化之后的轨迹和地图的单位,就是初始化时固定的尺度。因此,初始化也是单目SLAM中不可避免的一个步骤。

初始化的两张图片必须要有一定程度的平移,而后的轨迹和地图都将会以这一步的平移为单位。单目初始化不能只有纯旋转,必须要有一定程度的平移,如果没有平移,单目将无法初始化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章