这个假期为了完成毕设,一直在研究回环检测的算法,之前一直在研究ORBSLAM2,希望从中寻找到一部分回环检测算法的研究思路。但事实上并不尽如人意,其回环检测虽然严谨,但实在太过于复杂,不仅运用常见的词袋模型,还运用了其他一些共视点(MapPoint)等等这些内容。于是我重新在网络上进行了搜索,试图寻找基于词袋模型的回环检测算法,于是乎,找到了DBoW2的作者Galvez-López D写的一篇论文 Bags of Binary Words for Fast Place Recognition in Image Sequences , 这篇文章介绍了关于利用词袋模型进行回环检测的很多思路。尤其是利用归一化得分进行计算,解决了我一直以来对于大批量图片如何进行相似度匹配的疑惑。
除此之外,我还阅读了 Bags of Binary Words for Fast Place Recognition in Image Sequences------阅读笔记 和 基于词袋模型DBoW2的回环检测实现DLoopDetector (c++) 的两篇博客文章,都让我对整体回环检测的代码有了很多的理解。于是,我下载并编译了一下DLoopDetector,但事实上随着深入的研究我发现DLoopDetector提供的demo并不是我原来想象当中的利用ORB算子进行特征提取,而是利用BRIEF算子进行的一次提取,而且这当中的BRIEF与ORB中的BRIEF描述子又存在很大很大的差别,一个是使用vector进行存储,而另一个则是使用cv::Mat数据类型进行存储,也就是说如果想单纯的只改特征提取部分是不可能也不现实的,于是,我从头到尾把DLoopDetector的源代码重新读了一遍,并编写了注释,以便日后查看。(如果各位不想花太多时间在理解代码上面,可以扫描文章后面的赞赏码对我进行微信打赏,并添加我的微信号,我将把源码注释分享给您)
这里我也忍不住想吐槽一下关于DLoopDetector的作者,他应该也发现了cv::Mat往vector转换的一些问题,但他并没有在原始的DBoW2