Python实现图像中值滤波降噪详解

小满
小满
发布时间:2026-10-15 | 2人浏览过
原创

本文详细介绍利用Python进行图像降噪的方法,重点讲解中值滤波算法原理。通过遍历像素并计算3x3邻域灰度值的中位数,有效去除图像中的椒盐噪声。文章包含完整的代码实现步骤及测试验证说明,帮助开发者掌握基础图像处理技巧。

本文提供了使用Python实现图像降噪的具体代码示例,供读者参考学习。

任务描述

背景

在图像的数字化采集和传输过程中,往往会产生噪声,进而降低图像质量。图像降噪技术旨在有效减少这些噪声干扰。如图所示,左侧为包含噪声的原始图像(图中黑点代表噪声),右侧为经过降噪处理后的结果,可见黑点显著减少,图像清晰度得到提升。

中值滤波是常见的图像降噪手段之一。针对一幅带有噪声的图像1(假设其分辨率为w×h),降噪处理流程如下:

1)将图像1转换为灰度图像,仍记为图像1; 2)创建新图像2,该图像为灰度图,且分辨率与图像1保持一致; 3)对于图像1中坐标为(x,y)的像素p,计算其周围像素的中值c,并将图像2中对应坐标(x,y)处的像素值设为c,其中x的取值范围为1≤x≤w−2,y的取值范围为1≤y≤h−2; 4)保存图像2,该图像即为降噪后的最终结果。

在上述第3步中,计算坐标(x,y)处像素p的中值c的具体方法如下:

1)选取以像素p为中心的3×3图像区域,如上图所示,每个小方格代表一个像素,数字表示该像素的灰度值。若像素p的坐标为(x,y),则选取的区域为图中黄色底纹覆盖的部分; 2)对步骤1中选出的9个像素的灰度值进行升序排列。例如,排序后的结果可能为:11、12、13、14、15、16、17、18、99; 3)在步骤2得到的排序序列中,位于正中间的那个值即为中值c。如上例所示,像素p的中值为15。

任务

本关任务要求补全程序代码,以实现图像降噪功能。具体说明如下: 1)排序操作可以使用Python列表提供的sort函数完成; 2)关于代码的具体细节和逻辑,请参考代码中的注释说明。

相关知识

略。

编程要求

请在Begin-End代码区间内补全代码,具体要求见上文描述。

测试说明

测试集的正确输出结果如下:

( 1 , 1 ) -> 255 (72 , 42) -> 191 (120, 45) -> 127 (164, 49) -> 89 (235, 49) -> 38

你的图像与正确答案相同!

说明如下:

1)系统会调用你编写的median函数,并以“像素坐标 -> 中值”的格式打印计算结果。例如,测试集第1行的(1 , 1 ) -> 255表示:坐标(1,1)处像素的中值为255; 2)此外,系统会检查程序生成的图像文件。若图像生成正确,则在测试集最后一行打印“你的图像与正确答案相同!”以确认结果。

开始你的任务吧,祝你成功!

from PIL import Image


# 求图像img中(x,y)处像素的中值c
def median(img, x, y):
    ########## Begin ##########
    L = []
    xl = [x-1,x,x+1]
    yl = [y-1,y,y+1]
    for i in xl:
        for j in yl:
            gray = img.getpixel((i, j))  # 取出灰度值
            L.append(gray)
    L.sort()
    c = L[4]
    ########## End ##########
    return c


# 对图像文件1进行降噪,并将结果保存为图像文件2
# 图像文件1和2的路径分别为path1和path2
def denoise(path1, path2):
    img1 = Image.open(path1)  # 图像1
    img1 = img1.convert('L')  # 将图像1转换为灰度图
    w, h = img1.size
    img2 = Image.new('L', (w, h), 'white')  # 图像2
    for x in range(1, w - 1):
        for y in range(1, h - 1):
            c = median(img1, x, y)  # 求中值
            img2.putpixel((x, y), c)  # 将灰度设置为中值
    img2.save(path2)


path1 = 'step4.bmp'  # 带噪声的图像
path2 = 'step4_2.bmp'  # 降噪后的图像
denoise(path1, path2)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表