Moravec Detector
Moravec角点检测是第一个提出兴趣点(interest points)的Paper。它的主要思想是:以每个像素为中心,有一个固定的滑动窗口。该方法计算并在八个方向上(纵横以及斜对角)搜索每个像素的最小强度变化,如果最小值大于给定阈值,则检测出感兴趣点。
其可以用数学公式表达为: E ( u , v ) = ∑ x , y w ( x , y ) [ I ( x + u , y + v ) − I ( x , y ) ] 2 E(u, v)=\sum_{x, y} w(x, y)[I(x+u, y+v)-I(x, y)]^{2} E(u,v)=∑x,yw(x,y)[I(x+u,y+v)−I(x,y)]2
-
E ( u , v ) E(u,v) E(u,v)代表像素中心 ( x , y ) (x,y) (x,y)在偏移量 ( u , v ) (u,v) (u,v)的方向上的强度变化。
-
w ( x , y ) w(x,y) w(x,y)是一个指示函数,当 ( x , y ) (x,y) (x,y)在滑动窗口内时,为1,若在滑动窗口外,则为0.
-
I ( x , y ) I(x,y) I(x,y)指的是在像素点(x,y)处的光强或者说是灰度值。
值得说明的是,这个式子是Harris总结的。
Harris Corner Detector
Moravec存在着许多不足。非常重要的一点就是:由于对于灰度值变化的梯度判断是离散的进行在8个方向,所以不具有旋转不变性;同时还会出现误判,尤其是当一条线不平行于这八个方向时,线上的点也会被误检测为角点。
为了进一步改进Moravec角点检测,Harris提出了著名的Harris角点检测。
E
(
u
,
v
)
=
∑
(
x
,
y
)
w
(
x
,
y
)
[
I
(
x
+
u
,
y
+
v
)
−
I
(
x
,
y
)
]
2
≈
∑
(
x
,
y
)
w
(
x
,
y
)
[
I
(
x
,
y
)
+
∂
I
∂
x
(
x
,
y
)
u
+
∂
I
∂
y
(
x
,
y
)
v
−
I
(
x
,
y
)
]
2
(一阶泰勒展开)
≈
∑
(
x
,
y
)
w
(
x
,
y
)
[
∂
I
∂
x
(
x
,
y
)
u
+
∂
I
∂
y
(
x
,
y
)
v
]
2
(消除重复项)
=
∑
x
,
y
w
(
x
,
y
)
(
u
2
f
x
2
(
x
,
y
)
+
2
u
v
f
x
(
x
,
y
)
f
y
(
x
,
y
)
+
v
2
f
y
2
(
x
,
y
)
)
=
∑
x
,
y
w
(
x
,
y
)
(
u
2
I
x
2
+
2
u
v
I
x
I
y
+
v
2
I
y
2
)
(简化)
=
[
u
v
]
(
∑
w
(
x
,
y
)
[
I
x
2
I
x
I
y
I
x
I
y
I
y
2
]
)
[
u
v
]
=
[
u
v
]
T
H
[
u
v
]
\begin{aligned} &E(u, v)=\sum_{(x, y)} w(x, y)[I(x+u, y+v)-I(x, y)]^{2}\\ &\approx \sum_{(x, y)} w(x, y)\left[I(x, y)+\frac{\partial I}{\partial x}(x, y) u+\frac{\partial I}{\partial y}(x, y) v-I(x, y)\right]^{2}\qquad\text { (一阶泰勒展开) }\\ &\approx \sum_{(x, y)} w(x, y)\left[\frac{\partial I}{\partial x}(x, y) u+\frac{\partial I}{\partial y}(x, y) v\right]^{2} \qquad \text { (消除重复项) }\\ &=\sum_{x, y} w(x, y)\left(u^{2} f_{x}^{2}(x, y)+2 u v f_{x}(x, y) f_{y}(x, y)+v^{2} f_{y}^{2}(x, y)\right)\text { }\\ &\begin{array}{l} =\sum_{x, y} w(x, y)\left(u^{2} I_{x}^{2}+2 u v I_{x} I_{y}+v^{2} I_{y}^{2}\right)\qquad \text { (简化) } \\ =\left[\begin{array}{ll} u & v \end{array}\right]\left(\sum w(x, y)\left[\begin{array}{cc} I_{x}^{2} & I_{x} I_{y} \\ I_{x} I_{y} & I_{y}^{2} \end{array}\right]\right)\left[\begin{array}{l} u \\ v \end{array}\right] \\ =\left[\begin{array}{l} u \\ v \end{array}\right]^{T} H\left[\begin{array}{l} u \\ v \end{array}\right] \end{array} \end{aligned}
E(u,v)=(x,y)∑w(x,y)[I(x+u,y+v)−I(x,y)]2≈(x,y)∑w(x,y)[I(x,y)+∂x∂I(x,y)u+∂y∂I(x,y)v−I(x,y)]2 (一阶泰勒展开) ≈(x,y)∑w(x,y)[∂x∂I(x,y)u+∂y∂I(x,y)v]2 (消除重复项) =x,y∑w(x,y)(u2fx2(x,y)+2uvfx(x,y)fy(x,y)+v2fy2(x,y)) =∑x,yw(x,y)(u2Ix2+2uvIxIy+v2Iy2) (简化) =[uv](∑w(x,y)[Ix2IxIyIxIyIy2])[uv]=[uv]TH[uv]
可以看到,E的变化主要与H的大小相关。所以只需要分析H的变化就可以得到E的变化趋势。
图像梯度: Δ I ( x , y ) = ( ∂ I ∂ x ( x , y ) , ∂ I ∂ y ( x , y ) ) \Delta I(x, y)=\left(\frac{\partial I}{\partial x}(x, y), \frac{\partial I}{\partial y}(x, y)\right) ΔI(x,y)=(∂x∂I(x,y),∂y∂I(x,y))
Harris矩阵: H = [ ∑ ( x , y ) w ( x , y ) ( ∂ I ∂ x ( x , y ) ) 2 ∑ ( x , y ) w ( x , y ) ( ∂ I ∂ x ( x , y ) ) ∂ I ∂ y ( x , y ) ) ∑ ( x , y ) w ( x , y ) ( ∂ I ∂ x ( x , y ) ) ∂ I ∂ y ( x , y ) ) ∑ ( x , y ) w ( x , y ) ( ∂ I ∂ y ( x , y ) ) 2 ] H=\left[\begin{array}{cc}\sum_{(x, y)} w(x, y)\left(\frac{\partial I}{\partial x}(x, y)\right)^{2} & \left.\sum_{(x, y)} w(x, y)\left(\frac{\partial I}{\partial x}(x, y)\right) \frac{\partial I}{\partial y}(x, y)\right) \\ \left.\sum_{(x, y)} w(x, y)\left(\frac{\partial I}{\partial x}(x, y)\right) \frac{\partial I}{\partial y}(x, y)\right) & \sum_{(x, y)} w(x, y)\left(\frac{\partial I}{\partial y}(x, y)\right)^{2}\end{array}\right] H=⎣⎡∑(x,y)w(x,y)(∂x∂I(x,y))2∑(x,y)w(x,y)(∂x∂I(x,y))∂y∂I(x,y))∑(x,y)w(x,y)(∂x∂I(x,y))∂y∂I(x,y))∑(x,y)w(x,y)(∂y∂I(x,y))2⎦⎤
w:表示权重,可以是0/1, 也可以是以点为中心的高斯权重。
图像的水平梯度与垂直梯度: I x = ∂ I ( x + u , y + v ) ∂ x I y = ∂ I ( x + u , y + v ) ∂ y I_{x}=\frac{\partial I(x+u, y+v)}{\partial x} \quad I_{y}=\frac{\partial I(x+u, y+v)}{\partial y} Ix=∂x∂I(x+u,y+v)Iy=∂y∂I(x+u,y+v)
Harris矩阵的特征值分析
对于图像:
- 平坦区域:梯度方向各异,但是梯度幅值变化不大
- 线性边缘:梯度幅值改变较大,梯度方向改变不大
- 角点:梯度方向和梯度幅值变化都较大
H \mathbf{H} H就是Harris矩阵。对其进行奇异值分解,两个特征值分别反映互相垂直方向上的梯度变化情况,分别代表最快和最慢的方向。特征值大的变化快,特征值小的变化慢。
进行特征值分解: S V D ( H ) = U ∑ V , ( λ 1 , λ 2 ) , λ 1 > λ 2 S V D(H)=U \sum V,\left(\lambda_{1}, \lambda_{2}\right), \quad \lambda_{1}>\lambda_{2} SVD(H)=U∑V,(λ1,λ2),λ1>λ2
那么就有:
- 特征值都比较大,则窗口中含有角点。
- 特征值一个比较大,一个比较小,则窗口中含有边缘线。
- 特征值都比较小,则处在平坦区域。
Harris角点准则
det H = λ 1 λ 2 \operatorname{det} H=\lambda_{1} \lambda_{2} detH=λ1λ2
trace H = λ 1 + λ 2 \operatorname{trace} H=\lambda_{1}+\lambda_{2} traceH=λ1+λ2
所以某点的响应函数:
R = det ( H ) − ktrace ( H ) 2 = λ 1 λ 2 − k ( λ 1 + λ 2 ) 2 , k = 0.04 R=\operatorname{det}(H)-\operatorname{ktrace}(H)^{2}=\lambda_{1} \lambda_{2}-k\left(\lambda_{1}+\lambda_{2}\right)^{2}, k=0.04 R=det(H)−ktrace(H)2=λ1λ2−k(λ1+λ2)2,k=0.04
利用C与阈值比较判断,来判断其是否是角点。
- R < 0 R<0 R<0 边缘点
- R ≈ 0 R \approx 0 R≈0 平坦点
- R > 0 R > 0 R>0 角点
Shi-Tomasi 角点检测
在Harris角点检测的基础上,Shi和Tomasi 在1993的一篇论文《Good Features to track》中提出了基于Harris角点检测的Shi-Tomasi方法。
Harris角点检测的稳定性与k值有关,而k是个经验值。不好设定。
在此基础上,Shi与Tomasi发现,焦点的稳定性与矩阵的较小的特征值有关,直接使用较小的特征值作为分数。
所以:
R
=
min
(
λ
1
,
λ
2
)
R=\min \left(\lambda_{1}, \lambda_{2}\right)
R=min(λ1,λ2)