「ORB_SLAM2源码解读」之函数MapPoint::AddObservation()

for(int i=0; i<mCurrentFrame.N; i++){// 清除观测不到的地图点 Clean VO matches
   MapPoint* pMP = mCurrentFrame.mvpMapPoints[i];
       if(pMP)
           if(pMP->Observations()<1){
               mCurrentFrame.mvbOutlier[i] = false;
               mCurrentFrame.mvpMapPoints[i]=static_cast<MapPoint*>(NULL);
   }
}



// 被观测到的相机数目,单目+1,双目或RGB-D则+2
int MapPoint::Observations(){
    unique_lock<mutex> lock(mMutexFeatures);
    return nObs;
}

// 给地图点添加观测 记录哪些KeyFrame的那个特征点能观测到该地图点,并增加观测的相机数目nObs,单目+1,双目或者rgbd+2,这个函数是建立关键帧共视关系的核心函数,能共同观测到某些地图点的关键帧是共视关键帧
void MapPoint::AddObservation(KeyFrame* pKF, size_t idx){
    unique_lock<mutex> lock(mMutexFeatures);
    if(mObservations.count(pKF))// mObservations:观测到该MapPoint的关键帧KF和该MapPoint在KF中的索引如果已经添加过观测返回,Map是一种关联容器,它按照特定顺序存储由键值Key和映射值Value组合而成的元素。使用count返回的是被查找元素的个数。如果有,返回1;否则,返回0。注意,map中不存在相同元素,所以返回值只能是1或0。使用find,返回的是被查找元素的位置,没有则返回map.end()。Map通常是基于二叉搜索树实现的。
        return;
    mObservations[pKF]=idx;// 如果没有添加过观测,记录下能观测到该MapPoint的KF和该MapPoint在KF中的索引
    if(pKF->mvuRight[idx]>=0)
        nObs+=2;// 双目或者rgbd
    else
        nObs++;// 单目
}


std::map<KeyFrame*,size_t> mObservations;// Keyframes observing the point and associated index in keyframe 观测到该MapPoint的KF和该MapPoint在KF中的索引

nObs 等待完成
相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付 99.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值