目前ORB-SLAM3
支持4种相机传感器,同时又根据是否与IMU融合分为纯视觉Frame
对象的构造以及VI模式的Frame
对象构造
对于每种传感器,visual和vi模式的Frame
构造共用一个函数
可以在Frame.h
中看到共有3中构造函数,对应单目,双目和RGB-D相机,其中双目相机和双单目相机又共用一个构造函数
在Frame构造过程中,主要完成以下几件事:
在Tracking.cc->ParseORBParamFile
函数中可以看到,ORB-SLAM3为单目的初始化额外创建了一个ORB特征提取器mpIniORBextractor
,和正常模式下的特征提取器相比,区别在与所提取的特征点数量是正常模式下的5倍
,目的就是为了保证较为稳定的初始化结果。
详情戳:ORB-SLAM3算法学习—Frame构造—ORB特征提取和BRIEF描述子计算
UndistortKeyPoints()
这里的去畸变是根据配置文件中的畸变系数来的,对于已经矫正好的图像配置文件中畸变系数均为0,函数直接返回。
对于双目相机,比如zed
、微软的D435i
会有remap
处理,同样不需要对特征点去畸变处理
ORB-SLAM3中去畸变调用的是cv中的函数cv::undistortPoints
对于双目相机,作者并没有直接使用相机输出的深度信息,而是基于一种带状搜索的方法,根据左目图像特征点的坐标在右目图像上寻找对应特征点,经过SAD搜索和抛物线拟合获得左目特征点在右目上对应的亚像素级别的坐标,最终计算对应的深度信息。
将图像划分为若干个网格,记录每个网格中特征点的信息,目的主要是用于特征匹配搜索。