内容
本篇博客介绍论文原理,上篇博客介绍论文相关代码
《SeqSLAM: Visual Route-Based Navigation for Sunny Summer Days and Stormy Winter Nights》论文及代码解读(一)
介绍
SeqSLAM 是2012年两位澳大利亚的IEEE fellow提出来的,Michael J. Milford, Member, IEEE, Gordon. F. Wyeth, Member, IEEE。是当时第一个在极端环境变化下还能实现的基于视觉的定位系统,“this is the first time vision-based localization has been demonstrated across extreme environmental change.”
其代码地址在github上可以找到:
c++版本: https://github.com/subokita/OpenSeqSLAM (年代久远,需要修改)
MATLAB版本: https://github.com/OpenSLAM-org/openslam_openseqslam (无需修改)
目标
通过给出同一个地点,不同季节拍摄的若干照片,使用seqSLAM算法找出与在季节A的第i张图具有相同地点的位于季节B的第j张图。
数据集中不同季节内的照片数量一致,且不同季节相同编号的图片对应同一个地点。
正确的算法结果应该给出相同的编号。
原理
- 预处理
- 图片原为 64×32(宽×高)大小,单通道样图。
- 选取 rect或称cell 为8*8大小,那么一幅图就有8×4个cell。 在 每一个cell内执行normalize操作,即
D ′ = D − D m e a n D s t d D' = \frac{D-D_{mean}}{D_{std}} D′=DstdD−Dmean
- DifferenceMatrix 计算
- 有了上面normalization后的图片,将第1个季节的第i张新图像减去第2个季节的第j张新图像,同时计算i与j的元素差值总和,从而获得一个 n×m的差异矩阵。 n是第1个季节的图片数量,m是第2个季节的图片数量
- 执行类似于预处理的normalize操作 ,获得新的DifferenceMatrix
D ′ = D − D m e a n D s t d D' = \frac{D-D_{mean}}{D_{std}} D′=DstdD−Dmean
- 匹配结果
- 即对第一个季节的每张图片,找出对应的第2个季节中的图片。
- 先设定寻找范围,即按照最小速度到最大可能速度之间的图片来寻找对应的结果。假设要找N对应的图片,寻找的范围为图中两条射线之间的像素,但是横向长度收到参数ds限制,同时起点为N+i-ds/2,终点为N+i+ds/2。寻找的纵向宽度为
V
m
i
n
:
V
m
a
x
V_{min}:V_{max}
Vmin:Vmax的宽度, i第二个季节的图片序号。
- 计算分数
论文计算第N张图与第2个季节每一张图片(设为i)的分数。score(i)为DifferenceMatrix在上面所述范围内的差异总和。 - 获取最小分数所在索引index及其值 S 1 S_{1} S1,同时将该索引附近范围(即index-RWindow 到 index+RWindow之间)从score中除去,计算score剩下值中的最小值作为第score的第2小值 S 2 S_{2} S2。
- 最终得分为
S
=
S
1
S
2
S=\frac{S_{1}}{S_{2}}
S=S2S1,同时将
min_index + matching_dist / 2
作为匹配到的图片的索引 - 将
S
S
S大于$
t
h
r
e
s
h
o
l
d
_{threshold}
threshold的结果去掉,得到最终结果,并获得
precision-recall
曲线。
Tips
经过对相关研究者的询问,有一些知识需要说明:
1.并不是说夏季和冬季序号完全一致才能算作正确,而是需要在正确的标签附件设定一定的阈值,在阈值范围内均可认为正确。
2.多读论文才能了解这个领域
3.感谢白学长