Seqslam 论文阅读部分
简要介绍:
这篇论文是2012年提出的,是基于序列的视觉定位系统的开端,主要的工作是位置识别/闭环检测
论文背景:
对于跨季节,跨时间变化的场景,基于特征的方法很难对同一地点进行位置识别。
论文方法:
利用基于序列的方法,计算每个局部导航序列中的最佳候选匹配位置,然后通过识别这些“局部最佳匹配”的连贯序列来实现定位。
(首先要明白由于拍摄的相机的速度不同,查询图片和数据库图片并不是一一对应的关系)
具体介绍
一 预处理:
1 图片原为 64×32(宽×高)大小,单通道(灰度)样图。
2 选取 rect或称cell为8*8大小,那么一幅图就有8×4个cell。 在 每一个cell内执行normalize操作,即
二 计算偏差矩阵
3 有了上面normalization后的图片,将第1个季节的第i张新图像减去第2个季节的第j张新图像,同时计算i与j的元素差值总和,从而获得一个 n×m的差异矩阵。 n是第1个季节的图片数量,m是第2个季节的图片数量
4 执行类似于预处理的normalize操作 ,自定义一个窗宽,最好围绕一列左右对称,如橙色窗,对应处理的是t-2列的偏差向量,处理方法为:
(简单来说就是这一列向量减窗口内元素的均值再除以这个窗的方差从而获得新的DifferenceMatrix)
第4步计算过程
(左边的图像是第3步的结果,右边为第4步)
(x轴(Recent video frame)是当前观察到的图片,也就是待匹配的图片序列。y轴(learned image templetes)就是把观察到的图片存起来,用于和观察到的图片对比。从上图观察到,目前观察到的图片位于t,作者指定匹配的图片序列长度ds=4,所以匹配 (t-3) ~ t的序列。)
三 序列匹配
5 搜寻范围,以及范围内的分数计算
即按照最小速度到最大可能速度之间的图片来寻找对应的结果。假设要找N对应的图片,寻找的范围为图中两条射线之间的像素,(看下图)但是横向长度收到参数ds限制,同时起点为N+i-ds/2,终点为N+i+ds/2。( i第二个季节的图片序号。)寻找的纵向宽度为Vmin : Vmax的宽度
论文计算第N张图与第2个季节每一张图片(设为i)的分数。score(i)为DifferenceMatrix在上面所述范围内的差异总和。
获取最小分数所在索引index及其值S1 ,同时将该索引附近范围(即index-RWindow 到 index+RWindow之间)从score中除去,计算score剩下值中的最小值作为第score的第2小值S2
最终得分为
,同时将min_index + matching_dist / 2作为匹配到的图片的索引。
将S 大于$ threshold的结果去掉,得到最终结果,并获得precision-recall曲线。
论文数据集:
(代码中使用的是norland和NewCollege)
对比实验:
OpenFABMAP(2010)
代码实践
python代码(实测可以运行通) https://github.com/Rick0514/seqslam_loopclosure
(在此感谢一下原作者)
参考与致谢博客
《SeqSLAM: Visual Route-Based Navigation for Sunny Summer Days and Stormy Winter Nights》论文及代码解读(二
SeqSlam论文阅读和实验