2、ORB-SLAM闭环检测之次终局之战——最终的闭环候选帧


上次我们已经通过层层选拔,选出了一部分闭环候选关键帧,也知道了层层选拔的必要性,今天我们一起来看看,最后一轮选拔,闭环候选关键帧终于冲出重围,拨云见日现真颜了!

1、上次选拔简单回顾

①检查一下闭环关键帧队列里是否为空,一般不为空;
②统计与闭环检测帧有连接关系的关键帧(共视关键帧),并计算出闭环检测帧与每个共视关键的bow相似度得分,并得到最低得分minScore;
③计算与当前关键帧存在最低相似度得分的闭环候选关键帧,且不是当前关键帧的共视关键帧;
④计算上面所有闭环候选关键帧的公共单词数,以这个单词数的0.8倍,进一步滤除掉一些关键帧。然后将剩下的每个闭环候选关键帧和其共视帧,且必须是闭环候选帧的所有关键帧作为一个组,计算每个组的相似度得分,然后取最高相似组的得分*0.75作为阈值滤掉一些组;
⑤只取剩下的每个闭环候选关键帧组里面相似度得分最高的那一个关键帧作为最终的闭环候选帧。

2、最后一轮选拔指标——连续性检测

何为连续性?就是要求连续闭环,也就是说最后选出来的闭环候选关键帧中是有连续相似性的。靠的就是共视图
目标:在前面选出的闭环候选关键帧中检测具有连续性的闭环候选关键帧
1、每个闭环候选关键帧将与自己相连的关键帧构成一个“子候选组spCandidateGroup”, vpCandidateKFs–>spCandidateGroup
2、检测“子候选组”中每一个关键帧是否存在于“连续组”,如果存在 nCurrentConsistency++,则将该“子候选组”放入“当前连续组vCurrentConsistentGroups”
3、如果nCurrentConsistency大于等于3,那么该“子候选组”代表的候选关键帧过关,进入mvpEnoughConsistentCandidates

2.1 这一阶段相关概念

组(group): 对于某个关键帧, 其和其具有共视关系的关键帧组成了一个"组";
子候选组(CandidateGroup): 对于某个候选的回环关键帧, 其和其具有共视关系的关键帧组成的一个"组";
连续(Consistent): 不同的组之间如果共同拥有一个及以上的关键帧,那么称这两个组之间具有连续关系
连续组(Consistent group): mvConsistentGroups存储了上次执行回环检测时, 新的被检测出来的具有连续性的多个组的集合.由于组之间的连续关系是个网状结构,因此可能存在一个组因为和不同的连续组链都具有连续关系,而被添加两次的情况(当然连续性度量是不相同的)
子连续组: 上面的连续组中的一个组
连续组的初始值: 在遍历某个候选帧的过程中,如果该子候选组没有能够和任何一个上次的子连续组产生连续关系,那么就将添加自己组为连续组,并且连续性为0(相当于新开了一个连续链)
连续组的更新: 当前次回环检测过程中,所有被检测到和之前的连续组链有连续的关系的组,都将在对应的连续组链后面+1,这些子候选组(可能有重复,见上)都将会成为新的连续组; 换言之连续组mvConsistentGroups中只保存连续组链中末尾的组

2.2 连续性检测原理介绍

闭环性检测的整个过程,我做了一张图,然后对照着图与代码结合更容易理解。
在这里插入图片描述

整个过程的代码如下:

 	mvpEnoughConsistentCandidates.clear();//清空最终筛选后得到的闭环关键帧

    vector<ConsistentGroup> vCurrentConsistentGroups;//定义 当前连续组(当前子候选组若连接成功,则放入当前连续组)

    // 这个下标是每个"子连续组"的下标,bool表示当前的候选组中是否有和该组相同的一个关键帧
    vector<bool> vbConsistentGroup(mvConsistentGroups.size(),false);//记录子候选组和子连续组是否连续的标记,默认为false,没有相同的关键帧

    // 遍历刚才得到的每一个候选关键帧
    for(size_t i=0, iend=vpCandidateKFs.
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宛如新生

转发即鼓励,打赏价更高!哈哈。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值