文章目录
Introduction
基本步骤:
- 高斯模糊(Gaussian Smooth):平滑图像,去除噪声(高频信息)
- 梯度检测(Gradient Detection):得到对应图像每个像素的梯度方向矩阵和梯度强度矩阵
- 非最大化抑制(Non-Maximum Suppression):
- 双阈值(Double Threshold):
步骤 Steps
高斯滤波 Gaussian Filtering
首先,生成高斯模板,确定两个参数:
- s c a l e scale scale:高斯模板的维度,通常是奇数( 2 k + 1 2k+1 2k+1),影响平滑程度
- σ \sigma σ:标准差,同样会影响平滑程度
然后根据公式生成模板:
(0)
G
a
u
s
s
i
a
n
i
,
j
=
1
2
π
σ
2
e
u
2
+
v
2
2
σ
2
Gaussian_{i,j} = \frac{1}{2\pi\sigma^{2}}e^{\frac{u^{2} + v^{2}}{2\sigma^{2}}} \tag{0}
Gaussiani,j=2πσ21e2σ2u2+v2(0)
其中,
u
=
i
−
s
c
a
l
e
/
2
u = i-scale/2
u=i−scale/2,
v
=
j
−
s
c
a
l
e
/
2
v = j - scale/2
v=j−scale/2
归一化(normalization):
(1)
G
a
u
s
s
i
a
n
i
,
j
=
G
a
u
s
s
i
a
n
i
,
j
s
u
m
Gaussian_{i,j} = \frac{Gaussian_{i,j}}{sum} \tag{1}
Gaussiani,j=sumGaussiani,j(1)
其中,
s
u
m
sum
sum 为
∑
i
,
j
s
c
a
l
e
G
a
u
s
s
i
a
n
i
,
j
\sum_{i,j}^{scale}Gaussian_{i,j}
∑i,jscaleGaussiani,j。
梯度检测 Gradient Detection
使用边缘检测算子对图像进行卷积,计算出每个像素对应位置的梯度幅值(Gradient)以及梯度方向(Gradient Direction)。
首先,水平方向算子卷积得到
d
x
i
,
j
dx_{i,j}
dxi,j :
(0)
s
o
b
e
l
x
=
{
−
1
0
1
−
2
0
2
−
1
0
1
}
sobel_{x}= \left\{ \begin{matrix} & -1 & 0 & 1 & \\ & -2 & 0 & 2 \\ & -1 & 0 & 1 \end{matrix} \right\} \tag{0}
sobelx=⎩⎨⎧−1−2−1000121⎭⎬⎫(0)
垂直方向算子得到
d
y
i
,
j
dy_{i,j}
dyi,j:
(1)
s
o
b
e
l
y
=
{
1
2
1
0
0
0
−
1
−
2
−
1
}
sobel_{y}= \left\{ \begin{matrix} & 1 & 2 & 1 & \\ & 0 & 0 & 0 \\ & -1 & -2 & -1 \end{matrix} \right\} \tag{1}
sobely=⎩⎨⎧10−120−210−1⎭⎬⎫(1)
然后,计算梯度幅值:
(2)
w
e
i
g
h
t
i
,
j
=
d
x
i
,
j
2
+
d
y
i
,
j
2
weight_{i,j} = \sqrt{dx_{i,j}^{2} + dy_{i,j}^{2}} \tag{2}
weighti,j=dxi,j2+dyi,j2(2)
计算梯度方向:
(3)
g
r
a
d
i
e
n
t
i
,
j
=
d
x
i
,
j
d
y
i
,
j
gradient_{i,j} = \frac{dx_{i,j}}{dy_{i,j}} \tag{3}
gradienti,j=dyi,jdxi,j(3)
最终得到两个矩阵:
- 梯度幅值矩阵 W W W
- 梯度方向矩阵 G G G
非最大化抑制 Non-Maximum Suppression
判定规则 Rule
确定一个点是否为边缘点,需要确定:这个点的梯度幅值在梯度方向上是不是最大的。
通过和梯度正负方向上的两个点的梯度幅值进行比较做出判断:
- 梯度方向上最大:保留
- 否则:抑制
确定梯度方向上两点 Determine Neighbours
8
8
8 邻域中的像素构成
4
4
4 对点,对应
4
4
4 个基本梯度方向,如下:
确定梯度方向上临近两点:
- 取最靠近梯度方向的基本方向的两个点,例如上图 W W W 和 E E E
- 构成梯度方向所在区域的两个基本方向,根据梯度方向(上图 θ \theta θ )计算出比值进行插值(interpolation),如上图, N E NE NE 和 E E E 插值得到 P 1 P1 P1, W W W 和 S W SW SW 得到 P 2 P2 P2
双阈值 Double Threshold
判断方式如下:
- i f w e i g h t > r o o f if\space weight \gt roof if weight>roof:这个像素是一个边缘像素
- i f w e i g h t < f l o o r if\space weight \lt floor if weight<floor:这个像素不属于任何边缘
如果处于高阈值和低阈值的中间的话,那么:
- 如果 8 8 8 领域中含有边缘点的话,那么我们认为这个点也是一个边缘点
- 如果没有,那么这是一个孤立点,我们不认为这是一个边缘点
F i n \mathscr{Fin} Fin