文章目录
【SIFT介绍】Scale-Invariant Feature Transform——尺度不变特征变换(二)
简介
许多实际应用需要在一张或多张图像中定位参考位置,例如图像对齐、去除畸变、物体跟踪、3D重建等。我们已经看到,角点可以相当可靠地定位,并且不依赖于方向。然而,典型的角点检测器仅提供每个候选点的位置和强度,它们不提供任何有关其特征或“身份”的信息,这些信息可以用于匹配。另一个限制是大多数角点检测器仅在特定尺度或分辨率下工作,因为它们基于一组固定的滤波器。
本章介绍了局部特征检测的尺度不变特征变换(SIFT)技术,该技术最初由D. Lowe [152]提出,并自此成为成像行业的“主力”方法。其目标是定位能够鲁棒识别的图像特征,以便在多幅图像和图像序列中进行匹配,以及在不同视角条件下进行物体识别。SIFT采用了“尺度空间”的概念[151],在多个尺度层次或图像分辨率下捕捉特征,这不仅增加了可用特征的数量,还使得该方法对尺度变化具有高度的容忍度。这使得在例如物体向相机移动并因此连续改变其尺度的情况下跟踪特征成为可能,或将使用不同变焦设置拍摄的图像拼接在一起。
通过简化尺度空间计算和特征检测或使用GPU硬件[20, 90, 218],已经实现了SIFT算法的加速变种。
原则上,SIFT的工作方式类似于多尺度角点检测器,具有亚像素定位精度,并为每个候选点附加了旋转不变的特征描述符。这个(通常是128维的)特征描述符总结了对应特征点周围空间邻域中的梯度方向分布,因此可以像“指纹”一样使用。SIFT特征计算涉及的主要步骤如下:
- 在拉普拉斯-高斯(LoG)尺度空间中检测极值点,以定位潜在的兴趣点。
- 通过拟合连续模型来精确确定位置和尺度,从而对关键点进行优化。
- 通过周围图像梯度方向的主导方向为特征点分配方向。
- 通过归一化局部梯度直方图来形成特征描述符。
这些步骤都将在本章的其余部分详细描述。
我们在这里如此详细地解释SIFT技术有几个原因。首先,这是迄今为止我们所讨论的最复杂的算法,其各个步骤精心设计并相互依赖,涉及众多需要考虑的参数。因此,深入理解其内部工作原理和局限性对于成功使用以及在结果不如预期时分析问题非常重要。
2 关键点的选择和优化
关键点通过三个步骤识别:(1)在DoG尺度空间中检测极值点,(2)通过局部插值进行位置优化,以及(3)消除边缘响应。以下详细介绍这些步骤,并在算法25.3-25.6中总结。
2.1 局部极值检测
在第一步中,候选兴趣点被检测为我们在上一节描述的3D DoG尺度空间中的局部极值。极值检测在每个八度音阶
p
p
p中独立进行。为了方便,我们定义3D尺度空间坐标
c
=
(
u
,
v
,
q
)
\mathbf c = (u, v, q)
c=(u,v,q),由空间位置
(
u
,
v
)
(u, v)
(u,v)和层次索引
q
q
q组成,以及函数
D
(
c
)
:
=
D
p
,
q
+
k
(
u
,
v
)
(25.51)
D(\mathbf c) := \mathbf D_{p,q+k}(u, v) \tag{25.51}
D(c):=Dp,q+k(u,v)(25.51)
作为从给定八度音阶
p
p
p中选择DoG值的简写表示法。此外,为了收集尺度空间位置
c
\mathbf c
c周围3D邻域的DoG值,我们定义映射
N
c
(
i
,
j
,
k
)
:
=
D
(
c
+
i
⋅
e
i
+
j
⋅
e
j
+
k
⋅
e
k
)
(25.52)
\mathsf N_\mathbf c(i, j, k) := D\left(\mathbf c + i \cdot \mathbf e_i + j \cdot \mathbf e_j + k \cdot \mathbf e_k\right) \tag{25.52}
Nc(i,j,k):=D(c+i⋅ei+j⋅ej+k⋅ek)(25.52)
其中
i
,
j
,
k
∈
{
−
1
,
0
,
1
}
i, j, k \in \{-1, 0, 1\}
i,j,k∈{−1,0,1}以及3D单位向量
e
i
=
(
1
,
0
,
0
)
⊤
,
e
j
=
(
0
,
1
,
0
)
⊤
,
e
k
=
(
0
,
0
,
1
)
⊤
(25.53)
\mathbf e_i = (1, 0, 0)^\top, \quad \mathbf e_j = (0, 1, 0)^\top, \quad \mathbf e_k = (0, 0, 1)^\top \tag{25.53}
ei=(1,0,0)⊤,ej=(0,1,0)⊤,ek=(0,0,1)⊤(25.53)
邻域
N
c
\mathsf N_\mathbf c
Nc包括中心值
D
(
c
)
D(\mathbf c)
D(c)及其26个紧邻的值(见图25.15(a))。这些值将用于估计尺度空间位置
c
c
c的3D梯度向量和Hessian矩阵,如下所述。
如果DoG尺度空间位置
c
\mathbf c
c的关联值
D
(
c
)
=
N
c
(
0
,
0
,
0
)
D(\mathbf c) = \mathsf N_\mathbf c(0, 0, 0)
D(c)=Nc(0,0,0)为负且小于所有相邻值,或者为正且大于所有相邻值,则
c
\mathbf c
c被接受为局部极值(最小值或最大值)。此外,可以指定最小差异
t
e
x
t
r
m
≥
0
t_{extrm} \geq 0
textrm≥0,指示中心值必须至少偏离周围值的程度。因此,判断给定邻域
N
c
\mathsf N_\mathbf c
Nc是否包含局部最小值或最大值可以表示为
I
s
L
o
c
a
l
M
i
n
(
N
c
)
:
=
N
c
(
0
,
0
,
0
)
<
0
∧
N
c
(
0
,
0
,
0
)
+
t
e
x
t
r
m
<
min
(
i
,
j
,
k
)
≠
(
0
,
0
,
0
)
N
c
(
i
,
j
,
k
)
,
(25.54)
\mathsf {IsLocalMin}(\mathsf N_\mathbf c) := \mathsf N_\mathbf c(0, 0, 0) < 0 \wedge \mathsf N_\mathbf c(0, 0, 0) + t_{extrm} < \min_{(i,j,k) \neq (0,0,0)} \mathsf N_\mathbf c(i, j, k), \tag{25.54}
IsLocalMin(Nc):=Nc(0,0,0)<0∧Nc(0,0,0)+textrm<(i,j,k)=(0,0,0)minNc(i,j,k),(25.54)
I
s
L
o
c
a
l
M
a
x
(
N
c
)
:
=
N
c
(
0
,
0
,
0
)
>
0
∧
N
c
(
0
,
0
,
0
)
−
t
e
x
t
r
m
<
max
(
i
,
j
,
k
)
≠
(
0
,
0
,
0
)
N
c
(
i
,
j
,
k
)
(25.55)
\mathsf {IsLocalMax}(\mathsf N_\mathbf c) := \mathsf N_\mathbf c(0, 0, 0) > 0 \wedge \mathsf N_\mathbf c(0, 0, 0) - t_{extrm} < \max_{(i,j,k) \neq (0,0,0)} \mathsf N_\mathbf c(i, j, k) \tag{25.55}
IsLocalMax(Nc):=Nc(0,0,0)>0∧Nc(0,0,0)−textrm<(i,j,k)=(0,0,0)maxNc(i,j,k)(25.55)
(见算法25.5中的过程
I
s
E
x
t
r
e
m
u
m
(
N
c
)
\mathsf {IsExtremum}(\mathsf N_\mathbf c)
IsExtremum(Nc))。如图25.15(b-c)所示,可以为极值检测指定具有18或10个单元的替代3D邻域。
图 25.15
用于检测 DoG 尺度空间中局部极值的不同 3D 邻域。红色立方体表示参考坐标 c = ( u , v , q ) \mathbf c = (u, v, q) c=(u,v,q) 处的 DoG 值,该坐标位于空间位置 ( u , v ) (u, v) (u,v) 和尺度层次 q q q (在某个八度音阶 p p p 内)。完整的 3 × 3 × 3 邻域包含 26 个元素(a);其他类型的邻域分别包含 18 个(b)或 10 个(c)元素,也常被使用。如果中心的 DoG 值大于/小于所有相邻值(绿色立方体),则检测到局部最大值/最小值。
2.2 位置优化
在DoG尺度空间中检测到局部极值后,只知道其离散的3D坐标 c = ( u , v , q ) \mathbf c = (u, v, q) c=(u,v,q),由空间网格位置 ( u , v ) (u, v) (u,v)和相关尺度层次的索引 q q q组成。在第二步中,通过拟合二次函数到局部邻域来估计每个候选关键点的更精确的连续位置,如[37]中所提议。这在尺度空间的较高八度音阶尤为重要,因为连续抽取导致空间分辨率越来越粗糙。位置优化基于离散DoG函数的局部二阶泰勒展开式,产生一个连续近似函数,其最大值或最小值可以解析地找到。附录C.3.2部分提供了更多细节和说明性示例。
在分层DoG尺度空间
D
\mathbf D
D的八度音阶
p
p
p中任一极值位置
c
=
(
u
,
v
,
q
)
\mathbf c = (u, v, q)
c=(u,v,q)处,使用相应的3×3×3邻域
N
D
(
c
)
\mathcal N_D(c)
ND(c)来估计连续3D梯度的元素,即
∇
D
(
c
)
=
(
d
x
d
y
d
σ
)
≈
1
2
⋅
(
D
(
c
+
e
i
)
−
D
(
c
−
e
i
)
D
(
c
+
e
j
)
−
D
(
c
−
e
j
)
D
(
c
+
e
k
)
−
D
(
c
−
e
k
)
)
,
(25.56)
\nabla _D(\mathbf c) = \begin{pmatrix} dx \\ dy \\ d\sigma \end{pmatrix} \approx \frac{1}{2} \cdot \begin{pmatrix} D(\mathbf c + \mathbf e_i) - D(\mathbf c - \mathbf e_i) \\ D(\mathbf c + \mathbf e_j) - D(\mathbf c - \mathbf e_j) \\ D(\mathbf c + \mathbf e_k) - D(\mathbf c - \mathbf e_k) \end{pmatrix}, \tag{25.56}
∇D(c)=
dxdydσ
≈21⋅
D(c+ei)−D(c−ei)D(c+ej)−D(c−ej)D(c+ek)−D(c−ek)
,(25.56)
其中
D
(
)
D( )
D()如公式(25.51)所定义。同样,位置
c
\mathbf c
c的3×3 Hessian矩阵获得如下
H
D
(
c
)
=
(
d
x
x
d
x
y
d
x
σ
d
x
y
d
y
y
d
y
σ
d
x
σ
d
y
σ
d
σ
σ
)
,
(25.57)
\mathbf H_D(\mathbf c) = \begin{pmatrix} d_{xx} & d_{xy} & d_{x\sigma} \\ d_{xy} & d_{yy} & d_{y\sigma} \\ d_{x\sigma} & d_{y\sigma} & d_{\sigma\sigma} \end{pmatrix}, \tag{25.57}
HD(c)=
dxxdxydxσdxydyydyσdxσdyσdσσ
,(25.57)
所需的二阶导数估计为
d
x
x
=
D
(
c
−
e
i
)
−
2
⋅
D
(
c
)
+
D
(
c
+
e
i
)
,
d
y
y
=
D
(
c
−
e
j
)
−
2
⋅
D
(
c
)
+
D
(
c
+
e
j
)
,
d
σ
σ
=
D
(
c
−
e
k
)
−
2
⋅
D
(
c
)
+
D
(
c
+
e
k
)
,
d
x
y
=
D
(
c
+
e
i
+
e
j
)
−
D
(
c
−
e
i
+
e
j
)
−
D
(
c
+
e
i
−
e
j
)
+
D
(
c
−
e
i
−
e
j
)
4
,
d
x
σ
=
D
(
c
+
e
i
+
e
k
)
−
D
(
c
−
e
i
+
e
k
)
−
D
(
c
+
e
i
−
e
k
)
+
D
(
c
−
e
i
−
e
k
)
4
,
d
y
σ
=
D
(
c
+
e
j
+
e
k
)
−
D
(
c
−
e
j
+
e
k
)
−
D
(
c
+
e
j
−
e
k
)
+
D
(
c
−
e
j
−
e
k
)
4
.
(25.58)
\begin{aligned} d_{xx} &= D(\mathbf c - \mathbf e_i) - 2 \cdot D(\mathbf c) + D(\mathbf c + \mathbf e_i), \\ d_{yy} &= D(\mathbf c - \mathbf e_j) - 2 \cdot D(\mathbf c) + D(\mathbf c + \mathbf e_j), \\ d_{\sigma\sigma} &= D(\mathbf c - \mathbf e_k) - 2 \cdot D(\mathbf c) + D(\mathbf c + \mathbf e_k), \\ d_{xy} &= \frac{D(\mathbf c + \mathbf e_i +\mathbf e_j) - D(\mathbf c - \mathbf e_i +\mathbf e_j) - D(\mathbf c +\mathbf e_i - \mathbf e_j) + D(\mathbf c - \mathbf e_i - \mathbf e_j)}{4}, \\ d_{x\sigma} &= \frac{D(\mathbf c + \mathbf e_i + \mathbf e_k) - D(\mathbf c - \mathbf e_i + \mathbf e_k) - D(\mathbf c +\mathbf e_i - \mathbf e_k) + D(\mathbf c - \mathbf e_i - \mathbf e_k)}{4}, \\ d_{y\sigma} &= \frac{D(\mathbf c + \mathbf e_j + \mathbf e_k) - D(\mathbf c - \mathbf e_j + \mathbf e_k) - D(\mathbf c +\mathbf e_j - \mathbf e_k) + D(\mathbf c - \mathbf e_j - \mathbf e_k)}{4}. \end{aligned} \tag{25.58}
dxxdyydσσdxydxσdyσ=D(c−ei)−2⋅D(c)+D(c+ei),=D(c−ej)−2⋅D(c)+D(c+ej),=D(c−ek)−2⋅D(c)+D(c+ek),=4D(c+ei+ej)−D(c−ei+ej)−D(c+ei−ej)+D(c−ei−ej),=4D(c+ei+ek)−D(c−ei+ek)−D(c+ei−ek)+D(c−ei−ek),=4D(c+ej+ek)−D(c−ej+ek)−D(c+ej−ek)+D(c−ej−ek).(25.58)
参见算法25.5中的程序Gradient(
N
c
\mathsf N_\mathbf c
Nc)和Hessian(
N
c
\mathsf N_\mathbf c
Nc)以获取更多详细信息。根据梯度向量
∇
D
(
c
)
\nabla _D(\mathbf c)
∇D(c)和Hessian矩阵
H
D
(
c
)
\mathbf H_D(\mathbf c)
HD(c),点
c
\mathbf c
c周围的二阶泰勒展开式为
D
~
c
(
x
)
=
D
(
c
)
+
∇
D
⊤
(
c
)
⋅
(
x
−
c
)
+
1
2
(
x
−
c
)
⊤
⋅
H
D
(
c
)
⋅
(
x
−
c
)
,
(25.59)
\tilde{D}_\mathbf c(\mathbf x) = D(\mathbf c) + \nabla _D^\top (\mathbf c) \cdot (\mathbf x - \mathbf c) + \frac{1}{2} (\mathbf x - \mathbf c)^\top \cdot \mathbf H_D(\mathbf c) \cdot (\mathbf x - \mathbf c), \tag{25.59}
D~c(x)=D(c)+∇D⊤(c)⋅(x−c)+21(x−c)⊤⋅HD(c)⋅(x−c),(25.59)
其中连续位置
x
=
(
x
,
y
,
σ
)
⊤
\mathbf x = (x, y, \sigma)^\top
x=(x,y,σ)⊤。标量值函数
D
~
c
(
x
)
∈
R
\tilde{D}_\mathbf c(\mathbf x) \in \mathbb{R}
D~c(x)∈R,其中
c
=
(
u
,
v
,
q
)
⊤
\mathbf c = (u, v, q)^\top
c=(u,v,q)⊤和
x
=
(
x
,
y
,
σ
)
⊤
\mathbf x = (x, y, \sigma)^\top
x=(x,y,σ)⊤,是八度音阶
p
p
p、尺度层次
q
q
q和空间位置
u
,
v
u, v
u,v处离散DoG函数
D
p
,
q
(
u
,
v
)
D_{p,q}(u, v)
Dp,q(u,v)的局部连续近似函数。这是一个二次函数,在位置
x
˘
=
(
x
˘
y
˘
σ
˘
)
=
c
+
d
=
c
−
H
D
−
1
(
c
)
⋅
∇
D
(
c
)
⏟
d
=
x
˘
−
c
(25.60)
\breve{\mathbf x} = \begin{pmatrix} \breve{x} \\ \breve{y} \\ \breve{\sigma} \end{pmatrix} = \mathbf c + \mathbf d = \mathbf c \underbrace{- \mathbf H_D^{-1}(\mathbf c) \cdot \nabla _D(\mathbf c) }_{\mathbf d = \breve{\mathbf x} - \mathbf c \tag{25.60}}
x˘=
x˘y˘σ˘
=c+d=cd=x˘−c
−HD−1(c)⋅∇D(c)(25.60)
处具有极值(最大值或最小值),假设Hessian矩阵
H
D
\mathbf H_D
HD的逆存在。通过将极值位置
x
˘
\breve{\mathbf x}
x˘代入公式(25.59),可以找到连续近似函数
D
~
\tilde{D}
D~的峰值(最小值或最大值)
D
peak
(
c
)
=
D
~
c
(
x
˘
)
=
D
(
c
)
+
1
2
∇
D
⊤
(
c
)
⋅
(
x
˘
−
c
)
=
D
(
c
)
+
1
2
∇
D
⊤
(
c
)
⋅
d
,
(25.61)
D_{\text{peak}}(\mathbf c) = \tilde{D}_c(\breve{\mathbf x}) = D(\mathbf c) + \frac{1}{2} \nabla ^\top_D(\mathbf c) \cdot (\breve{\mathbf x} - \mathbf c) \\ = D(\mathbf c) + \frac{1}{2} \nabla^\top_ D(\mathbf c) \cdot \mathbf d, \tag{25.61}
Dpeak(c)=D~c(x˘)=D(c)+21∇D⊤(c)⋅(x˘−c)=D(c)+21∇D⊤(c)⋅d,(25.61)
其中
d
=
x
˘
−
c
\mathbf d = \breve{\mathbf x} - \mathbf c
d=x˘−c(参见公式(25.60))表示邻域的离散中心位置
c
\mathbf c
c和连续极值位置
x
˘
\breve{\mathbf x}
x˘之间的3D向量。
只有当DoG的估计幅度超过给定阈值
t
peak
t_{\text{peak}}
tpeak时,尺度空间位置
c
\mathbf c
c才保留为候选兴趣点,即
∣
D
peak
(
c
)
∣
>
t
peak
.
(25.62)
|D_{\text{peak}}(\mathbf c)| > t_{\text{peak}}. \tag{25.62}
∣Dpeak(c)∣>tpeak.(25.62)
如果公式(25.60)中的
c
\mathbf c
c到估计的(连续)峰值位置
x
^
\hat{x}
x^的距离
d
=
(
x
′
,
y
′
,
σ
′
)
⊤
\mathbf d = ({x'}, {y'}, {\sigma'})^\top
d=(x′,y′,σ′)⊤在任何空间方向上大于预定义的限制(通常为0.5),则中心点
c
=
(
u
,
v
,
q
)
⊤
\mathbf c = (u, v, q)^\top
c=(u,v,q)⊤将通过最大±1单位步长沿
u
,
v
u, v
u,v轴移动到相邻的一个DoG单元,即
c
←
c
+
(
min
(
1
,
max
(
−
1
,
round
(
x
′
)
)
)
min
(
1
,
max
(
−
1
,
round
(
y
′
)
)
)
0
)
.
(25.63)
\mathbf c \leftarrow\mathbf c + \begin{pmatrix} \min(1, \max(-1, \text{round}({x'}))) \\ \min(1, \max(-1, \text{round}({y'}))) \\ 0 \end{pmatrix}. \tag{25.63}
c←c+
min(1,max(−1,round(x′)))min(1,max(−1,round(y′)))0
.(25.63)
c
\mathbf c
c的
q
q
q分量在此版本中不作修改,即搜索继续在原来的尺度层次进行。基于新点周围的3D邻域,再次执行泰勒展开(公式(25.60))以估计新的峰值位置。这一过程重复进行,直到峰值位置位于当前DoG单元内部或达到允许的重新定位步数
n
refine
n_{\text{refine}}
nrefine(通常设置为4或5)。如果成功,这一步的结果是候选特征点
c
˘
=
(
x
˘
,
y
˘
,
q
˘
)
⊤
=
c
+
(
x
′
,
y
′
,
0
)
⊤
.
(25.64)
\breve{\mathbf c} = (\breve{x}, \breve{y}, \breve{q})^\top = \mathbf c + ({x'}, {y'}, 0)^\top. \tag{25.64}
c˘=(x˘,y˘,q˘)⊤=c+(x′,y′,0)⊤.(25.64)
请注意(在此实现中)即使3D泰勒展开表明估计的峰值位于另一个尺度层次,尺度层次
q
q
q仍保持不变。参见算法25.4中的过程RefineKeyPosition()以获取这些步骤的简明总结。
需要提到的是,原始文献[153]对上述位置优化过程没有特别详细的说明,因此各种开源SIFT实现中使用的方式略有不同。例如,只要 ∣ x ′ ∣ |{x'}| ∣x′∣或 ∣ y ′ ∣ |{y'}| ∣y′∣大于0.6,VLFeat[241]的实现就移动到同一尺度层次的直接邻居,如前所述。S. Nowozin的AutoPano-SIFT[18]计算空间位移 d = ∣ ∣ ( x ′ , y ′ ) ∣ ∣ d = ||({x'}, {y'})|| d=∣∣(x′,y′)∣∣的长度,如果 d > 2 d > 2 d>2则丢弃当前点。否则,它以 Δ u = round ( x ′ ) \Delta _u = \text{round}({x'}) Δu=round(x′), Δ v = round ( y ′ ) \Delta _v = \text{round}({y'}) Δv=round(y′)移动,而不限制位移到±1。OpenCV使用的开源SIFT库[106]也在空间方向上进行全移动,并且在每次迭代中还可能通过 Δ q = round ( σ ′ ) \Delta _q = \text{round}({\sigma'}) Δq=round(σ′)改变尺度层次。
2.3 抑制对类似边缘结构的响应
在前一步中,候选兴趣点被选择为DoG尺度空间中泰勒近似具有局部最大值且外推的DoG值高于给定阈值( t p e a k t_{peak} tpeak)的位置。然而,DoG滤波器也会对类似边缘的结构产生强烈响应。在这些位置上,兴趣点无法以足够的稳定性和重复性进行定位。为了消除边缘附近的响应,Lowe建议使用2D DoG结果沿空间 x x x、 y y y轴的主曲率,利用函数的主曲率与函数在给定点的Hessian矩阵的特征值成比例这一事实。
对于DoG尺度空间中的特定点 c = ( u , v , q ) \mathbf c = (u, v, q) c=(u,v,q),其邻域为 N D \mathsf N_D ND(见公式(25.52)),其空间坐标的 2 × 2 2×2 2×2Hessian矩阵为
H x y ( c ) = ( d x x d x y d x y d y y ) , (25.65) \mathbf H_{xy}(\mathbf c) = \begin{pmatrix} d_{xx} & d_{xy} \\ d_{xy} & d_{yy} \end{pmatrix}, \tag{25.65} Hxy(c)=(dxxdxydxydyy),(25.65)
其中 d x x d_{xx} dxx、 d x y d_{xy} dxy、 d y y d_{yy} dyy的定义见公式(25.58),即这些值可以从相应的 3 × 3 3×3 3×3Hessian矩阵 H D ( c ) \mathbf H_D(\mathbf c) HD(c)(见公式(25.57))中提取。
矩阵 H x y ( c ) \mathbf H_{xy}(\mathbf c) Hxy(c)有两个特征值 λ 1 , λ 2 \lambda_1, \lambda_2 λ1,λ2,我们定义为按大小排序,使得 λ 1 \lambda_1 λ1具有更大的绝对值( ∣ λ 1 ∣ ≥ ∣ λ 2 ∣ |\lambda_1| \geq |\lambda_2| ∣λ1∣≥∣λ2∣)。如果某点 c \mathbf c c的两个特征值的大小相似,函数沿两个正交方向具有高曲率,在这种情况下, c \mathbf c c很可能是一个可以可靠定位的良好参考点。在最佳情况下(例如在角点附近),特征值比率 ρ = λ 1 / λ 2 \rho = \lambda_1/\lambda_2 ρ=λ1/λ2接近1。相反,如果比率 ρ \rho ρ很高,则可以得出结论,在此位置上单一方向占主导地位,这通常发生在边缘附近。
要估计比率 ρ \rho ρ,不需要实际计算特征值本身。根据[153]中的描述,特征值 λ 1 , λ 2 \lambda_1, \lambda_2 λ1,λ2的和与积可以表示为
λ 1 + λ 2 = trace ( H x y ( c ) ) = d x x + d y y , (25.66) \lambda_1 + \lambda_2 = \operatorname{trace}(\mathbf H_{xy}(\mathbf c)) = d_{xx} + d_{yy}, \tag{25.66} λ1+λ2=trace(Hxy(c))=dxx+dyy,(25.66)
λ 1 ⋅ λ 2 = det ( H x y ( c ) ) = d x x ⋅ d y y − d x y 2 . (25.67) \lambda_1 \cdot \lambda_2 = \det(\mathbf H_{xy}(\mathbf c)) = d_{xx} \cdot d_{yy} - d_{xy}^2. \tag{25.67} λ1⋅λ2=det(Hxy(c))=dxx⋅dyy−dxy2.(25.67)
如果行列式 det ( H x y ) \det(\mathbf H_{xy}) det(Hxy)为负,则基础2D函数的主曲率符号相反,因此可以将点 c \mathbf c c舍弃,因为它不是极值点。否则,如果两个特征值 λ 1 , λ 2 \lambda_1, \lambda_2 λ1,λ2的符号相同,则比率
ρ 1 , 2 = λ 1 λ 2 (25.68) \rho_{1,2} = \frac{\lambda_1}{\lambda_2} \tag{25.68} ρ1,2=λ2λ1(25.68)
为正(其中 λ 1 = ρ 1 , 2 ⋅ λ 2 \lambda_1 = \rho_{1,2} \cdot \lambda_2 λ1=ρ1,2⋅λ2),因此表达式
a = [ trace ( H x y ( c ) ) ] 2 det ( H x y ( c ) ) = ( λ 1 + λ 2 ) 2 λ 1 ⋅ λ 2 (25.69) a = \frac{[\operatorname{trace}(\mathbf H_{xy}(\mathbf c))]^2}{\det(\mathbf H_{xy}(\mathbf c))} = \frac{(\lambda_1 + \lambda_2)^2}{\lambda_1 \cdot \lambda_2} \tag{25.69} a=det(Hxy(c))[trace(Hxy(c))]2=λ1⋅λ2(λ1+λ2)2(25.69)
= ( ρ 1 , 2 ⋅ λ 2 + λ 2 ) 2 ρ 1 , 2 ⋅ λ 2 2 = λ 2 2 ⋅ ( ρ 1 , 2 + 1 ) 2 ρ 1 , 2 ⋅ λ 2 2 = ( ρ 1 , 2 + 1 ) 2 ρ 1 , 2 (25.70) = \frac{(\rho_{1,2} \cdot \lambda_2 + \lambda_2)^2}{\rho_{1,2} \cdot \lambda_2^2} = \frac{\lambda_2^2 \cdot (\rho_{1,2} + 1)^2}{\rho_{1,2} \cdot \lambda_2^2} = \frac{(\rho_{1,2} + 1)^2}{\rho_{1,2}} \tag{25.70} =ρ1,2⋅λ22(ρ1,2⋅λ2+λ2)2=ρ1,2⋅λ22λ22⋅(ρ1,2+1)2=ρ1,2(ρ1,2+1)2(25.70)
仅依赖于比率 ρ 1 , 2 \rho_{1,2} ρ1,2。如果Hessian矩阵 H x y \mathbf H_{xy} Hxy的行列式为正,量 a a a在 ρ 1 , 2 = 1 \rho_{1,2} = 1 ρ1,2=1时达到最小值(4.0),即两个特征值相等(见图25.16)。注意比率 a a a对于 ρ 1 , 2 = λ 1 / λ 2 \rho_{1,2} = \lambda_1/\lambda_2 ρ1,2=λ1/λ2或 ρ 1 , 2 = λ 2 / λ 1 \rho_{1,2} = \lambda_2/\lambda_1 ρ1,2=λ2/λ1是相同的,因为
a = ( ρ 1 , 2 + 1 ) 2 ρ 1 , 2 = ( 1 ρ 1 , 2 + 1 ) 2 1 ρ 1 , 2 . (25.71) a = \frac{(\rho_{1,2} + 1)^2}{\rho_{1,2}} = \frac{\left(\frac{1}{\rho_{1,2}} + 1\right)^2}{\frac{1}{\rho_{1,2}}}. \tag{25.71} a=ρ1,2(ρ1,2+1)2=ρ1,21(ρ1,21+1)2.(25.71)
要验证给定位置 c \mathbf c c处的特征值比率 ρ 1 , 2 \rho_{1,2} ρ1,2是否低于指定限值 ρ max \rho_{\max} ρmax(使 c \mathbf c c成为良好候选点),只需检查条件
a ≤ a max , 其中 a max = ( ρ max + 1 ) 2 ρ max , (25.72) a \leq a_{\max}, \quad \text{其中} \quad a_{\max} = \frac{(\rho_{\max} + 1)^2}{\rho_{\max}}, \tag{25.72} a≤amax,其中amax=ρmax(ρmax+1)2,(25.72)
而无需实际计算个别特征值 λ 1 \lambda_1 λ1和 λ 2 \lambda_2 λ2。
ρ max \rho_{\max} ρmax应大于1,通常选择在3到10的范围内([153]中建议 ρ max = 10 \rho_{\max} = 10 ρmax=10)。在公式(25.72)中的结果值 a max a_{\max} amax是常数,只需计算一次(见算法25.3,第2行)。对于不同 ρ max \rho_{\max} ρmax值的检测示例如图25.17所示。注意,随着 ρ max \rho_{\max} ρmax从3提高到40,边缘附近出现的候选点明显增多。
图 25.16
通过指定 a max a_{\max} amax 限制主曲率比率(边缘比率) ρ 1 , 2 \rho_{1,2} ρ1,2。当特征值比率 ρ 1 , 2 = λ 1 λ 2 \rho_{1,2} = \frac{\lambda_1}{\lambda_2} ρ1,2=λ2λ1 为1时,即当两个特征值 λ 1 , λ 2 \lambda_1, \lambda_2 λ1,λ2 相等时,量 a a a(蓝线)达到最小值,这表示一个类似角点的事件。通常,在图像线附近,只有一个特征值占主导地位,因此 ρ 1 , 2 \rho_{1,2} ρ1,2 和 a a a 的值显著增加。在此示例中,通过设置 a max = ( 5 + 1 ) 2 5 = 7.2 a_{\max} = \frac{(5 + 1)^2}{5} = 7.2 amax=5(5+1)2=7.2(红线),将主曲率比率 ρ 1 , 2 \rho_{1,2} ρ1,2 限制为 ρ max = 5.0 \rho_{\max} = 5.0 ρmax=5.0。
图 25.17
通过控制最大曲率比率 ρ max \rho_{\max} ρmax 来拒绝类似边缘的特征。圆的大小与检测到相应关键点的尺度水平成比例,颜色表示包含的八度(0 = 红色,1 = 绿色,2 = 蓝色,3 = 洋红色)。