往期文章回顾:
计算机视觉入门之<零>
计算机视觉入门之图像处理<一>:图像处理基础概念
计算机视觉入门之图像处理<二>:图像处理基础概念
计算机视觉入门之图像处理<三>:图像插值方法
计算机视觉入门之图像处理<四>:图像直方图均衡化
计算机视觉入门之图像处理<五>:图像平滑处理
前言
前一篇文章计算机视觉入门之图像处理<五>:图像平滑处理介绍了图像平滑滤波的原理和基本方法,平滑的主要作用是对图像进行降噪处理和模糊处理。在平滑后的图像降低了图像灰度的尖锐变化,而本篇文章主要介绍如何突出灰度的尖锐变化部分,即对图像进行锐化处理,如突出图像的边缘、轮廓。图像的平滑可以通过邻域像素点的像素值平均得到,这种邻域像素的加和求解与积分处理类似,与积分相反的是微分,因此逻辑上对图像进行微分处理可以达到锐化的效果,下面将讨论各种微分算子和实现锐化的方法。
微分基础
对于一元可微函数
f
(
x
)
f(x)
f(x)而言,一阶微分定义为:
f
′
(
x
)
=
d
f
(
x
)
d
x
=
lim
Δ
x
→
0
Δ
y
Δ
x
f'(x) = \frac{df(x)}{dx} =\lim_{\Delta x \to 0} \frac{\Delta y}{\Delta x}
f′(x)=dxdf(x)=Δx→0limΔxΔy
f
′
(
x
)
=
lim
Δ
x
→
0
f
(
x
+
Δ
x
)
−
f
(
x
)
Δ
x
(1)
f'(x) =\lim_{\Delta x \to 0} \frac{f(x+\Delta x )-f(x)}{\Delta x}\tag{1}
f′(x)=Δx→0limΔxf(x+Δx)−f(x)(1)
二阶微分定义为:
f
′
′
(
x
)
=
lim
Δ
x
→
0
f
′
(
x
+
Δ
x
)
−
f
′
(
x
)
Δ
x
(2)
f^{''}(x)=\lim_{\Delta x \to 0} \frac{f^{'}(x+\Delta x )-f^{'}(x)}{\Delta x}\tag{2}
f′′(x)=Δx→0limΔxf′(x+Δx)−f′(x)(2)
f
′
(
x
+
Δ
x
)
=
lim
Δ
x
→
0
f
(
x
+
Δ
x
)
−
f
(
x
+
Δ
x
−
Δ
x
)
Δ
x
(3)
f^{'}(x+\Delta x)= \lim_{\Delta x \to 0} {\frac{{f(x+\Delta x)}-{f(x+\Delta x-\Delta x)}}{\Delta x}}\tag{3}
f′(x+Δx)=Δx→0limΔxf(x+Δx)−f(x+Δx−Δx)(3) 将式(1)改写为:
f
′
(
x
)
=
lim
Δ
x
→
0
f
(
x
)
−
f
(
x
−
Δ
x
)
Δ
x
(4)
f'(x) =\lim_{\Delta x \to 0} \frac{f(x )-f(x-\Delta x)}{\Delta x}\tag{4}
f′(x)=Δx→0limΔxf(x)−f(x−Δx)(4)再将式(4)和式(3)代入式(2)可得:
f
′
′
(
x
)
=
lim
Δ
x
→
0
f
(
x
+
Δ
x
)
+
f
(
x
−
Δ
x
)
+
2
f
(
x
)
Δ
x
2
(5)
f^{''}(x)=\lim_{\Delta x \to 0} \frac{f(x+\Delta x)+f(x-\Delta x)+2f(x)}{{\Delta x}^2}\tag{5}
f′′(x)=Δx→0limΔx2f(x+Δx)+f(x−Δx)+2f(x)(5)微分必须满足以下定义:一阶微分在恒定灰度区域内微分值为零,在台阶或斜坡微分非零;类似二阶微分在恒定灰度区域内微分值为零,在灰度台阶或斜坡的起点和终点处微分非零。在数字图像中最短距离为相邻像素间距离,所以为
Δ
x
\Delta x
Δx取1,则在连续函数中的
Δ
x
→
0
\Delta x \to 0
Δx→0需要改写为
Δ
x
→
1
\Delta x \to 1
Δx→1,则(1)式可写为:
f
′
(
x
)
=
d
f
(
x
)
d
x
=
f
(
x
+
1
)
−
f
(
x
)
(6)
f'(x) = \frac{df(x)}{dx} = {f(x+1 )-f(x)}\tag{6}
f′(x)=dxdf(x)=f(x+1)−f(x)(6)
同理,二阶微分可表示为:
f
′
′
(
x
)
=
d
2
f
(
x
)
d
x
2
=
f
(
x
+
1
)
+
f
(
x
−
1
)
−
2
f
(
x
)
(7)
f''(x) = \frac{d^2f(x)}{dx^2} = {f(x+1 )+f(x-1)-2f(x)}\tag{7}
f′′(x)=dx2d2f(x)=f(x+1)+f(x−1)−2f(x)(7)
上图表示的是在灰度恒定区域、灰度斜坡变化区域和灰度台阶变化区域对灰度值的一阶和二阶微分。由上图可知,在灰度恒定区域灰度的一阶微分为零,斜坡上一阶微分为常数;在灰度恒定区域灰度的二阶微分为零,斜坡上二阶微分为零;在斜坡和台阶的起点和终点处灰度值二阶微分不为零。由图还可以知道,在灰度斜坡或台阶变化前后二阶微分的符号有变化,进一步还可以看出,在灰度台阶变化时,二阶微分值的连线与水平轴相交,称为零交叉。
如上图所示,,最左边图为原图,中间图为图像一阶微分后的效果图,右图为二阶微分后的效果图。沿着灰度值斜坡过渡的一阶微分不为零,因此存在一个很粗的边缘,在台阶灰度值变化处一阶微分不为零;而二阶微分在灰度斜坡变化时产生两条边界,一正一负,在台阶灰度变化处产生双边缘(比一阶微分处的边缘亮)。因此无论是斜坡边缘还是台阶边缘,二阶微分都比一阶微分好得多。
一阶微分锐化
图像在
x
x
x方向和
y
y
y方向的一阶微分用梯度来表示,对于像素
f
(
x
,
y
)
f(x, y)
f(x,y)在
(
x
,
y
)
(x, y)
(x,y)处的梯度可以表示为:
∇
f
=
g
r
a
d
(
f
)
=
[
g
x
g
y
]
=
[
∂
f
(
x
,
y
)
∂
x
∂
f
(
x
,
y
)
∂
y
]
(8)
\nabla f =grad(f )= \begin{bmatrix}g_x \\ g_y\end{bmatrix}=\begin{bmatrix}\frac{\partial f(x, y)}{\partial x} \\ \frac{\partial f(x, y)}{\partial y}\end{bmatrix}\tag{8}
∇f=grad(f)=[gxgy]=[∂x∂f(x,y)∂y∂f(x,y)](8) 结合式(6)可以将式(8)表示为:
∇
f
(
x
,
y
)
=
[
g
x
g
y
]
=
[
f
(
x
+
1
,
y
)
−
f
(
x
,
y
)
f
(
x
,
y
+
1
)
−
f
(
x
,
y
)
]
(9)
\nabla f(x, y) = \begin{bmatrix}g_x \\ g_y\end{bmatrix}=\begin{bmatrix}{f(x+1, y)-f(x, y)} \\ {f(x, y+1)-f(x, y)}\end{bmatrix}\tag{9}
∇f(x,y)=[gxgy]=[f(x+1,y)−f(x,y)f(x,y+1)−f(x,y)](9)
[
f
(
x
+
1
,
y
)
−
f
(
x
,
y
)
]
=
[
−
1
1
]
[
f
(
x
,
y
)
f
(
x
+
1
,
y
)
]
\begin{bmatrix}{f(x+1, y)-f(x, y)}\end{bmatrix}=\begin{bmatrix}-1& 1\end{bmatrix}\begin{bmatrix}f(x, y)\\ f(x+1, y)\end{bmatrix}
[f(x+1,y)−f(x,y)]=[−11][f(x,y)f(x+1,y)]
[
f
(
x
,
y
+
1
)
−
f
(
x
,
y
)
]
=
[
f
(
x
,
y
)
f
(
x
,
y
+
1
)
]
[
−
1
1
]
\begin{bmatrix}{f(x, y+1)-f(x, y)}\end{bmatrix}=\begin{bmatrix}f(x, y)&f(x, y+1)\end{bmatrix}\begin{bmatrix}-1\\1\end{bmatrix}
[f(x,y+1)−f(x,y)]=[f(x,y)f(x,y+1)][−11]其中
[
−
1
1
]
\begin{bmatrix}-1& 1 \end{bmatrix}
[−11]
[
−
1
1
]
\begin{bmatrix}-1\\ 1 \end{bmatrix}
[−11]称为梯度算子(一维模板)。
如下表示的时
3
∗
3
3*3
3∗3的邻域像素矩阵:
[
f
1
f
2
f
3
f
4
f
5
f
6
f
7
f
8
f
9
]
\begin{bmatrix}f_1 & f_2 & f_3 \\ f_4 & f_5 & f_6\\f_7 & f_8 & f_9 \end{bmatrix}
⎣⎡f1f4f7f2f5f8f3f6f9⎦⎤将一维模板中的梯度算子扩展到
3
∗
3
3*3
3∗3的模板上,梯度运算可以表示为:
g
x
=
(
f
9
+
f
8
+
f
7
)
−
(
f
1
+
f
2
+
f
3
)
g_x=(f_9+f_8+f_7)-(f_1+f_2+f_3)
gx=(f9+f8+f7)−(f1+f2+f3)
g
y
=
(
f
3
+
f
6
+
f
9
)
−
(
f
1
+
f
4
+
f
7
)
(10)
g_y=(f_3+f_6+f_9)-(f_1+f_4+f_7)\tag{10}
gy=(f3+f6+f9)−(f1+f4+f7)(10) 则对应的模板为:
[
−
1
−
1
−
1
0
0
0
1
1
1
]
\begin{bmatrix}-1 & -1 & -1 \\0 & 0 & 0\\1 & 1 & 1 \end{bmatrix}
⎣⎡−101−101−101⎦⎤
[
−
1
0
1
−
1
0
1
−
1
0
1
]
\begin{bmatrix}-1 & 0 & 1 \\-1 & 0 &1\\-1 & 0 & 1 \end{bmatrix}
⎣⎡−1−1−1000111⎦⎤ 这两个模板称为Prewitt算子
利用Prewitt算子检测,效果如下图所示:
当式(10)中的中心系数变为2时:
g
x
=
(
f
9
+
2
f
8
+
f
7
)
−
(
f
1
+
2
f
2
+
f
3
)
g_x=(f_9+2f_8+f_7)-(f_1+2f_2+f_3)
gx=(f9+2f8+f7)−(f1+2f2+f3)
g
y
=
(
f
3
+
2
f
6
+
f
9
)
−
(
f
1
+
2
f
4
+
f
7
)
g_y=(f_3+2f_6+f_9)-(f_1+2f_4+f_7)
gy=(f3+2f6+f9)−(f1+2f4+f7) 则对应的模板为:
[
−
1
−
2
−
1
0
0
0
1
2
1
]
\begin{bmatrix}-1 & -2 & -1 \\0 & 0 & 0\\1 & 2 & 1 \end{bmatrix}
⎣⎡−101−202−101⎦⎤
[
−
1
0
1
−
2
0
2
−
1
0
1
]
\begin{bmatrix}-1 & 0 & 1 \\-2 & 0 &2\\-1 & 0 & 1 \end{bmatrix}
⎣⎡−1−2−1000121⎦⎤ 这两个模板称为Sobel算子,可以经过证明得出由于中心系数变为2可以较好地实现图像的平滑,因此Sobel算子可以较好地抑制噪声。
利用Sobel算子检测,效果如下图所示:
类似地,当我们需要对图像的对角线方向的边缘进行锐化时,需要采用二维模板在对角线方向进行梯度运算,对角线方向梯度可以表示为:
g
x
=
f
9
−
f
5
g_x=f_9-f_5
gx=f9−f5 ,
g
y
=
f
8
−
f
6
g_y=f_8-f_6
gy=f8−f6,则对应的二维模板为:
[
−
1
0
0
1
]
\begin{bmatrix}-1& 0\\ 0&1 \end{bmatrix}
[−1001]
[
0
−
1
1
0
]
\begin{bmatrix}0& -1\\ 1&0 \end{bmatrix}
[01−10]上述用于计算对角线方向的二维模板称为Roberts算子
同样当我们需要在
3
∗
3
3*3
3∗3的模板上突出对角线的边缘时,可以改变Sobel算子和Prewitt算子对角线上的系数即可实现(以Sobel算子为例):
[
0
−
1
−
2
1
0
−
1
2
1
0
]
\begin{bmatrix}0 & -1 &-2 \\1 & 0 &-1\\2 & 1 & 0 \end{bmatrix}
⎣⎡012−101−2−10⎦⎤以上讨论的是图像每个像素点处的梯度
g
x
g_x
gx和
g
y
g_y
gy, 在计算梯度幅度时,可以采用
M
(
x
,
y
)
=
∣
g
x
∣
+
∣
g
y
∣
M(x, y)=\lvert g_x \rvert + \lvert g_y \rvert
M(x,y)=∣gx∣+∣gy∣对梯度幅值进行近似计算,进而得到梯度图像。
二阶微分锐化
图像在
x
x
x方向和
y
y
y方向的二阶微分用拉普拉斯算子来表示:
∇
2
f
=
∂
2
f
∂
x
2
+
∂
2
f
∂
y
2
(11)
\nabla^2f=\frac{\partial^2f}{\partial x^2}+ \frac{\partial^2f}{\partial y^2}\tag{11}
∇2f=∂x2∂2f+∂y2∂2f(11)由式(7)代入式(11)可得:
∂
2
f
∂
x
2
=
f
(
x
+
1
,
y
)
+
f
(
x
−
1
,
y
)
−
2
f
(
x
,
y
)
\frac{\partial^2f}{\partial x^2}=f(x+1, y)+f(x-1, y)-2f(x, y)
∂x2∂2f=f(x+1,y)+f(x−1,y)−2f(x,y)
∂
2
f
∂
y
2
=
f
(
x
,
y
+
1
)
+
f
(
x
,
y
−
1
)
−
2
f
(
x
,
y
)
\frac{\partial^2f}{\partial y^2}=f(x, y+1)+f(x, y-1)-2f(x, y)
∂y2∂2f=f(x,y+1)+f(x,y−1)−2f(x,y)所以拉普拉斯算子可以表示为:
∇
2
f
=
f
(
x
+
1
,
y
)
+
f
(
x
−
1
,
y
)
+
f
(
x
,
y
+
1
)
+
f
(
x
,
y
−
1
)
−
4
f
(
x
,
y
)
(12)
\nabla^2f =f(x+1, y)+f(x-1, y)+f(x, y+1)+f(x, y-1)-4f(x, y)\tag{12}
∇2f=f(x+1,y)+f(x−1,y)+f(x,y+1)+f(x,y−1)−4f(x,y)(12)即:
∇
2
f
=
[
f
(
x
−
1
,
y
−
1
)
f
(
x
−
1
,
y
)
f
(
x
−
1
,
y
+
1
)
f
(
x
,
y
−
1
)
f
(
x
,
y
)
f
(
x
,
y
+
1
)
f
(
x
+
1
,
y
−
1
)
f
(
x
+
1
,
y
)
f
(
x
+
1
,
y
+
1
)
]
⋅
[
0
1
0
1
−
4
1
0
1
0
]
\nabla^2f = \begin{bmatrix}f(x-1, y-1) & f(x-1, y)& f(x-1, y+1) \\ f(x, y-1) & f(x, y) & f(x, y+1)\\f(x+1, y-1)& f(x+1, y) & f(x+1, y+1) \end{bmatrix}\cdot \begin{bmatrix}0 &1 &0 \\ 1 & -4 & 1\\0 & 1 &0 \end{bmatrix}
∇2f=⎣⎡f(x−1,y−1)f(x,y−1)f(x+1,y−1)f(x−1,y)f(x,y)f(x+1,y)f(x−1,y+1)f(x,y+1)f(x+1,y+1)⎦⎤⋅⎣⎡0101−41010⎦⎤上式中右边的矩阵就称为拉普拉斯算子模板。
上述拉普拉斯算子模板在进行像素计算时,只考虑了邻域像素矩阵竖直方向和水平方向的像素,没有考虑对角线方向的像素,若想计算对角线方向像素的二阶微分的话,可行的方法就是将邻域像素矩阵以中心点为中心,逆时针旋转
45
°
45°
45°,则对角线像素旋转至水平或竖直方向,旋转之后邻域像素矩阵为:
[
f
(
x
−
1
,
y
)
f
(
x
−
1
,
y
+
1
)
f
(
x
,
y
+
1
)
f
(
x
−
1
,
y
−
1
)
f
(
x
,
y
)
f
(
x
+
1
,
y
+
1
)
f
(
x
,
y
−
1
)
f
(
x
+
1
,
y
−
1
)
f
(
x
+
1
,
y
)
]
\begin{bmatrix}f(x-1, y) & f(x-1, y+1)& f(x, y+1) \\ f(x-1, y-1) & f(x, y) & f(x+1, y+1)\\f(x, y-1)& f(x+1, y-1) & f(x+1, y) \end{bmatrix}
⎣⎡f(x−1,y)f(x−1,y−1)f(x,y−1)f(x−1,y+1)f(x,y)f(x+1,y−1)f(x,y+1)f(x+1,y+1)f(x+1,y)⎦⎤同理关于旋转之后邻域像素矩阵的拉普拉斯算子由式(12)可以表示为:
∇
2
f
=
f
(
x
−
1
,
y
+
1
)
+
f
(
x
−
1
,
y
−
1
)
+
f
(
x
+
1
,
y
+
1
)
+
f
(
x
+
1
,
y
−
1
)
−
4
f
(
x
,
y
)
\nabla^2f =f(x-1, y+1)+f(x-1, y-1)+f(x+1, y+1)+f(x+1, y-1)-4f(x, y)
∇2f=f(x−1,y+1)+f(x−1,y−1)+f(x+1,y+1)+f(x+1,y−1)−4f(x,y)
邻域像素在水平、竖直和对角线方向的拉普拉斯算子可表示为:
∇
2
f
=
f
(
x
−
1
,
y
−
1
)
+
f
(
x
−
1
,
y
)
+
f
(
x
−
1
,
y
+
1
)
+
f
(
x
,
y
−
1
)
+
f
(
x
,
y
+
1
)
+
f
(
x
+
1
,
y
−
1
)
+
f
(
x
+
1
,
y
)
+
f
(
x
+
1
,
y
+
1
)
−
8
f
(
x
,
y
)
\nabla^2f = f(x-1, y-1)+f(x-1, y)+f(x-1, y+1)+f(x, y-1)+f(x, y+1)+f(x+1, y-1)+f(x+1, y)+f(x+1, y+1)-8f(x, y)
∇2f=f(x−1,y−1)+f(x−1,y)+f(x−1,y+1)+f(x,y−1)+f(x,y+1)+f(x+1,y−1)+f(x+1,y)+f(x+1,y+1)−8f(x,y) 对应的拉普拉斯模板为:
[
1
1
1
1
−
8
1
1
1
1
]
\begin{bmatrix}1 &1 &1 \\ 1 & -8 & 1\\1 & 1 &1 \end{bmatrix}
⎣⎡1111−81111⎦⎤
常见的拉普拉斯模板如下图所示:
因为拉普拉斯算子强调图像中灰度的突变及衰减灰度慢变化区域的灰度,这将产生一幅把图像中的浅灰色边线和突变点叠加到暗背景中的图像。原始图像和拉普拉斯图像的叠加可以保护锐化处理的效果,同时又能复原背景信息。针对不同的拉普拉斯模板有不同的叠加方法: g ( x , y ) = f ( x , y ) + c ∇ 2 f ( x , y ) g(x, y) =f(x, y)+c\nabla^2f(x, y) g(x,y)=f(x,y)+c∇2f(x,y)当变换模板中心系数为负时, c c c=-1;当变换模板中心系数为正时, c c c=1;
图像锐化效果如上图所示。左图为原始图像,中间的是拉普拉斯图像,右图为锐化后的图像,拉普拉斯变换前后增强了图像中灰度突变处的对比度,使得细节部分得到很好的增强。
[1]数字图像处理:第3版/(美)冈萨雷斯(Gonzalez,R.C),(美)伍兹(Woods, R.E.)著.阮秋琦等译
[2]图像增强—图像锐化
[Until:2021年1月26日18时……]