小秋SLAM入门实战

小秋SLAM入门实战

vector<vector<size_t> > vRowIndices(nRows,vector<size_t>());

for(int i=0; i<nRows; i++)
    vRowIndices[i].reserve(200);

const int Nr = mvKeysRight.size();

for(int iR=0; iR<Nr; iR++)
{
    const cv::KeyPoint &kp = mvKeysRight[iR];
    const float &kpY = kp.pt.y;
    const float r = 2.0f*mvScaleFactors[mvKeysRight[iR].octave];
    const int maxr = ceil(kpY+r);
    const int minr = floor(kpY-r);

    for(int yi=minr;yi<=maxr;yi++)
        vRowIndices[yi].push_back(iR);
}

这段代码的目标是将右图像中的关键点(即特征点)按其在y方向(垂直方向)上的位置进行排序并存储。其主要步骤如下:

  1. 首先,它创建了一个二维向量vRowIndices,用于存储每行的索引。这个向量的每个元素都被预留了一定的空间,以避免在添加新索引时重新分配内存。

  2. 接着,对于右图像中的每个关键点,它计算了关键点所在的y方向的位置和半径(以像素为单位)。这个半径是由关键点所在的图像金字塔层级决定的。

  3. 然后,它计算了在y方向上可能包含这个关键点的所有行的范围

05-25 12:16