【数字图像处理实验三】:均值滤波、中值滤波、高斯滤波及其在椒盐噪声与高斯噪声图像的应用对比

前言

本篇介绍均值滤波、中值滤波、高斯滤波的代码实现以及它们在椒盐噪声与高斯噪声图像中去噪效果的对比


一、均值滤波

均值滤波指在图像上对目标像素(指具体某一个坐标的像素)给一个模板,该模板包括目标像素本身及其周围的临近像素,再用模板中的全体像素的平均值来代替原来像素值。

均值滤波用卷积实现,其卷积核大小常见的有3×3,5×5,7×7等,如下就是3×3的卷积核,因为是用全体像素的平均值来代替原来像素值,所以可以认为模板上每一处权重都一样,又这里是3×3的卷积核,所以都是1/9,具体操作就是两个矩阵点乘之后再相加。
在这里插入图片描述

代码如下:

import cv2

# 读图
old_img = cv2.imread("lena.tif")

# 均值滤波
new_img = cv2.blur(old_img, (3, 3))  # 后面的卷积核大小可以自己定义,如(5, 5)

# 结果对比
cv2.imshow("old_img", old_img)
cv2.imshow("new_img", new_img)
cv2.waitKey(0)

结果如下,左边是老图,右边是新图(均值滤波后的图),用5×5区别将更明显。
在这里插入图片描述

二、中值滤波

中值滤波就是在将在卷积核覆盖范围内的数从小到大排序然后取中位数代替原图中卷积核中心位置的值,如下图,卷积核大小为3×3,原图中卷积核中心位置的值本来是2,对卷积核中的9个数进行排序得到:2,5,6,7,16,25,28,44,80。所以中心的2替换为16。

需要注意的是,中值滤波只需直到卷积核大小就行,至于卷积核内各个位置的数值没必要知道,比如3×3的卷积核,当遍历到原图某个坐标时,只需以它为中心的3×3范围内的数进行排序,再取中位数就行。
在这里插入图片描述
代码如下:

import cv2

# 读图
old_img = cv2.imread("lena.tif")

# 中值滤波
medianBlur_img = cv2.medianBlur(old_img, 3)

cv2.imshow("old_img", old_img)
cv2.imshow("medianBlur_img", medianBlur_img)
cv2.waitKey(0)

在这里插入图片描述

三、高斯滤波

为了克服简单局部平均法的弊端(图像模糊),目前已提出许多保持边缘、细节的局部平滑算法。它们的出发点都集中在如何选择邻域的大小、形状和方向、参数加平均及邻域各店的权重系数等。

图像高斯平滑也是邻域平均的思想对图像进行平滑的一种方法,在图像高斯平滑中,对图像进行平均时,不同位置的像素被赋予了不同的权重。高斯平滑与简单平滑不同,它在对邻域内像素进行平均时,给予不同位置的像素不同的权值,下图的所示的 3×3 和 5×5 领域的高斯模板。其中16是因为3×3的卷积核内所有的数加起来是16,273同理
在这里插入图片描述
代码如下:

import cv2

# 读图
old_img = cv2.imread("lena.tif")

# 高斯滤波
GaussianBlur_img = cv2.GaussianBlur(old_img, (3,3), 0) # 第一个参数:原图像;第二个参数:卷积核大小;第三个参数:X方向上的高斯核标准偏差。

# 显示
cv2.imshow("old_img", old_img)
cv2.imshow("GaussianBlur_img", GaussianBlur_img)
cv2.waitKey(0)

在这里插入图片描述

四、去除椒盐噪声效果对比

椒盐噪声图像如下:
在这里插入图片描述
3种滤波器效果如下,从左到右分别是均值滤波、中值滤波、高斯滤波。
在这里插入图片描述
所以对于椒盐噪声中值滤波器是个很好的选择

五、去除高斯噪声效果对比

高斯噪声图像如下:
在这里插入图片描述
3种滤波器效果如下,从左到右分别是均值滤波、中值滤波、高斯滤波。
在这里插入图片描述
去了,但只去了一点,效果感觉都差不多

期待批评指正


猜你喜欢

转载自blog.csdn.net/weixin_45887062/article/details/125645977