文章目录
Canny 边缘检测流程
Canny 算子是当今最有的边缘检测算法。
第一步:高斯平滑滤波:消除噪声
一般情况下,使用高斯平滑滤波器进行卷积操作。以下显示了
s
i
z
e
=
5
size = 5
size=5 的高斯内核是示例:
K
=
1
139
[
2
4
5
4
2
4
9
12
9
4
5
12
15
12
5
4
9
12
9
4
2
4
5
4
2
]
K=\frac{1}{139}\begin{bmatrix} 2 & 4 & 5 & 4 & 2\\ 4 & 9 & 12 & 9 & 4\\ 5 & 12 & 15 & 12 & 5\\ 4 & 9 & 12 & 9 & 4\\ 2 & 4 & 5 & 4 & 2 \end{bmatrix}
K=1391⎣⎢⎢⎢⎢⎡245424912945121512549129424542⎦⎥⎥⎥⎥⎤
第二步 :缘增强:计算幅值和方向
此处,按照 Sobel 滤波器的步骤来操作:
1 运用一对卷积阵列(分别作用于 x 和 y 方向)
G
x
=
[
−
1
0
+
1
−
2
0
+
2
−
1
0
+
1
]
G
y
=
[
−
1
−
2
−
1
0
0
0
+
1
+
2
+
1
]
G_x = \begin{bmatrix} -1 & 0 & +1 \\ -2 & 0 & +2 \\ -1 & 0 & +1 \end{bmatrix} G_y = \begin{bmatrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ +1 & +2 & +1 \end{bmatrix}
Gx=⎣⎡−1−2−1000+1+2+1⎦⎤Gy=⎣⎡−10+1−20+2−10+1⎦⎤
2 使用下列公式计算幅值和方向
G
=
G
x
2
+
G
y
2
θ
=
a
r
c
t
a
n
(
G
x
G
y
)
G = \sqrt{G_x^2 + G_y^2} \\ \theta = arctan(\frac{G_x}{G_y})
G=Gx2+Gy2θ=arctan(GyGx)
而梯度方向一般取这
4
4
4 个可能的角度之一:
0
、
45
、
90
、
135
0、45、90、135
0、45、90、135。
第三步:非极大值抑制
这一步排除非边缘检测像素,仅仅保留了一些细线条(候选边缘)
第四步:高低阈值
Canny 使用了滞后阈值,滞后阈值需要两个阈值(高阈值和低阈值):
- 若某一像素位的幅度超高高阈值,该像素确认位边缘像素;
- 若某一像素位的幅度小于低阈值,该像素排除;
- 如某一像素位的幅度介于高阈值和低阈值之间,当该像素仅仅与一个边缘像素相连时,则确认位边缘像素;否则,排除。