基本边缘检测-图像求导
为了寻找边缘,可用一阶导数或二阶导数来检测边缘。
图像中的导数是图像的重要特征之一。其中一阶导数通常用于图像边缘检测,二阶导数的符号可以确定边缘的过渡是从亮到暗还是从暗到亮,在对图像做导数之前最好先进行平滑处理,因为导数操作对噪声敏感。
- 图像的边缘一般存在灰度变化强烈的地方,只有灰度变化的明显我们才可以从图像中清晰的看到没有一个物体的轮廓,要是一个图像灰度变化很均匀的话,整个图像就变得比较模糊。就如把一副图像均值滤波以后,图像变得模糊了。如何表示一个图像的灰度变化,当然是求导了,梯度值越大表示图像中灰度值变化越剧烈,越有可能是图像的边缘。图像求导包括一阶和二阶,二阶导数比一阶导数在细节方面处理的更好一点,但是也各有利弊,如含有噪声的图像就不适合二阶导,因为他会把图像中的噪声增强,所以需要先做平滑处理。
1.二维函数f(x,y)的一阶导数的基本定义是差分:
d
f
(
x
,
y
)
d
x
=
f
(
x
+
1
,
y
)
−
f
(
x
,
y
)
\frac{\mathrm{d}f(x,y)}{\mathrm{d}x} =f(x+1,y)-f(x,y)
dxdf(x,y)=f(x+1,y)−f(x,y)
d
f
(
x
,
y
)
d
y
=
f
(
x
,
y
+
1
)
−
f
(
x
,
y
)
\frac{\mathrm{d}f(x,y)}{\mathrm{d}y} =f(x,y+1)-f(x,y)
dydf(x,y)=f(x,y+1)−f(x,y)
整体图像的一阶导为:
d
f
(
x
,
y
)
d
x
+
d
f
(
x
,
y
)
d
y
=
f
(
x
,
y
+
1
)
+
f
(
x
+
1
,
y
)
−
2
f
(
x
,
y
)
\frac{\mathrm{d}f(x,y)}{\mathrm{d}x}+\frac{\mathrm{d}f(x,y)}{\mathrm{d}y} =f(x,y+1)+f(x+1,y)-2f(x,y)
dxdf(x,y)+dydf(x,y)=f(x,y+1)+f(x+1,y)−2f(x,y)
该公式可以用下图中的核卷积来实现:
2.二维函数f(x,y)的二阶导数的基本定义是差分:
d
2
f
(
x
,
y
)
d
x
2
=
f
(
x
+
1
,
y
)
+
f
(
x
−
1
,
y
)
−
2
f
(
x
,
y
)
\frac{\mathrm{d^{2}}f(x,y)}{\mathrm{d}x^{2}} =f(x+1,y)+f(x-1,y)-2f(x,y)
dx2d2f(x,y)=f(x+1,y)+f(x−1,y)−2f(x,y)
d
2
f
(
x
,
y
)
d
y
2
=
f
(
x
,
y
+
1
)
+
f
(
x
,
y
−
1
)
−
2
f
(
x
,
y
)
\frac{\mathrm{d^{2}}f(x,y)}{\mathrm{d}y^{2}} =f(x,y+1)+f(x,y-1)-2f(x,y)
dy2d2f(x,y)=f(x,y+1)+f(x,y−1)−2f(x,y)
整体图像的二阶导为:
d
2
f
(
x
,
y
)
d
x
2
+
d
2
f
(
x
,
y
)
d
y
2
=
f
(
x
+
1
,
y
)
+
f
(
x
−
1
,
y
)
+
f
(
x
,
y
+
1
)
+
f
(
x
,
y
−
1
)
−
4
f
(
x
,
y
)
\frac{\mathrm{d^{2}}f(x,y)}{\mathrm{d}x^{2}}+\frac{\mathrm{d^{2}}f(x,y)}{\mathrm{d}y^{2}}=f(x+1,y)+f(x-1,y)+f(x,y+1)+f(x,y-1)-4f(x,y)
dx2d2f(x,y)+dy2d2f(x,y)=f(x+1,y)+f(x−1,y)+f(x,y+1)+f(x,y−1)−4f(x,y)
这个公式可以用拉普拉斯核进行卷积来实现:
上述公式的具体推导可参考:图像求导
- 常用的梯度算子,和以上的公式略有不同。
1.罗伯特交叉梯度算子:最早使用具有对角性能的二维核的算子之一。
dx=z9-z5
dy=z8-z6
卷积核:
2x2大小的核在概念上很简单,但在计算边缘方向时,他们不如关心中心对称的核有用,中心对称核的最小尺寸为3x3.这些核考虑了中心点对侧数据的性质,并带有关于边缘方向的更多信息。
2.Prewitt算子
d
x
=
(
z
7
+
z
8
+
z
9
)
−
(
z
1
+
z
2
+
z
3
)
dx=(z7+z8+z9)-(z1+z2+z3)
dx=(z7+z8+z9)−(z1+z2+z3)
d
y
=
(
z
3
+
z
6
+
z
9
)
−
(
z
1
+
z
4
+
z
7
)
dy=(z3+z6+z9)-(z1+z4+z7)
dy=(z3+z6+z9)−(z1+z4+z7)
卷积核:
3.Sobel算子
d
x
=
(
z
7
+
2
z
8
+
z
9
)
−
(
z
1
+
2
z
2
+
z
3
)
dx=(z7+2z8+z9)-(z1+2z2+z3)
dx=(z7+2z8+z9)−(z1+2z2+z3)
d
y
=
(
z
3
+
2
z
6
+
z
9
)
−
(
z
1
+
2
z
4
+
z
7
)
dy=(z3+2z6+z9)-(z1+2z4+z7)
dy=(z3+2z6+z9)−(z1+2z4+z7)
卷积核:
与Sobel核相比,Prewitt核实现起来更加简单,但他们在计算上的差别并不大。Sobel核能更好地抑制平滑噪声,因此应用更加广泛。