PTAM SLAM

特征匹配差异

PTAM patch 匹配和 ORB 描述子匹配

ORB-SLAM 用 ORB 特征匹配计算位姿,回环检测和重定位都用 ORB 特征;PTAM 没有用特征,和 SVO 一样,用的是 patch(8x8 方块),PTAM 在地图点和当前帧 patch 匹配的时候,由于地图点所在的帧和当前帧间距或者旋转可能较大,当前帧的 patch 相对于地图点的可能形变较大(尺度,旋转,拉伸),所以地图点的 patch 在当前帧寻找匹配的 patch 时,先计算一个 affine warp matrix 变换,将地图点的 patch 变换到和当前帧的相似,再在当前帧中用 SSD 算法找匹配的 patch。

4x4 affine warp matrix 计算表达式: 

A=ucusvcusucvsvcvs

上式中  {us,vs}  是 source pyramid level 像素位移(地图点所在关键帧在对应层的像素位移), {uc,vc}  是 source pyramid level 中有位移  {us,vs}  时在当前帧最底层产生的像素位移。

affine warp matrix 具体计算方式如下: 
在地图点所在关键帧对应层上,产生一个像素的位移(横纵坐标分开做),并且将这个像素位移(对应到最底层位移不止一个像素)投影到地图点所在的 patch 平面上(patch 在三维空间的坐标和法向量可以确定 patch 在 3D 空间的平面),再将这个 3D 空间中的位移线段投影到当前帧中,计算在当前帧在横纵坐标上产生的像素位移。

矩阵  A  的行列式决定 patch 在当前帧的哪一层上做搜索,矩阵行列式还决定了搜索的面积, det(A)/4  是在第一层搜索的面积, det(A)/4l  是在第  l  层搜索的面积,使得  det(A)/4l  接近 1 的层  l  是搜索 patch 的层。

在进行搜索前先用矩阵  A/2l  对 source 的 patch 做变换,做完变换后再通过插值得到待搜索的 patch,因为计算  A  时 source patch 是在 source pyramid level 和当前帧第一层金字塔对比的,所以 A 在对 source patch 做变换时还需要除以  2l ,这样得到的 warp 后的 patch 才可以在使  det(A)/4l  接近 1 的层上搜索。 det(A)/4l  中的 4 指面积,层间的面积比是 4, det(A)/2l  是计算坐标,层间的横纵坐标比是 2。

而对于 ORB-SLAM 中的特征匹配,特征描述子对于旋转具备不变性(其他特征可能还具备平移,相似或者仿射不变性),不需要对 patch 进行 SSD 匹配,只需要计算特征描述子间距离就可以了。

ORB-SLAM 特征提取很耗时。

匹配流程差异

ORB-SLAM 先和上一帧配准,再跟当前帧所在的局部地图配准计算位姿: 
http://blog.csdn.net/fuxingyin/article/details/53511439

PTAM 通过两步和局部地图配准计算位姿,第一步和少量的层数最高的地图点配准计算位姿,然后再和大量的地图点配准计算位姿。

ORB-SLAM 中的 convisibility graph

ORB-SLAM 中的 convisibility graph 保存了关键帧之间的连接,通过 convisibility 可以得到局部地图,在和局部地图匹配和初始化新的地图点时都用到 convisibility graph,PTAM 没有 convisibility graph。

ORB-SLAM 中的 Essential Graph /Pose graph

ORB-SLAM 中通过 convisibility graph 计算得到 Essential Graph /Pose graph,在检测到回环时,先优化 essential graph 再进行全局的 BA,essential graph 在 PTAM 中也是没有的。

回环检测和回环优化

PTAM 中没有回环检测,只有 local BA,PTAM 是为小场景 AR 设计的,没考虑全局的回环。ORB-SLAM 有回环检测,也有 locaL BA。ORB-SLAM 只有 tracking 和 mapping 两个线程,ORB-SLAM 有 tracking,mapping 和 loop closing 三个线程。

重定位算法

PTAM 中的重定位算法和 Elasticfusion 中的重定位算法很像: 
http://blog.csdn.net/fuxingyin/article/details/51436430 
ORB-SLAM 基于 DBoW2 做重定位,个人感觉基于 Fern 的重定位算法实现起来简单,方便调试,召回率相对于 DBoW2 高,准确率低。

参考文献: 
“Parallel Tracking and Mapping for Small AR Workspaces” 
“ORB-SLAM: a Versatile and Accurate Monocular SLAM System”

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
python实现SLAM的方式有多种,以下是其中的几种常见方法: 1. Stereo-PTAM和RGBD-PTAM:这是一个基于python实现的完整SLAM系统,包含了多线程跟踪和建图、covisibility graph、local bundle adjustment、位姿图优化、回环检测、点云可视化等模块。它在多个数据集上跑过,效果和速度都不错。你可以在以下链接找到具体实现:[https://github.com/uoip/stereo_ptam](https://github.com/uoip/stereo_ptam) 和 [https://github.com/uoip/rgbd_ptam](https://github.com/uoip/rgbd_ptam)。 2. ORB-SLAM:这是一个基于稀疏特征点的单目SLAM系统,同时支持单目、双目和RGBD相机。它的核心是使用ORB特征(Orinted FAST and BRIEF)作为整个视觉SLAM的核心特征。ORB-SLAM基本上延续了PTAM的算法框架,但对框架中的大部分组件进行了改进,如特征匹配和重定位,循环回路检测和闭合机制等。ORB-SLAM的实现可以在以下链接找到更多信息:[https://github.com/raulmur/ORB_SLAM](https://github.com/raulmur/ORB_SLAM)。 3. Visual Odometry:这是一个基于视觉里程计的SLAM方法,可以实现相机的运动估计和地图构建。你可以在以下链接找到一个基于python实现的Visual Odometry系统示例:[https://github.com/Transportation-Inspection/visual_odometry](https://github.com/Transportation-Inspection/visual_odometry)。 请注意,以上只是其中几种常见的python实现SLAM的方法,还有其他的方法和库可以用于SLAM的实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值