SIFT
四个主要步骤
- 尺度空间的极值检测 搜索所有尺度空间上的图像,通过高斯微分函数来识别潜在的对尺度和选择不变的兴趣点。
- 特征点定位 在每个候选的位置上,通过一个拟合精细模型来确定位置尺度,关键点的选取依据他们的稳定程度。
- 特征方向赋值 基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向,后续的所有操作都是对于关键点的方向、尺度和位置进行变换,从而提供这些特征的不变性。
- 特征点描述 在每个特征点周围的邻域内,在选定的尺度上测量图像的局部梯度,这些梯度被变换成一种表示,这种表示允许比较大的局部形状的变形和光照变换
1 尺度尺度极值检测
1.1 LOG
高斯拉布拉斯算子检测特征点最好,但运算量过大,故选用DOG
1.2 DOG
1.3 DoG空间极值检测
每一层的顶层和底层无法比较,需要高斯模糊生成三幅图像
2 删除不好的极值点
原因:极值点是在DOG离散空间得到的,离散空间极值点不一定全部满足连续空间的极值点,因此要把不满足的删除掉。可以在尺度空间通过DOG函数进行曲线拟合寻求极值点,目的是去点儿曲率非常不对称的点:
1.低对比度的特征点
- 对比度的泰勒展式
- 求导
- 带入,大于阈值留
2.不稳定的边缘点响应
在边缘方向的主曲率值比较大,而沿着方向上的曲率值比较小,与Hessian矩阵值成正比。
H=[DxxDyxDxyDyy]
H
=
[
D
x
x
D
y
x
D
x
y
D
y
y
]
Tr(H)=Dxx+Dyy=α+βDet(H)=Dxx+Dyy−D2xy=α⋅β
T
r
(
H
)
=
D
x
x
+
D
y
y
=
α
+
β
D
e
t
(
H
)
=
D
x
x
+
D
y
y
−
D
x
y
2
=
α
⋅
β
γ=αβ
γ
=
α
β
Tr(H)2Det(H)=(α+β)2αβ=(γβ+β)2γβ2=(γ+1)2γ
T
r
(
H
)
2
D
e
t
(
H
)
=
(
α
+
β
)
2
α
β
=
(
γ
β
+
β
)
2
γ
β
2
=
(
γ
+
1
)
2
γ
因此为了检测主曲率是否在某个阈值 Tγ T γ 下,只需检测
Tr(H)2Det(H)>(Tγ+1)2Tγ
T
r
(
H
)
2
D
e
t
(
H
)
>
(
T
γ
+
1
)
2
T
γ
3 求取特征点的主方向
已经找到不同尺度下均存在特征点,为了实现图像旋转不变性,需要给特征的方向进行赋值。
主要利用关键点邻域像素的梯度方向分布特性,为关键点指定的方向特性
m(x,y)=[L(x+1,y)−L(x−1,y)]2+[L(x,y+1)−L(x,y−1)]2−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−√
m
(
x
,
y
)
=
[
L
(
x
+
1
,
y
)
−
L
(
x
−
1
,
y
)
]
2
+
[
L
(
x
,
y
+
1
)
−
L
(
x
,
y
−
1
)
]
2
θ(x,y)=arctanL(x,y+1)−L(x,y−1)L(x+1,y)−L(x−1,y)
θ
(
x
,
y
)
=
arctan
L
(
x
,
y
+
1
)
−
L
(
x
,
y
−
1
)
L
(
x
+
1
,
y
)
−
L
(
x
−
1
,
y
)
在梯度直方图中,当存在一个相当于主峰值80%能量的柱值时,则可以将这个方向认为是该特征点辅助方向。一个特征点可能检测到多个方向(也可以理解为,一个特征点可能产生多个坐标、尺度相同,但是方向不同的特征点)。
4 生成特征描述
每个特征点由4个种子点组成,每个种子点有8个方向的向量信息。
推广128维度