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方向(垂直方向)上的位置进行排序并存储。其主要步骤如下:
-
首先,它创建了一个二维向量
vRowIndices
,用于存储每行的索引。这个向量的每个元素都被预留了一定的空间,以避免在添加新索引时重新分配内存。 -
接着,对于右图像中的每个关键点,它计算了关键点所在的y方向的位置和半径(以像素为单位)。这个半径是由关键点所在的图像金字塔层级决定的。
-
然后,它计算了在y方向上可能包含这个关键点的所有行的范围