本文详细介绍 图像增强中的几种典型方法,包括平滑滤波、锐化滤波(、边缘增强。
1. 平滑滤波(低通滤波)
原理
平滑滤波的主要目的是 去除图像中的噪声,尤其是高频噪声。低通滤波允许低频信息(背景、缓慢变化的区域)通过,而抑制高频信息(边缘、细节、噪声)。
常见方法:
- 均值滤波(Mean Filter)
- 中值滤波(Median Filter)
(1) 均值滤波
原理:用邻域内像素的 平均值 来替换中心像素。
数学公式:
对于图像 f ( x , y ) f(x,y) f(x,y),在以 ( x , y ) (x,y) (x,y) 为中心的 m × n m \times n m×n 窗口 W W W 内:
g ( x , y ) = 1 m n ∑ ( s , t ) ∈ W f ( s , t ) g(x,y) = \frac{1}{mn} \sum_{(s,t) \in W} f(s,t) g(x,y)=mn1(s,t)∈W∑f(s,t)
其中 g ( x , y ) g(x,y) g(x,y) 为滤波后的像素值。
例子:
3×3 均值滤波核:
1 9 [ 1 1 1 1 1 1 1 1 1 ] \frac{1}{9} \begin{bmatrix} 1 & 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 1 \end{bmatrix} 91 111111111
(2) 中值滤波
原理:将邻域像素值按大小排序,取中间值作为输出。
适合去除“椒盐噪声”(salt-and-pepper noise)。
公式表示:
g ( x , y ) = median { f ( s , t ) ∣ ( s , t ) ∈ W } g(x,y) = \text{median}\{ f(s,t) \mid (s,t) \in W\} g(x,y)=median{f(s,t)∣(s,t)∈W}
例子:
邻域像素: { 10 , 10 , 12 , 12 , 255 , 12 , 11 , 13 , 12 } \{10, 10, 12, 12, 255, 12, 11, 13, 12\} {10,10,12,12,255,12,11,13,12},中值 = 12。
2. 锐化滤波(高通滤波)
原理
锐化的目的是 突出边缘和细节,即增强图像中的高频分量。常见方法包括梯度算子(一阶导数)和拉普拉斯算子(二阶导数)。
(1) 梯度算子
原理:利用一阶导数(差分近似)计算灰度变化率。边缘处灰度变化最大。
公式:
水平方向梯度:
G x = f ( x + 1 , y ) − f ( x , y ) G_x = f(x+1,y) - f(x,y) Gx=f(x+1,y)−f(x,y)
垂直方向梯度:
G y = f ( x , y + 1 ) − f ( x , y ) G_y = f(x,y+1) - f(x,y) Gy=f(x,y+1)−f(x,y)
梯度幅值:
G = G x 2 + G y 2 或 G ≈ ∣ G x ∣ + ∣ G y ∣ G = \sqrt{G_x^2 + G_y^2} \quad \text{或} \quad G \approx |G_x| + |G_y| G=Gx2+Gy2或G≈∣Gx∣+∣Gy∣
(2) 拉普拉斯算子
原理:利用二阶导数,响应于灰度急剧变化的地方。
公式:
∇ 2 f = ∂ 2 f ∂ x 2 + ∂ 2 f ∂ y 2 \nabla^2 f = \frac{\partial^2 f}{\partial x^2} + \frac{\partial^2 f}{\partial y^2} ∇2f=∂x2∂2f+∂y2∂2f
常用离散模板:
[ 0 − 1 0 − 1 4 − 1 0 − 1 0 ] 或 [ − 1 − 1 − 1 − 1 8 − 1 − 1 − 1 − 1 ] \begin{bmatrix} 0 & -1 & 0 \\ -1 & 4 & -1 \\ 0 & -1 & 0 \end{bmatrix} \quad \text{或} \quad \begin{bmatrix} -1 & -1 & -1 \\ -1 & 8 & -1 \\ -1 & -1 & -1 \end{bmatrix} 0−10−14−10−10 或 −1−1−1−18−1−1−1−1
锐化后图像可表示为:
g ( x , y ) = f ( x , y ) − ∇ 2 f ( x , y ) g(x,y) = f(x,y) - \nabla^2 f(x,y) g(x,y)=f(x,y)−∇2f(x,y)
3. 边缘增强方法
(1) Sobel 算子
原理:基于梯度,结合平滑和微分,抑制噪声。
模板:
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}, \quad G_y = \begin{bmatrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1 \end{bmatrix} Gx= −1−2−1000121 ,Gy= −101−202−101
计算梯度幅值:
G = G x 2 + G y 2 G = \sqrt{G_x^2 + G_y^2} G=Gx2+Gy2
(2) Prewitt 算子
原理:与 Sobel 类似,但权重不同,计算更简单。
模板:
G x = [ − 1 0 1 − 1 0 1 − 1 0 1 ] , G y = [ − 1 − 1 − 1 0 0 0 1 1 1 ] G_x = \begin{bmatrix} -1 & 0 & 1 \\ -1 & 0 & 1 \\ -1 & 0 & 1 \end{bmatrix}, \quad G_y = \begin{bmatrix} -1 & -1 & -1 \\ 0 & 0 & 0 \\ 1 & 1 & 1 \end{bmatrix} Gx= −1−1−1000111 ,Gy= −101−101−101
(3) Canny 算子
原理:最经典的边缘检测方法,分 4 步:
高斯滤波:去噪声。
G ( x , y ) = 1 2 π σ 2 e − x 2 + y 2 2 σ 2 G(x,y) = \frac{1}{2\pi\sigma^2} e^{-\frac{x^2+y^2}{2\sigma^2}} G(x,y)=2πσ21e−2σ2x2+y2
计算梯度幅值和方向(如 Sobel)。
非极大值抑制(NMS):只保留局部最大值。
双阈值检测和连接:用高阈值确定强边缘,用低阈值扩展弱边缘。
4. 代码
避免文章太长,分了一篇出来,看这里~:
图像增强方法
5. 小结
方法 | 性质 | 数学工具 | 典型应用 |
---|---|---|---|
均值滤波 | 低通,模糊细节 | 平均运算 | 去随机噪声 |
中值滤波 | 非线性滤波 | 中值统计 | 去椒盐噪声 |
梯度算子 | 一阶导数,高通 | 差分 | 边缘检测 |
拉普拉斯算子 | 二阶导数,高通 | 拉普拉斯算子 | 图像锐化 |
Sobel | 梯度 + 平滑 | 卷积核 | 边缘检测 |
Prewitt | 简单梯度算子 | 卷积核 | 边缘检测 |
Canny | 最优边缘检测 | 高斯 + 梯度 + NMS + 双阈值 | 边缘提取 |