参考博客
参考博客:https://blog.csdn.net/llfjcmx/article/details/83410318
1. 三角测量
在得到了相机的运动之后,下一步我们需要用相机的运动来估计特征点的空间位置,但是在单目SLAM中,仅通过单张图像是无法获得像素的深度信息的,需要用三角测量(三角化)的方法来估计地图点的深度。
三角测量是指通过在两处观察同一个点的夹角,来确定该点的距离。
考虑图像,相机的光心为,以左图为参考,右图的变换矩阵为。
假设在中有特征点,对应到中的特征点,理论上讲会相交于某一点P,该点即是两个特征点所对应的地图点在三维场景中的位置,但是由于噪声的影响,这两条直线往往无法相交,因此可以通过最小二乘法来求解出距离最近的那个点作为相交点。
按照对极几何中的定义,如果设为两个特征点的归一化座标,于是有下列关系式:
已知:座标系的变换矩阵归一化座标,现在要求的就是两个特征点的深度
左乘可得:
可以解出, 将其带入原来的式子可解出.
但是,由于噪声的存在,我们求出来的R,t不一定能够使得上式精确等于0,因此在实际情况中,更常见的做法是求最小二乘解而不是零解。
2. 单目初始化
由于 E(本质矩阵)本身具有尺度等价性,它分解得到的 也有一个尺度等价性。而本身具有约束,所以我们认为 具有一个尺度。换言之,在分解过程中,对t乘以任意非零常数,分解都是成立的。因此,我们通常把t进行归一化,让它的长度等于1.
对 长度的归一化,直接导致了单目视觉的尺度不确定性。因为对t乘以任意一个比例常数后,对极约束仍然是成立的。换言之,在单目SLAM中,对轨迹和地图同时缩放任意倍数,我们得到的图仍然是一样的。
单目视觉的初始化问题
在单目视觉中,我们对两张图像的t进行归一化,相当于固定了一个尺度。虽然我们不知道它的实际长度是多少,但是我们可以以这时的 为单目1,计算相机运动和特征点的3D位置,这一步称为单目SLAM的初始化。
在初始化之后,就可以用3D-2D来计算相机的运动了,初始化之后的轨迹和地图的单位,就是初始化时固定的尺度。因此,初始化也是单目SLAM中不可避免的一个步骤。
初始化的两张图片必须要有一定程度的平移,而后的轨迹和地图都将会以这一步的平移为单位。单目初始化不能只有纯旋转,必须要有一定程度的平移,如果没有平移,单目将无法初始化。