「ORB_SLAM2源码解读」
程序员文章站
2024-03-24 23:44:46
...
「ORB_SLAM2源码解读」Frame.cc的mCurrentFrame
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中的索引
上一篇: 修改设备默认蓝牙名称
下一篇: 读方法缓存区
推荐阅读
-
ORB_SLAM2 源码阅读 ORB_SLAM2::Initializer::ComputeF21 (OpenCV 细节)
-
ORB_SLAM2 源码阅读 ORB_SLAM2::ORBextractor
-
「ORB_SLAM2源码解读」之函数ORBmatcher::SearchForInitialization()
-
ORB_SLAM2源码小记0
-
「ORB_SLAM2源码解读」
-
ORB_SLAM2 学习笔记(1)——总框架
-
yii2.0框架的错误和异常处理机制 --- 源码解读
-
如何单独编译安卓系统源码指定模块 博客分类: android系统学习
-
Python ---- 多线程的详细解读
-
Android 进阶5:Glide4.0源码分析