ORB-SLAM2代码笔记(五):MapPoint

2019-07-23  本文已影响0人  liampayne_66d0

MapPoint

主要的成员变量

用于跟踪的变量

成员函数:
// 参考帧是关键帧,该地图点将于许多帧关键帧对应,建立关键帧之间的共视关系
MapPoint::MapPoint(const cv::Mat &Pos, KeyFrame *pRefKF, Map* pMap)
// 参考帧是普通帧,该地图点只与当前普通帧的特征点对应
MapPoint::MapPoint(const cv::Mat &Pos, Map* pMap, Frame* pFrame, const int &idxF)
            if(mpRefKF==pKF)
                mpRefKF=mObservations.begin()->first;

当观测到该点的相机数目少于2时,丢弃该点:SetBadFlag()

mbBad=true;

关键帧将联系的this替换成pMap:

pKF->ReplaceMapPointMatch(mit->second, pMP);// KeyFrame中mit->second索引对应的地图点,用pMP替换掉原来的this
pMP->AddObservation(pKF,mit->second);// pMp地图点添加观测关键帧

在进行投影匹配的时候会给定特征点的搜索范围,考虑到处于不同尺度(也就是距离相机远近,位于图像金字塔中不同图层)的特征点受到相机旋转的影响不同,
因此会希望距离相机近的点的搜索范围更大一点,距离相机更远的点的搜索范围更小一点,所以要在这里,根据点到关键帧/帧的距离来估计它在当前的关键帧/帧中,
会大概处于哪个尺度

 float ratio;
    {
        unique_lock<mutex> lock(mMutexPos);
        ratio = mfMaxDistance/currentDist;
    }

    // 同时取log线性化
    int nScale = ceil(log(ratio)/pKF->mfLogScaleFactor);
    if(nScale<0)
        nScale = 0;
    else if(nScale>=pKF->mnScaleLevels)
        nScale = pKF->mnScaleLevels-1;

    return nScale;
上一篇下一篇

猜你喜欢

热点阅读