
1. 什么是回环检测
前面有说过累积误差的问题,前一时刻的误差会积累到后面,导致画不成圈圈,如图12-1所示,而画圈圈(全局一致性)很重要,所以需要有一个步骤来纠正当前的计算偏差。

回环检测通过判断相机是否经过同一个地方来进行纠正的,本讲介绍的方法是基于外观的,拿到两张图像后,比较两张图像的相似度,越高说明越有可能是同一个地方。在评价时更注重算法的准确率。
2.相似度计算
在计算相似度之前需要定义一个能够用来描述图像的量,这个量可以表达图像的特征或者属性,我们可以通过这个量来计算图像的相似度。在本节中采用词袋模型。
词袋模型是用向量来描述图像,比如用向量[0,1,1,0,1]来表达图像a,其中第i个元素表示图像是否拥有特征i,向量的维度也就是总的特征数量由“字典”决定(也可以看成每个特征是字典中的一个单词,字典从a到z有3000个单词,那么向量就有3000维,如果某个图像只具有100个特征,那么除了这100个元素以外,该图像其他位置的元素值都是0)。
字典生成:前面学习了提取ORB特征来描述图像,在生成字典时,通常会选用一个比较大的图像数据集,用ORB特征描述每一幅图像,然后使用聚类算法,聚成N类,生成N维的ORB字典。
当字典很大时,O(n)的查找效率会很影响使用,为了提升查找效率可以使用k叉树结构表达字典。先聚成k类,作为k个根结点,在根结点上再对属于当前根结点的所有图像聚成k类,作为第二层,依次向下,最后得到的叶子节点就是词袋模型中的每个特征(也可以说是字典中的每个单词)。
相似度计算,最简单的方法是使用TF-IDF模型,TF计算的是特征i在图像A中出现的频率(也就是单词i,在句子中出现的频率),
IDF是指某个特征在整个字典中出现的频率越低,则这个特征的区分度越高(比如一组100张的人脸图片,提取出来的特征有眼睛、鼻子、嘴巴、苹果,那么对于这100张图片来说几乎每张都有眼睛、鼻子、嘴巴的特征,这些特征出现频率很高,不能够对于这组图片进行很好的区分。然而可能只有20张图片中有苹果,所以苹果这个特征能够很好的将这20张图片区分出来)
假设当前字典中有N个单词,根据词袋模型,图片A就要用N维向量表示,每一维的元素值,是这一维特征的TFIDF值,
3. 后续处理
两张图片的相似度数值,并不能直接说明是否同一场景,会存在同一个环境下每个地方都不一样的情况。在实际比较时取先验相似度
参考文献
[1] 《视觉SLAM十四讲从理论到实践》 高翔,张涛