常见的图像增强方法(包括原理解释和代码示例)——均值滤波、中值滤波、梯度算子、拉普拉斯算子、Sobel算子、Prewitt算子、Canny算子

发布于:2025-08-19 ⋅ 阅读:(19) ⋅ 点赞:(0)

本文详细介绍 图像增强中的几种典型方法,包括平滑滤波锐化滤波(边缘增强


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)Wf(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 GGx+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=x22f+y22f

常用离散模板:

[ 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} 010141010 111181111

锐化后图像可表示为:

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= 121000121 ,Gy= 101202101

计算梯度幅值:

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= 111000111 ,Gy= 101101101


(3) Canny 算子

原理:最经典的边缘检测方法,分 4 步:

  1. 高斯滤波:去噪声。

    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πσ21e2σ2x2+y2

  2. 计算梯度幅值和方向(如 Sobel)。

  3. 非极大值抑制(NMS):只保留局部最大值。

  4. 双阈值检测和连接:用高阈值确定强边缘,用低阈值扩展弱边缘。


4. 代码

避免文章太长,分了一篇出来,看这里~:
图像增强方法


5. 小结

方法 性质 数学工具 典型应用
均值滤波 低通,模糊细节 平均运算 去随机噪声
中值滤波 非线性滤波 中值统计 去椒盐噪声
梯度算子 一阶导数,高通 差分 边缘检测
拉普拉斯算子 二阶导数,高通 拉普拉斯算子 图像锐化
Sobel 梯度 + 平滑 卷积核 边缘检测
Prewitt 简单梯度算子 卷积核 边缘检测
Canny 最优边缘检测 高斯 + 梯度 + NMS + 双阈值 边缘提取

网站公告

今日签到

点亮在社区的每一天
去签到