所有边缘都极易受到噪声的干扰,为了防止因噪声引起的错误检测,应对图像进行平滑处理滤除噪声,常用的低通滤波器为高斯滤波器,见
c
v
:
:
G
a
u
s
s
i
a
n
B
l
u
r
(
)
cv::GaussianBlur()
cv::GaussianBlur()算子。
2、梯度检测
梯度是图像灰度值变化剧烈的地方,它可以通过梯度检测算子Roberts、Prewitt、Sobel等得到。Canny中用的梯度检测算子为Sobel算子,它由两个模板组成:
G
x
=
[
−
1
0
1
−
2
0
2
−
1
0
1
]
G_x=\begin{bmatrix} -1 & 0&1\\ -2 & 0&2 \\-1&0&1\\ \end{bmatrix}
Gx=−1−2−1000121
G
y
=
[
1
2
1
0
0
0
−
1
−
2
1
]
G_y=\begin{bmatrix} 1 & 2&1\\ 0 & 0&0 \\-1 &-2&1\\ \end{bmatrix}
Gy=10−120−2101 把这两个模板分别与图像进行卷积,得到水平方向的梯度
G
x
G_x
Gx和垂直方向的梯度
G
y
G_y
Gy,最终的梯度幅值
G
G
G由欧几里距离(L2范数)求得:
G
=
G
x
2
+
G
y
2
G=\sqrt{G_x^2+G_y^2}
G=Gx2+Gy2 由于平方和平方根开销较大,为了简化计算,梯度值也可由曼哈顿距离(L1范数)求得:
G
=
∣
G
x
∣
+
∣
G
y
∣
G=|G_x|+|G_y|
G=∣Gx∣+∣Gy∣ 梯度辐角
θ
\theta
θ为:
θ
=
a
r
c
t
a
n
(
∣
G
y
∣
∣
G
x
∣
)
\theta=arctan(\frac {|G_y|}{|G_x|})
θ=arctan(∣Gx∣∣Gy∣)