ORB-SLAM2 --- FrameDrawer::Update函数
目录
1.函数作用
将跟踪线程的数据拷贝到绘图线程(图像、特征点、地图、跟踪状态)
2.code
void FrameDrawer::Update(Tracking *pTracker) { unique_lock<mutex> lock(mMutex); //拷贝跟踪线程的图像 pTracker->mImGray.copyTo(mIm); //拷贝跟踪线程的特征点 mvCurrentKeys=pTracker->mCurrentFrame.mvKeys; N = mvCurrentKeys.size(); mvbVO = vector<bool>(N,false); mvbMap = vector<bool>(N,false); mbOnlyTracking = pTracker->mbOnlyTracking; //如果上一帧的时候,追踪器没有进行初始化 if(pTracker->mLastProcessedState==Tracking::NOT_INITIALIZED) { //那么就要获取初始化帧的特征点和匹配信息 mvIniKeys=pTracker->mInitialFrame.mvKeys; mvIniMatches=pTracker->mvIniMatches; } //如果上一帧是在正常跟踪 else if(pTracker->mLastProcessedState==Tracking::OK) { //获取当前帧地图点的信息 for(int i=0;i<N;i++) { MapPoint* pMP = pTracker->mCurrentFrame.mvpMapPoints[i]; if(pMP) { if(!pTracker->mCurrentFrame.mvbOutlier[i]) { //该mappoints可以被多帧观测到,则为有效的地图点 if(pMP->Observations()>0) mvbMap[i]=true; else //否则表示这个特征点是在当前帧中第一次提取得到的点 mvbVO[i]=true; } } } } //更新追踪线程的跟踪状态 mState=static_cast<int>(pTracker->mLastProcessedState); }
3.函数解析
先来看一下该函数的几个变量的解释,这样方便我们理解:
1.cv::Mat mIm; 当前绘制的图像
2.cv::Mat mImGray 调用该函数的图像
3.Tracking *pTracker 跟踪线程的指针
4.vector<cv::KeyPoint> mvCurrentKeys; 当前帧的特征点
5.vector<bool> mvbMap, mvbVO; 当前帧中的特征点是否在地图中的标记
;当前帧的特征点在地图中是否出现;后者是表示地图中没有出现,但是在当前帧中是第一次被观测得到的点6.mLastProcessedState 上一帧时的SLAM系统的状态
7.vector<cv::KeyPoint> mvIniKeys; 参考帧中的特征点
8.vector<int> mvIniMatches; 当前帧特征点和参考帧特征点的匹配关系
9.mState 当前帧的SLAM系统状态
10.Frame mInitialFrame 初始化过程中的参考帧
我们首先将追踪线程的调用帧的图像传给mIm,拷贝跟踪线程当前帧的特征点到mvCurrentKeys中。
如果上一帧中追踪器没有进行初始化,那么就要获取初始化帧的特征点和匹配信息。
(可能是几种情况:①是初始化第一帧②是初始化的第二帧且当前帧初始化成功③是初始化的第二帧且当前帧初始化失败④跟踪失败)
如果上一帧是在正常跟踪那么获取当前帧地图点的信息,判断当前地图点若可以被多帧观测到,则为有效的地图点,置它的mvbMap向量为true,否则这个特征点是在当前帧中第一次提取得到的点,置mvbVO为true,然后调用其他函数绘制地图点。
最后用上一帧的跟踪状态更新追踪线程的跟踪状态。
相关文章
- layer执行父窗口ajax方法,layer 弹出层 回调函数调用 弹出层页面 函数
- 【Linux 内核网络协议栈源码剖析】recvfrom 函数剖析
- date函数举例_初中数学基础知识整理
- 【说站】python函数的参数是什么
- strstr函数实现_popen函数
- MySQL【二】---数据库查询详细教程{查询、排序、聚合函数、分组}
- C++ lognormal_distribution对数分布随机数函数用法详解
- Oracle函数输出参数的使用方法(oracle函数输出参数)
- 一个判断email合法性的函数[非正则]
- asp.net字符串、二进制、编码数组转换函数
- js中格式化日期时间型数据函数代码
- 从零学jquery之如何使用回调函数
- Python之eval()函数危险性浅析