ORBSLAM2学习(六):DLoopDetector理论知识学习

0 前言

       DLoopDetector是DBoW2作者的另一个开源项目,github地址为https://github.com/dorian3d/DLoopDetector。它对应的学术论文也是《Bags of Binary Words for Fast Place Recognition in Image Sequences》。像之前的博文(链接)说的,该论文中包含两部分内容:基于BRIEF描述子建立vocabulary tree,和利用vocabulary tree和一些校验方法进行回环检测,DLoopDetector对应的就是后半部分。

       看一下作者的项目介绍:DLoopDetector用于对移动机器人采集的图像序列做回环检测,它基于提取特征创建的bag-of-words和database,和局部连续性以及几何条件的约束。DLoopDetector中会用到DBoW2库,也需要OpenCV和boost::dynamic_bitset(用于表示BRIEF特征描述子)的支持。

1 工程下载与编译

       先下载工程,之后需要下载demo运行需要的测试集文件resources.tar.gz(原地址为https://drive.google.com/uc?export=download&id=1MpZwPjXDAUxKfSTpeCjG0PAUpaeWuo7D,如果下载不了可以到这里下载)后进入工程所在目录,依次执行

        mkdir build
        cd build

        cp 文件所在目录/resources.tar.gz .

        cmake ../
        make

       编译过程中会下载DBoW2和DLib,在build目录下会生成demo_brief可执行文件。执行后运行画面如下,“Trajectory”窗口中红色线段表示程序检测到了回环。


2 算法原理

       首先把参考论文捋一捋,了解作者的开发思想。着重看论文的第五部分V. LOOP DETECTION ALGORITHM。首先,利用DBoW2我们已经可以计算图像的相似度了,相似度高的图像将作为回环检测的备选图像。不过由于perceptual aliasing,需要对备选图像做进一步的验证,具体步骤如下。

1)Database query

   利用建立的vocabulary tree和database,得到与输入图像相似度评分较高的备选图像集,使用表示。其中vt代表输入图像,计算得到它们的相似度评分s(vt, vtj)。之后作者考虑到不同环境下相似度评分尺度不一致的问题(有的场景变化很大,实际物理位置很接近的图像之间相似度评分也不高;有的场景反之),对评分做了归一化处理,公式如下:


       公式中分母表示输入图像和它的上一帧图像间的相似度评分。作者提到一些情况下分母会比价小(譬如发生旋转时)导致评分偏高,因此对分母有一个大小的约束。之后对得到的归一化评分也做了大小约束,大于限定值alpha的图像进入之后的处理。

2)Match grouping

        一般情况下若图像A和B出现回环的情况,则A和B附近的图像也倾向于判定为回环,不过这样的判定意义不大且浪费了计算时间。作者提出把这些时间上相近的图像划分为一个island,把输入图像和一个island看做一次匹配。因此时间上相近的多次匹配就变为了一次匹配,记为,且匹配得分计算为


       从得到的几个islands中选出得分最高的那一组进入后面的操作。

3)Temporal consistency

       作者认为,如果图像A与B出现回环,则A附近的图像应该在B附近也会出现回环的情况。因此定义了如下的局部连续性约束:对于匹配,它需要存在k个时间上连续的匹配。满足该条件的匹配中,选取评分最高的图像进入后面的操作。

4)Efficient geometrical consistency

       对于输入图像A和备选图像B,作者通过RANSAC方法(可参考链接)计算它们之间的基本矩阵F,其中会用到前面提到的direct index加速特征点之间的匹配。若能得到F,则表明满足了几何约束条件,回环检测成立。

       至此DLoopDetector的运行原理分析完毕,下一篇文章将具体分析其源代码。

猜你喜欢

转载自blog.csdn.net/lwx309025167/article/details/80591992