在数字图像处理过程中,图像的采集、传输和存储往往不可避免地会受到硬件环境或传输信道的干扰,产生所谓的图像噪声。为了提高图像质量,方便后续的特征提取与识别,图像平滑技术成为了预处理阶段的核心步骤。
一、 图像噪声类型
噪声是指存在于图像数据中不必要的干扰信息。了解噪声的数学模型是选择平滑算法的前提。
1. 椒盐噪声 (Salt-and-Pepper Noise)
椒盐噪声也称为脉冲噪声,表现为图像中随机出现的白点(盐)或黑点(椒)。
- 现象:亮的区域有黑色像素点,或暗的区域有白色像素点。
- 成因:通常由影像讯号受到强烈干扰、类比数位转换器错误或位元传输错误产生。例如感应器失效导致像素值为最小值,或饱和导致最大值。
图1:椒盐噪声示例
2. 高斯噪声 (Gaussian Noise)
高斯噪声是指噪声密度函数服从高斯分布(即正态分布)的一类噪声。
- 数学模型:其概率密度函数(PDF)由下式给出:
p
(
z
)
=
1
2
π
σ
e
−
(
z
−
μ
)
2
2
σ
2
p(z) = \\frac{1}{\\sqrt{2\\pi}\\sigma} e^{-\\frac{(z-\\mu)^2}{2\\sigma^2}}
p(z)=2πσ1e−2σ2(z−μ)2 其中:-
z
z
z:灰度值。 -
μ
\\mu
μ:z
z
z 的平均值或期望值。 -
σ
\\sigma
σ:z
z
z 的标准差(σ
2
\\sigma^2
σ2 为方差)。
-
- 特征:噪声在空间上遍布全图,且幅度分布符合钟形曲线。
图2:高斯函数分布曲线
二、 图像平滑核心原理
从信号处理的角度看,图像平滑就是去除其中的高频信息,保留低频信息。
- 低频信息:代表图像中亮度变化缓慢的部分(如大面积背景)。
- 高频信息:代表图像中亮度变化剧烈的部分(如边缘、细节以及噪声)。
因此,平滑处理本质上是实施低通滤波(Low-pass Filtering)。
三、 主流滤波算法解析
1. 均值滤波 (Mean Filtering)
均值滤波采用邻域模板对图像进行线性处理。其基本逻辑是用窗口内所有像素的平均值代替中心像素。
- 数学表达式: 设
S
x
y
S_{xy}
Sxy 表示中心在(
x
,
y
)
(x, y)
(x,y) 点、尺寸为m
×
n
m \\times n
m×n 的矩形窗口坐标组。均值滤波器可表示为:f
^
(
x
,
y
)
=
1
m
n
∑
(
s
,
t
)
∈
S
x
y
g
(
s
,
t
)
\\hat{f}(x, y) = \\frac{1}{mn} \\sum_{(s,t) \\in S_{xy}} g(s, t)
f^(x,y)=mn1(s,t)∈Sxy∑g(s,t) - 卷积核示例:一个
3
×
3
3 \\times 3
3×3 的归一化卷积核如下:K
=
1
9
[
1
1
1
1
1
1
1
1
1
]
K = \\frac{1}{9} \\begin{bmatrix} 1 & 1 & 1 \\\\ 1 & 1 & 1 \\\\ 1 & 1 & 1 \\end{bmatrix}
K=91
111111111
- 优缺点:计算速度极快,但在去噪的同时会模糊边缘细节。
import cv2 as cv
import matplotlib.pyplot as plt
# 读取图像
img = cv.imread('dog_noise.jpg')
# 均值滤波
blur = cv.blur(img, (5, 5))
# 显示结果
plt.subplot(121), plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB)), plt.title('Original')
plt.subplot(122), plt.imshow(cv.cvtColor(blur, cv.COLOR_BGR2RGB)), plt.title('Blurred')
plt.show()
2. 高斯滤波 (Gaussian Filtering)
高斯滤波是一种加权平均滤波。越接近中心点,权重越大;越远离中心点,权重越小。
- 二维高斯函数: 高斯滤波器的核心是基于二维正态分布分布函数:
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 其中(
x
,
y
)
(x, y)
(x,y) 是相对于中心点的坐标,σ
\\sigma
σ 是标准差。 - 权重的意义:
σ
\\sigma
σ 决定了“钟形”曲线的宽度。σ
\\sigma
σ 越大,曲线越扁平,平滑效果(模糊感)越强。 - 应用:对去除高斯噪声效果极佳,且能比均值滤波更好地保留图像整体结构。
# 高斯滤波
gaussian = cv.GaussianBlur(img, (5, 5), 1)
# 显示结果
plt.subplot(121), plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB)), plt.title('Original')
plt.subplot(122), plt.imshow(cv.cvtColor(gaussian, cv.COLOR_BGR2RGB)), plt.title('Gaussian Blur')
plt.show()
3. 中值滤波 (Median Filtering)
中值滤波是一种典型的非线性滤波技术,它不依赖于加权计算。
- 算法逻辑:
- 在像素点的邻域内提取所有像素值。
- 将这些值按升序排列。
- 用排列后的**中值(Median)**代替中心点的灰度值。
- 适用场景:它是椒盐噪声的克星。
- 公式思想:
f
^
(
x
,
y
)
=
median
{
g
(
s
,
t
)
∣
(
s
,
t
)
∈
S
x
y
}
\\hat{f}(x, y) = \\text{median} \\{g(s, t) | (s, t) \\in S_{xy}\\}
f^(x,y)=median{g(s,t)∣(s,t)∈Sxy} - 优点:在去除脉冲噪声的同时,能够非常出色地保护图像边缘,不会产生严重的边缘模糊。
# 中值滤波
median = cv.medianBlur(img, 5)
# 显示结果
plt.subplot(121), plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB)), plt.title('Original')
plt.subplot(122), plt.imshow(cv.cvtColor(median, cv.COLOR_BGR2RGB)), plt.title('Median Blur')
plt.show()
四、 滤波器选择对比总结
| 均值滤波 | 算术平均 | 一般随机噪声 | 较差(明显模糊) |
| 高斯滤波 | 加权平均(正态分布) | 高斯噪声 | 中等 |
| 中值滤波 | 排序统计(中位数) | 椒盐噪声 | 优 |
五、 结语
在实际的预处理流程中:
- 如果遇到由于电子干扰产生的细微噪点,首选高斯滤波。
- 如果图像上出现了明显的黑白点(如扫描仪污渍),首选中值滤波。
- 所有的滤波操作都是在“抑制噪声”与“保留细节”之间做权衡,核大小(ksize)的选择至关重要。
参考资料
黑马程序员人工智能教程_10小时学会图像处理OpenCV入门教程
感谢阅读!如果这篇文章对你有帮助,欢迎点赞、收藏并关注我,我们下期再见!




