目录
中值模糊的概念
中值模糊(Median Blur)
中值模糊的原理
示例:3×3 中值模糊
什么是椒盐噪声
椒盐噪声(Salt-and-Pepper Noise)
椒盐噪声的特点
OpenCV 中的 cv2.medianBlur()
函数格式
示例代码
中值模糊 vs 其他模糊方法
适用场景
总结
中值模糊的概念
中值模糊(Median Blur)
中值模糊(Median Blur)是一种 非线性滤波 方法,主要用于 去除椒盐噪声(Salt-and-Pepper Noise)(后文会解释什么是椒盐噪声),并且 能够较好地保留图像的边缘。它的核心思想是:
用 窗口(滤波核)内所有像素的中值 取代中心像素的值。
中值模糊的原理
中值模糊(Median Blur)是一种 非线性滤波 方法,它的核心思想是:
用局部窗口(滤波核)中的像素中值来替换中心像素值,从而去除椒盐噪声,并保留边缘信息。
它不同于均值滤波(Mean Filtering) 或 高斯滤波(Gaussian Filtering),它不计算均值或加权均值,而是直接选择排序后中间的值。
示例:3×3 中值模糊
假设有一个 3×3 的像素窗口:
[ 10, 200, 15 ]
[ 5, 250, 20 ]
[ 0, 100, 30 ]
-
先对这些像素值排序:
[0, 5, 10, 15, 20, 30, 100, 200, 250]
-
取 中间值(第 5 个):
20
-
替换窗口中心像素(
250
→20
)
这样就减少了椒盐噪声的影响,同时保留了边缘信息。
什么是椒盐噪声
椒盐噪声(Salt-and-Pepper Noise)
椒盐噪声是一种常见的图像噪声类型,它的特点是:
在图像中随机出现白色(Salt)和黑色(Pepper)像素点,就像图像被撒上了“盐”和“胡椒”一样,因此得名。
椒盐噪声的特点
-
随机出现:椒盐噪声通常是随机分布的,每个像素有一定概率被噪声污染。
-
极端像素值:
-
“Salt”(盐噪声)是 255(白色) 的像素点。
-
“Pepper”(胡椒噪声)是 0(黑色) 的像素点。
-
-
破坏性强:椒盐噪声对图像影响较大,特别是对边缘和细节部分。
-
通常由传输或传感器错误引起:
-
传输错误:图像在无线传输或压缩时可能引入椒盐噪声。
-
传感器故障:相机或扫描仪的传感器问题可能导致像素随机变黑或变白。
-
OpenCV 中的 cv2.medianBlur()
函数格式
cv2.medianBlur(src, ksize)
-
src:输入图像(可以是灰度图或彩色图)。
-
ksize:滤波窗口大小(必须是 奇数,如 3、5、7)。
-
ksize=3
→ 3×3 窗口 -
ksize=5
→ 5×5 窗口 -
不能是偶数,否则会报错!
-
示例代码
import cv2
# 读取图像
img = cv2.imread('./imgs/001.png')
# 应用中值模糊,核大小为 5
median_blur = cv2.medianBlur(img, 7)
gaussian_blur = cv2.GaussianBlur(img, (7, 7), 0)
# 显示结果
cv2.imshow('Original', img)
cv2.imshow('Median Blur', median_blur)
cv2.imshow('Gaussian Blur', gaussian_blur)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.destroyAllWindows()
原图
效果如下:
那其实就可以看出来了,中值模糊对于这样的椒盐噪声效果很好的嘻嘻。
原图
效果
高斯模糊来这里就纯属是捣乱的,中值模糊对于一些点稍微没有那么大的还是可以完美清除的,但是太大了,一些比ksize还大的,几乎只能去个棱角没办法了。
中值模糊 vs 其他模糊方法
滤波方法 | 计算方式 | 适用场景 | 备注 |
---|---|---|---|
均值模糊 cv2.blur() | 计算窗口内所有像素的 均值 | 适用于一般模糊 | 会模糊边缘 |
高斯模糊 cv2.GaussianBlur() | 计算 加权均值(中心像素权重大) | 适用于去噪和平滑 | 适当保留边缘 |
中值模糊 cv2.medianBlur() | 取 窗口像素的中值 | 去椒盐噪声,保留边缘 | 处理速度较慢 |
适用场景
✅ 去椒盐噪声(黑白点状噪声)。
✅ 保留边缘信息(不会模糊边界)。
✅ 适用于灰度图和彩色图(每个通道独立处理)。
总结
-
中值模糊 通过 取中值 代替均值,能有效去除椒盐噪声,并且不会模糊边缘。
-
适用于图像去噪,特别是 椒盐噪声清理。
-
核大小必须是奇数,一般选择
ksize=3
或ksize=5
。
图像有 椒盐噪声,cv2.medianBlur()
选他!