2021SC@SDUSC
4. SearchInNeighbors:局部地图点的融合
产生新地图点(MapPoint)后,需要检查之前的keyframe和当前的keyframe之间的相同的地图点,并且进行融合,而这一整个操作是在SearchInNeighbors()函数中进行的。具体解释如下:
首先是将当前的keyframe的相邻关键帧加入到vpTargetKFs中,然后进行二级搜索,也就是把当前keyframe相邻的关键帧的再相邻的关键帧也都找出来,加入到vpTargetKFs中
void LocalMapping::SearchInNeighbors()
{
//检索相邻关键帧
int nn = 10;
if(mbMonocular)
nn=20;
//获取当前关键帧与当前关键帧共视程度高的帧放入vpNeighKFs,并标记
const vector<KeyFrame*> vpNeighKFs = mpCurrentKeyFrame->GetBestCovisibilityKeyFrames(nn);
vector<KeyFrame*> vpTargetKFs;
//遍历vpNeighKFs,遍历当前帧essential graph图中权重排名前nn的邻接关键帧
for(vector<KeyFrame*>::const_iterator vit=vpNeighKFs.begin(), vend=vpNeighKFs.end(); vit!=vend; vit++)
{
KeyFrame* pKFi = *vit;
//如果这个keyframe是坏帧,或者已经被当前的关键帧标记则跳出循环进行pus