一、特征检测
1、DoG图像金字塔
大概就是,用不同
σ
\sigma
σ 的高斯滤波器对图像滤波,然后做差
2、寻找局部极值
-
1、对于DoG金字塔的每一个点,比较它邻近的(包括临近层)26个点
-
2、寻找极值,作为潜在的关键点,这基本上意味着关键点最好在这个尺度上表示
3、SIFT关键点展示
-
1、去除低对比度特征:如果DoG中有的点低于某个设定的值,那就去掉
-
2、移去小于0.1倍最大值的所有关键点
最后结果举例:
3、为关键点指定方向
接下来是为每个关键点指定一个方向,这个方向提供了旋转不变性。
- 1、对于所有尺度,计算梯度振幅和取向
- 2、梯度幅度用2D高斯加权
- 3、将方向和幅度之和分配给关键点
- 4、按照方向,将对应的幅度放入直方图,极值所在的bin的值就代表了关键点的方向,达到极值的80%以上的bin,将转换成新的关键点
二、局部图像描述
-
1、使用与关键点尺度相关的高斯模糊图像
-
2、在每个像素检测到的特征周围的16x16方形窗口上获取图像梯度
-
3、相对于关键点方向旋转梯度方向和位置
-
4、创建方向直方图数组
-
5、将有8个bins的旋转梯度添加到它们的局部方向直方图中
-
6、所得到的SIFT描述符是一个长度为128的矢量,代表一个4x4直方图数组,每个直方图有8个方向bins
三、索引和匹配
1、 图像匹配
-
1、找到目标图像中识别的所有关键点,每个关键点都有二维位置、尺度和方向,以及不变的描述符向量
-
2、对于每个关键点,在参考图像数据库中搜索相似的描述符向量,描述符向量可以匹配数据库中的多个参考
2、特征匹配
如何搜索相似的描述符向量?
- 1、定义比较两个描述符的距离函数, 比如 L2距离,最好的是ratio距离
r
a
t
i
o
d
i
s
t
a
n
c
e
=
∣
∣
f
1
−
f
2
∣
∣
∣
∣
f
1
−
f
2
′
∣
∣
<
t
ratio distance = \frac{||f_{1} - f_{2}||}{||f_{1} - f_{2}^{'}||} < t
ratiodistance=∣∣f1−f2′∣∣∣∣f1−f2∣∣<t
其中,
f
2
f_{2}
f2是最接近的距离,
f
2
′
f_{2}^{'}
f2′是第二接近的距离, 一般当 t = 0.8时,接受满足上式的匹配
- 2、测试数据库中的所有特征,找到距离最小的特征
3、结果评估
True positives = # of detected matches that are correct
False positives = # of detected matches that are incorrect
然后计算AUC的值,最高 = 1