之前整理了笔记:
- 3月12日 对极几何,本征矩阵,基础矩阵,F/E矩阵计算,恢复旋转与平移,三角化视图重建
- 3月9日 笔记:RANSAC随机样本一致性,灭点、对极几何计算、H矩阵、PNP估计相机位置,3D匹配、投影变换、N点定位求解姿态
在2D-2D情况下,你只有两个点的2D坐标
(1)对极约束(Epipolar Constraint)。简而言之,随便你出一组匹配点,都会有这么个约束成立。从配对点算E(Essential(本质)矩阵)。然后就是用E算R,t的问题了。另外再啰嗦一句,当你不知道内参时,只有像素坐标,会引入F(Fundamental,基本矩阵),和E大同小异但是性质比E麻烦点。因为通常认为相机已经标定好了所以也用不着它了。
2D-2D的情况换言之,在分解过程中,对乘以任意非零常数,分解都是成立的,这个叫做单目SLAM的尺度不确定性。因此,我们通常把t进行归一化,让它的长度等于1。或者让场景中特征点的平均深度等于1,总之是有个比♂例的。此外,分解E的过程中,如果相机发生的是纯旋转,导致t为零,那么,得到的E也将为零。于是,另一个结论是,单目初始化不能只有纯旋转,必须要有一定程度的平移!
尺度不确定性其实其他答主有解释了,我试着表达下我对尺度漂移的理解。
这个和单目VO其实有很像的地方,主要分为三步。
1、任选两张图(设为第0帧和第1帧),先提取关键点并匹配,再根据对极几何求本质矩阵E,再从E中恢复R,t。这个在单目VO里属于初始化的部分,其中得到的t是个单位向量,因为任意缩放t,极线约束都成立。你可以对t进行任意缩放。缩放完后,设第0帧的位置为相机坐标系原点,则第1帧的位置就可以由R, t得到。虽然这个t不是真值,但是可以固定下来。然后根据两帧的位置,可以对图像帧0和1中匹配的三维点进行三角化。
2、对之后的图像帧,就不再是利用对极几何求R,t了。依旧是先提取关键点再匹配哈, 但是这次匹配的上一帧的特征中,有些是已经被三角化过的,因此可以像之前答主说的用运动模型加BA求该图像帧与上一帧的位置关系,也可以用PnP求R,t。求出来R,t之后,再三角化该帧与上一帧的没被三角化过的匹配点。
3、最后加上回环检测。
尺度漂移就是出现在第二步。因为对于新的图像帧,都是先计算其R,t,再利用该R,t三角化与之前图像帧匹配的点。问题就是,如果第一步算的R,t有误差,那么第二步三角化的三维点的深度就存在误差,也就是说其深度会存在一个缩放。对于新来的每一帧,都会有这样的问题。如果没有回环检测,那么这个缩放的误差会一直存在并被传递与叠加,导致后面三角化的点的尺度与第一幅图的点不一致。这就是我理解的尺度漂移。
再反问自己一下,为何双目,RGBD与激光雷达没有尺度漂移?
1.双目相机基线确定,即左右两幅图像的R,t确定,那么其三角化的三维点的误差也是固定的。
2. RGBD相机与激光雷达的测量值都是不依赖于相机自身位置的深度值,因此其不会有尺度上的变化。
以上是特征点法的尺度漂移问题。直接法我还不懂,就不忽悠了。
单目slam 由于使用的传感器是单个摄像头,每次获取的数据只是单张图像数据。要想估计该帧的位姿或观测的空间点位置,需要通过分解基础矩阵(本质矩阵)或单应矩阵获取与上一帧的相对位姿(R,t)然后三角化出特征点对应的空间点(对于特征点法slam的初始化过程)。其中这里面涉及的细节还是很多的,使用了很多trick!例如,如何缩小搜索范围以快速找到匹配特征对,如何利用特征主方向剔除误匹配,如何组织特征点对使用RANSAC进行八点法估计F/H等等,这些都值得思考。(能写出来的都是大佬,是真的大佬:))这其中就涉及到尺度的不确定性,一方面,由MVG 可知对极几何是一个为零的约束,即反向延长空间点P与两光心o1/o2的连线到O1/O2,组成相似三角形Po1o2与PO1O2.则,这两个位姿同时满足同一个对极约束,这就体现了单目的尺度不确定性(手机回答,只能文字描述),对于单应矩阵好像也是同样的道理(请大佬指正)。另一方面,在生成MapPoint时,计算MapPoint集的深度中值,并将所有MapPoint 的深度除以该值,这也提现了单目尺度不确定性。由此,后续根据恒速模型(将上两帧的相对位姿变换作为这两帧的相对位姿变换的先验,然后通过BA得到后验位姿),跟踪参考帧(通过与参考关键帧之间的共视关系进行BA解算位姿)等解算的位姿都受到先前尺度不确定的影响,因此就把单目尺度不确定性递推了下去。又由于每一步的解算都不可避免地存在误差,甚至出现错误!也就出现了估计位姿的漂移现象。本人拙见,还望大佬指正!!