[知识点学习] ORB-SLAM2是如何进行回环检测的?

词袋模型

BOW就是将场景中所有的特征(桌子,椅子,书本等等特征)存放在一个”袋子“中。这些特征是聚类得到的,使用对于提取的所有图像的orb描述子看作是初始特征,对这些特征左Kmeans聚类,得道k类特征,然后在对这k类分别进行Kmeans聚类,然后迭代的perform这个聚类操作得到k的n次方个特征,也构建出一个k叉树,用于后续回环检测的特征查询。
根据查询到的特征每个图片都会有一个向量,比如特征是桌子,椅子和苹果,然后图片1有一个苹果,没有桌子和椅子,那它的向量就是0,0,1.
把上面这个向量称作词向量。

图像检索

首先,检查当前帧和它的共视关键帧之间的词向量相似度,把其中的最小值作为后续筛选回环候选帧的阈值。

第二,根据当前帧中所有的词特征去字典中查找哪些过去的关键帧有这些特征,然后统计当前帧与所选出来的关键帧之间相似词汇的数量,最大的数量记为M,在这些关键帧中所有大于0.8M的关键帧作为初代回环候选帧。(当然这个过程中需要排除当前帧的共视帧)

第三,用初代回环候选帧与当前帧做词向量相似度计算,高于第一步的阈值的被选为第二代回环候选帧。

第四,然后对于所有第二代回环候选帧,取他们的共视关键帧与当前帧计算匹配分数和(为什么是“和”?因为共视帧肯定不只一个。),取这些“和”的最大值为L,然后把第二代回环候选帧中“和”大于0.75L的作为第三代回环候选帧。

最后一步,在ORB-SLAM2中叫做一致性检测:一致性检测其实是利用几何关系的一致性。根据上一步得到的第三代回环候选帧,我们遍历这些候选帧,遍历的时候,对于当前候选帧,我让其与当前帧进行几何一致性的判断(我们计算它与当前帧之间的Sim(3)变换(尺度、旋转和平移),并将此变换应用于当前帧的地图点。然后,我们计算变换后的地图点与候选帧地图点之间的匹配程度。如果有足够多的地图点匹配且它们的空间分布满足一定的几何约束,我们认为这个回环候选帧是一致的。)如果通过一致性判断,就是检测到回环,然后把该候选帧及其所有关联帧放到一个group里,并对对当前帧打分加1.
然后再进来一个回环候选帧的时候,一样的进行几何一致性判断,如果检测到回环,则把当前候选帧与之前那个group中的帧进行比较,只要有一样的帧,就给当前帧打分加1。
直到遍历完所有的候选帧,如果当前帧的打分等于3,那么就是ok的回环。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值