ORBSlam2学习研究-Tracking流程
来源:互联网 发布:excel2010数据验证 编辑:程序博客网 时间:2024/06/14 10:54
Tracking线程整体流程图
Tracking线程函数主要功能和流程
TrackWithMotionModel
按照运动模式来进行Track,按照上一帧的速度与位姿作为初始,进行投影优化
1. 先通过上一帧的位姿和速度预测当前帧相机的位姿2. 通过PnP方法估计相机位姿,在将上一帧的地图点投影到当前固定大小范围的帧平面上,如果匹配点少,那么扩大两倍的采点范围。3. 然后进行一次BA算法,通过最小二乘法优化相机的位姿。4. 优化位姿之后,对当前帧的关键点和地图点,抛弃无用的杂点,剩下的点供下一次操作使用。
TrackReferenceKeyFrame
按照关键帧来进行Track,从关键帧中查找Bow相近的帧,进行匹配优化位姿
1. 按照关键帧进行Track的方法和运动模式恢复相机运动位姿的方法接近。首先求解当前帧的BOW向量。2. 再搜索当前帧和关键帧之间的关键点匹配关系,如果这个匹配关系小于15对的话,就Track失败了。3. 接着讲当前帧的位置假定到上一帧的位置那里4. 并通过最小二乘法优化相机的位姿。5. 最后依然是抛弃无用的杂点,当match数大于等于10的时候,返回true成功。
Relocalization
重定位,从之前的关键帧中找出与当前帧之间拥有充足匹配点的候选帧,利用Ransac迭代,通过PnP求解位姿。
1. 先计算当前帧的BOW值,并从关键帧数据库中查找候选的匹配关键帧2. 构建PnP求解器,标记杂点,准备好每个关键帧和当前帧的匹配点集3. 用PnP算法求解位姿,进行若干次P4P Ransac迭代,并使用非线性最小二乘优化,直到发现一个有充足inliers支持的相机位置。4. 返回成功或失败
MonocularInitialization
单目相机的初始化过程,通过将最初的两帧之间进行对极约束和全局BA优化,得到较为准确的初始值
1. 当第一次进入该方法的时候,没有先前的帧数据,将当前帧保存为初始帧和最后一帧,并初始化一个初始化器。2. 第二次进入该方法的时候,已经有初始化器了。3. 利用ORB匹配器,对当前帧和初始帧进行匹配,对应关系小于100个时失败。4. 利用八点法的对极约束,启动两个线程分别计算单应矩阵和基础矩阵,并通过score判断用单应矩阵回复运动轨迹还是使用基础矩阵回复运动轨迹。5. 将初始帧和当前帧创建为关键帧,并创建地图点MapPoint6. 通过全局BundleAdjustment优化相机位姿和关键点坐标7. 设置单位深度并缩放初试基线和地图点。8. 其他变量的初始化。
TrackLocalMap
通过投影,从已经生成的地图点中找到更多的对应关系,精确结果
1. 更新Covisibility Graph, 更新局部关键帧2. 根据局部关键帧,更新局部地图点,接下来运行过滤函数 isInFrustum3. 将地图点投影到当前帧上,超出图像范围的舍弃4. 当前视线方向v和地图点云平均视线方向n, 舍弃n*v<cos(60)的点云5. 舍弃地图点到相机中心距离不在一定阈值内的点6. 计算图像的尺度因子 isInFrustum 函数结束7. 进行非线性最小二乘优化8. 更新地图点的统计量
NeedNewKeyFrame
判断是否需要生成新的关键帧,确定关键帧的标准
1. 在上一次进行重定位之后,过了20帧数据,或关键帧数小于20个,不满足不能生成2. 在上一个关键帧插入之后,过了20帧,或 局部建图是空闲状态,不满足不能生成。3. 当前帧跟踪到大于若干个点,不满足不能生成4. 当前帧的跟踪点数小于90%的参考关键帧跟踪点数,并且当前帧跟踪点数大于15,不满足不能生成
CreateNewKeyFrame
生成新的关键帧
阅读全文
1 0
- ORBSlam2学习研究-Tracking流程
- ORBSlam2学习研究(Code analysis)-ORBSlam2中的视觉里程计Tracking
- ORBSlam2学习研究(Code analysis)-ORBSlam2中的视觉里程计LocalMapping
- ORBSlam2学习研究(Code analysis)-ORBSlam2中的闭环检测和后端优化LoopClosing
- orbslam2学习笔记1
- 研究tracking的一些学者
- ORBSLAM2在Ubuntu14.04上详细配置流程
- Tracking
- Tracking
- ORBSLAM2 ROS
- Tracking算法学习之Compressive Tracking——Real-Time Compressive Tracking
- PWP(Visual Tracking Tracking using Pixel-Wise Posteriors)跟踪算法研究
- 一起研究ORB-SLAM(二)---Tracking线程
- Fenice vm流程研究
- QuteCom注册流程研究
- Struts2运行流程研究
- TLD tracking learning detection 学习资料
- Tracking Learning Detecting-TLD 学习笔记1
- 使用springmvc的MultipartFile实现单文件和多文件上传
- 接口与多态
- c语言中的#号和##号的作用
- zxing二维码生成
- C++排序问题
- ORBSlam2学习研究-Tracking流程
- 漫画算法:什么是 B+ 树?
- 自动化部署系统设计
- 数据库分库分表(sharding)系列—— 拆分实施策略和示例演示(2)
- iOS 点击按钮将文本复制到剪切板
- sass中转化为px转化为rem的使用
- oracle的FCB
- Shell系列—Shell 函数
- Windows字符集:string转为CString、char* 转为CString、CString转为char*