ORB-SLAM2,其实有很多大牛已将代码分析的很彻底了,在此写下博客以加深印象,会将自己收集的资料尽量集中在这里
本文主要讲ORBextractor中的ComputePyramid()部分,在获取目标图像后计算图像金字塔(nlevels张不同分辨率的图片),为FAST关键点在各层上的计算提供支持。本文涉及到的一些尺度参数参见ORBextractor()构造函数进行的参数计算部分。
//计算图像金字塔,按一定的尺度比例获取nlevels张分辨率不同的图像
void ORBextractor::ComputePyramid(cv::Mat image)
{
/**
//在同一个图像金字塔中,两个参数只是图像相邻层比较时上下或者下上的区别
std::vector<float> mvScaleFactor; //是用来存储金字塔中每层图像对应的尺度因子的vector变量
std::vector<float> mvInvScaleFactor; //可以理解为逆向尺度
**/
for (int level = 0; level < nlevels; ++level)
{
float scale = mvInvScaleFactor[level];
//原图像的尺寸
Size sz(cvRound((float)image.cols*scale), cvRound((float)image.rows*scale));
//相当于给原图像加边,在计算关键点时便不需要检测所加边缘,又能保证原图像边缘的关键点也能检测
Size wholeSize(sz.width + EDGE_THRESHOLD*2, sz.height + EDGE_THRESHOLD*2);