ORB-SLAM: a Versatile and Accurate Monocular SLAM System阅读笔记(二)
地图初始化过程:
在单目slam系统中,无法根据一张图像就获取到深度信息,所以需要进行初始化过程。
对于过滤法(filtering),先使用一个逆深度参数来进行深度初始化,此时初始化的深度具有很大的不确定性,后续再收敛到其真实深度。
一般有两种方法来通过两张图像进行初始化,一种是假设初始化在一个平面上,计算单应矩阵(homography),另一种更通常的是计算本质矩阵(essential matrix,五点法,需要处理多重解问题),或者是计算基础矩阵(fundamental matrix,八点法,需要处理多重解的问题)。
在orb-slam中可以根据场景自动选择在平面场景中计算单应矩阵进行初始化或者是在非平面场景中计算基础举证进行初始化。
初始化过程:
- 提取当前帧的orb特征并于参考帧匹配。当匹配数量小于设定的最小值(文中为100)时,重置参考帧。
- 同时计算单应矩阵和基础矩阵并各自计算得分。计算单应矩阵使用直接线性法(DLT),计算基础矩阵使用八点法。使用ransac迭代并各自计算得分(SH是单应矩阵的得分,SF是基础矩阵的得分)。
- 模型选择。计算RH=SH/(SH+FH),若大于0.45,则选用单应矩阵模型,若小于0.45,则选用基础矩阵模型。反应的意思是若果场景是平面,近似平面或低视差情况,就选用单应矩阵模型(单应矩阵可以检测到低视差的情况并终止初始化),另一方面拥有充足视差的非平面场景则选用基础矩阵模型。
- 计算R,T。单应矩阵计算出8种(为什么不是4种?)可能的运动情况,通过基础矩阵计算本质矩阵后计算出4种可能的运动情况。通过三角测量计算出每种运动情况对应的地图点。选择地图点位于照相机前方的运动情况并计算重投影误差,选择误差最小的,如果不能选择出来,就重新初始化。
- 全局BA优化。
由于能力有限,以上笔记主要是记录备忘所用,如有不准确的地方,烦请指出,共同学习!