LSD学习笔记-整体框架及流程梳理

LSD主要分为三个线程:跟踪、深度地图估计、地图优化

流程图:

LSD学习笔记-整体框架及流程梳理_第1张图片

在整体线程开始之前先进行初始化:初始化一个有随机深度图和大方差的关键帧即可。在第一秒内给出足够的相机运动,算法就可以“lock”到某个确定的的配置,经过几个关键帧的传递之后,就会收敛到正确的深度配置。

1.初始化完成之后就开始进行帧间跟踪(Tracking)

    帧间跟踪主要是通过最小化归一化光度误差完成的,具体的优化模型是:

LSD学习笔记-整体框架及流程梳理_第2张图片

这里位姿的求解是通过加权的高斯牛顿法进行的(推导过程在论文2.2部分)

2.在跟踪线程中对当前帧的位姿进行估计后,当前帧就被送到建图线程用于估计其参考关键帧的深度图(Depth Map Estimation)。主要是通过

(1)极线搜索在图像帧中找到与参考关键帧匹配的图像点

(2)通过新匹配的观测点对逆深度进行更新。

参考帧的选取:找到匹配点之前要寻找和关键帧做极限匹配的图像帧(即参考帧),这里尽可能选取视差和观测角度都比较小的两帧图像

点的匹配:即在选取的参考帧上找到需要更新深度的当前关键帧上的点的对应点,这里主要是通过极线搜索寻找对应点,已知两帧间的位姿之后,关键帧上的一点就对应参考帧上的一条对极线,如果关键帧上点的深度已经有先验值(就是有一个大概的范围了),就把逆深度的搜索范围定为,如果没有一个大概的范围,对整条极线进行搜索,在具体搜索过程中只对极线段上的5个采样点进行搜索,匹配误差是SSD误差:

LSD学习笔记-整体框架及流程梳理_第3张图片

    不确定度估计:在计算出对应点之后就可以通过立体相机的视差法恢复出来一个逆深度(即可以作为下一次极限搜索的先验值中的d):

通过这种方式求解出的d的误差方差为(即可以作为下一次极限搜索的先验值中的):

通过上述方式恢复出来的逆深度在每一个步骤都会出现一个误差:

1)在点匹配极线确定过程中产生的几何视差误差:主要是由于计算的位姿和投影方程过程中产生的误差造成的

2)在极线搜索过程中寻找最佳匹配点过程中产生的误差,即光度视差误差:主要是图像噪声导致图像灰度值的变化,这会导致最后在极线上找到的和关键帧上点的灰度值差异最小(SSD误差最小)的匹配点并不一定是真正的匹配点

3)在计算逆深度的过程中,由于前两种误差导致的点匹配位置误差导致最后解算出的逆深度值也会有误差,即逆深度计算误差

    注意:由于在本线程中最终的目的是要求取融合后的逆深度图,所以对三个误差的估计都是为了最后求取逆深度值服务的

几何视差误差:

    光度视差误差

逆深度计算误差:

    

逆深度观测值融合:在逆深度的计算误差确定之后,就可以进行深度的融合了,主要是通过当前帧匹配的像素为深度提供一个新的观测值,然后就可以把当前观测的深度融合到关键帧的深度地图中去。这里有两种情况:当对应像素点没有深度先验时则由新的观测值构建新的先验;当已经有先验值的话,则把新观测值融合到先验中去。在这个融合的过程,使用了两个高斯分布乘法的方式:对于给定先验以及有噪声的观测值(应该就是),给出后验估计:

    深度传播:深度图的传播发生在构建关键帧的时候。在构建新的关键帧时,使用其参考关键帧的深度图来构建当前帧的深度图。这里主要考虑构建新的深度图时,逆深度误差的传播。首先假设两帧间的旋转是很小的,当前帧的逆深度就可以近似为:

    d1的误差为:

3.全局图优化(Map Optimization)

    单目SLAM的绝对尺度无法观测,这里通过场景深度与跟踪精度之间的内在关联来解决这一问题:对每个创建的关键帧的深度图进行缩放,使得平均逆深度为同一值(1??)。由此可以获得帧间的sim(3)位姿,约束的误差方程为:

LSD学习笔记-整体框架及流程梳理_第4张图片

在新的关键帧加入地图之后,选择最近的10帧和外观相似性算法检测出的帧作为回环检测的候选帧,对每个候选帧独立追踪其和当前关键帧的位姿,计算相似度:

相似度足够小的话,将两者的回环约束加入全局地图中。

在建图(主要由关键帧和关键帧间的约束组成)完成后,就利用一组误差函数对地图进行持续更新:

   


你可能感兴趣的:(AI)