文章目录
建议学习顺序与本文行文顺序一致,从下图中可以看到,帧和关键帧会在多个线程调用,所也其重要性不言而喻
一、有关联的函数
下面提到的所有函数,都会在后续博客中详细讲到
1.拷贝构造函数
Frame(const Frame &frame);
2. 双目构造函数
Frame(const cv::Mat &imLeft, const cv::Mat &imRight, const double &timeStamp, ORBextractor* extractorLeft, ORBextractor* extractorRight, ORBVocabulary* voc, cv::Mat &K, cv::Mat &distCoef, const float &bf, const float &thDepth);
除去默认无参构造函数和拷贝构造函数,本文件中还重载了3个构造函数,分别用于双目、RGBD、单目,其中双目最复杂,学会双目其他两个基本上也就都学会了,所以这里建议直接从双目着手。下列中3、4、5、6、7都在此函数中调用到。
3. 特征提取函数Frame::ExtractORB
4. 调用去畸变函数UndistortKeyPoints();
这个函数调用了undistortPoints();函数,此函数是OpenCV的内置函数
5. 双目匹配计算深度的函数ComputeStereoMatches();
这个函数非常重要,代码量也很大,需要耐心的学习
6. 计算图像边界的函数ComputeImageBounds();
这个函数中也会引用undistortPoints();函数
7. 将特征点分配到网格中的函数AssignFeaturesToGrid();
这个函数中会用到PosInGrid();函数
二、其他函数
1. Frame::isInFrustum();
作用:判断地图点是否在视野中
调用位置:Tracking.cc中
2. Frame::GetFeaturesInArea();
作用:找到符合条件的特征点
调用位置:ORBmatchr.cc中
3. Frame::ComputeBoW();
作用:计算当前帧特征点对应的词代
调用位置:Tracking.cc中
4. Frame::UnprojectStereo();
作用:将符合条件的特征点反投影到三位世界坐标中
调用位置:Tracking.cc中
三、总结
本文中涵盖了Frame.cc中所有的函数, 这篇文章的目的是梳理此文件,让读者知道此文件的逻辑,并推荐一个合理的学习顺序,如有不合理或错误的地方欢迎指正交流。