SLAM9-回环检测

回环检测的意义
1.给后端的Pose Graph提供更多有效的数据(即走到同一个位置附近了),否则后端优化可能把前端的误差累积起来,出现漂移问题。

2.跟踪算法如果跟丢了,利用回环检测进行重定位。
回环检测的实现方式
1.朴素思路:(1)暴力匹配,任意两幅图像做一遍特征匹配,并根据数量确定两幅相关联的图像。问题:时间复杂度太大,不实用。(2)随机抽取历史数据进行回环检测。问题:抽到回环几率下降。检测率不高。

2.不盲目的预测:

(1)基于里程计的几何关系:发现相机到达之前的某个位置附近,进行回环检测。存在问题:由于累积误差存在,往往没办法正确发现“运动到了某个位置附近”。

(2)基于外观的方式:主流方式。(本文讲的也是这个方式)

必要基础知识
在这里插入图片描述
准确率:算法的“是回环”的结果里,有多少个真的是回环。(针对结果)
召回率:事实的真的回环中,被算法检测到“是回环”了。(针对真实样本)
slam中对准确率要求更高,因为如果实际不是回环,算法却判断为回环(即假阳性)会在后端Pose Graph中添加根本错误的边,严重影响算法结果。而召回率低一些关系不大,因为只是检测到真的回环数量降低了一点,后端的优化有点漂移和累积误差而已。
词袋模型
1.一个图片上是否有某些物体(单词)。例如基是【狗,猫,猪】,记录向量就是[1 0 1]

2.可以记录词出现的次数,也可以只记录词是否出现(这样的向量是二值向量)

3.两个向量的相似性,可以由如下方式定义(定义方式不唯一):L1范数是向量绝对值之和
在这里插入图片描述
字典
词袋模型中(BoW)表现了词是否出现或是出现的情况。为了确定有哪些词可以使用,我们要创建字典。

字典的生成方式:聚类,把图片上的特征点按照某种方式分成不同的集合类,作为一个单词。

可以用的方式:K-means聚类。
在这里插入图片描述
字典的数据结构:k叉树(叶子层是单词,中间节点的作用是方便查找)
在这里插入图片描述
回到回环检测如何判断两幅图像的相似性
1.提取图像特征初步作为字典中的单词,构建初步字典。
2.加入特征的权重。权重生成方式:TF-IDF:

假设单幅图像A中单词wi出现了ni次,一共出现的单词数为n次,换句话说就是有ni个特征点同属这个单词。
TF:某个特征在单幅图像中出现的频率
在这里插入图片描述

IDF整体的字典中,共有n个特征点,其中单词wi里面含有的特征点

在这里插入图片描述

注意IDF是离线算出来的,也就是说所有的图像都已经有了,提取特征点聚类了。而TF是在线算出来的,来一张算一张。

这样单词的权重就可以通过TF和IDF乘积计算出来。
3.对图像提取特征点,找到字典里的单词,并且形成一个向量
特征点是如何找到对应的字典里的单词的:通过逆序指针/索引
每个单词(也就是一小部分特征点的集合)指向这么一个数据结构(inverse index word):一个是图像号,一个是权重。
每次有新的图像来了,就把数据结构进行更新。比如Image68检测到1号单词,那么就把1号叶子节点指针指向的列表中多加一个Image A,表示A中曾经出现过这个单词。然后把1单词在A图中对应的权重记录下来。
在这里插入图片描述
每一副图像,都由向量v表示,即一堆(wi,ni)组成。wi是检测到的单词,ni是上面算出的TF和IDF的乘积(所以每个单词在不同图像中对应的TF是不一样的,而单词自身的IDF是一样的)
4.计算向量直接的差异,得到相似度评分
在这里插入图片描述
相似度评价
分值高但并不一定代表回环,后者向量的差异很大,分值低却可能代表回环。因此我们还要取先验相似度(关键帧图像与上一时刻关键帧图像的相似性),做归一化处理:最终的相似度是左边,右边是(当前帧与之前某关键帧的相似度)/(当前帧与上一个关键帧的相似度)的比值,如果比值大于3就可能存在回环
在这里插入图片描述
关键帧:用于回环检测的帧。可以取的稀疏一些,彼此不同但涵盖整个环境。在后端优化中,主要优化的也是关键帧。

由于词袋的检测,只关注有没有单词,并没有考虑集合关系以及单词顺序,所以还要在检测之后,进行一步验证:
1.时间上的一致性检测:一段时间内的图片一直检测为回环才当做是回环(n,n+1,n+2……帧都和关键帧像,才当做是回环)

2.空间上的一致性检测:把回环上的两帧进行特征匹配,估计相机运动。把运动放到Pose Graph中,检查与之前估计的位姿是否有很大出入。

回环检测并不是用来百分百确定我走到了哪个位姿上,而是通过回环检测判断我是否走到了之前走过的位置附近,也就是说两张图像可以是不完全相似的。回环检测到的目的,是为了给后端优化一个参考,或者是跟丢以后,重新把之前的位姿续上。

而广义上的“重定位”,应该是指我给出一张图像,虽然我没有完全精准的走到那个位置,但是我可以根据这个图像算出此时相机所在的位置。这应该就是回环检测和重定位的区别。

代码1:根据图片创建字典
https://blog.csdn.net/Summer_star_summer/article/details/107480640
代码2:根据创建的字典比较图片之间的相似度
https://blog.csdn.net/Summer_star_summer/article/details/107480881
代码3:之前根据10张图片创建的字典太小,大规模创建字典
https://blog.csdn.net/Summer_star_summer/article/details/107481580

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值