ORB SLAM中图像金字塔的构建

图像金字塔是同一幅图像在不同尺度下的集合,包括图像的上采样和下采样。opencv中使用pyrDown/pyrUp和resize都可以达到缩放图像的目的,区别是前者是先高斯模糊然后采样,后者通过插值的方法实现。resize可以将源图像精准的转化为指定尺寸的图像。在我们经常看到的SIFT特征提取中,构建高斯金字塔是它实现特征提取的基础,但是并不是所有的多尺度变换都要基于高斯模糊,比如orb slam中构建的普通图像金字塔。sift中使用高斯金字塔的原因是作者试图模仿人类的视觉系统,在由近及远观察一个物体时,总是先变模糊(高斯模糊),再变小(下采样),选择高斯模糊是因为高斯核是唯一的线性核,不会引入其他噪声。
ORB SLAM中图像金字塔的构建
SIFT特征提取时构建的高斯金字塔
ORB SLAM中图像金字塔的构建ORB SLAM中构建的图像金字塔

void ORBextractor::ComputePyramid_brief(cv::Mat image) {
   for (int level = 0; level < nlevels; ++level) {
        float scale = mvInvScaleFactor[level];
        Size sz(cvRound((float)image.cols*scale), cvRound((float)image.rows*scale));

        // Compute the resized image
        if (level != 0) {
            resize(mvImagePyramid[level-1], mvImagePyramid[level], sz, 0, 0, INTER_LINEAR);
       } else {
            mvImagePyramid[level] = image;
        }
    }
}