python实现图像降噪

 更新时间:2022年08月05日 10:29:54   作者:名剑求瑕  
这篇文章主要为大家详细介绍了python实现图像降噪,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了python实现图像降噪的具体代码,供大家参考,具体内容如下

任务描述

背景

图像在数字化和传输等过程中会产生噪声,从而影响图像的质量,而图像降噪技术可以有效地减少图像中的噪声。如下图所示,左图是一幅包含噪声的图像(图中的黑点即为噪声),右图是降噪后的结果(黑点显著减少)。

中值滤波是一种常用的图像降噪方法,对于一幅带噪声的图像 1(设分辨率为 w×h),降噪方法如下:

1)将图像1转换成灰度图,仍称为图像1;
2)新建图像2,图像2为灰度图,分辨率与图像1相同;
3)对于图像 1 中坐标为 (x,y) 的像素 p,求 p 的中值 c,然后将图像 2 中 (x,y) 处的像素值设置成 c,其中,1≤x≤w−2、1≤y≤h−2;
4)保存图像 2,图像 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)排序操作可利用列表中的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 Flask利用SocketIO库实现图表的绘制

    Python Flask利用SocketIO库实现图表的绘制

    这篇文章主要为大家详细介绍了Python Flask框架如何利用SocketIO库实现图表的绘制,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-12-12
  • Python如何加载模型并查看网络

    Python如何加载模型并查看网络

    这篇文章主要介绍了Python如何加载模型并查看网络,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Python利用PyQt5制作一个获取网络实时数据NBA数据播报GUI功能

    Python利用PyQt5制作一个获取网络实时数据NBA数据播报GUI功能

    现在NBA联赛也进行到半决赛了,我们怎么样才能以更快的方法获取NBA的数据呢?这里我们就自己来做一个数据播报的程序
    2021-07-07
  • 简单介绍Python的Django框架的dj-scaffold项目

    简单介绍Python的Django框架的dj-scaffold项目

    这篇文章主要介绍了简单介绍Python的Django框架的dj-scaffold项目,用于辅助Django框架的目录设置,需要的朋友可以参考下
    2015-05-05
  • celery4+django2定时任务的实现代码

    celery4+django2定时任务的实现代码

    这篇文章主要介绍了celery4+django2定时任务的实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • Python使用Gzip解压的示例详解

    Python使用Gzip解压的示例详解

    Python 中构建了许多用于压缩和解压缩目的的库,本文为大家介绍的Gzip库就是一种流行的数据压缩工具,下面我们就来看看如何使用 gzip 解压缩来解压缩压缩内容吧
    2023-11-11
  • 对python内置map和six.moves.map的区别详解

    对python内置map和six.moves.map的区别详解

    今天小编就为大家分享一篇对python内置map和six.moves.map的区别详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python中异常的捕获与处理详解

    Python中异常的捕获与处理详解

    这篇文章主要介绍了Python中异常的捕获与处理详解,调试Python程序时,经常会报出一些异常,异常的原因一方面可能是写程序时由于疏忽或者考虑不全造成了错误,这时就需要根据异常Traceback到出错点,进行分析改正,需要的朋友可以参考下
    2023-08-08
  • 在python 不同时区之间的差值与转换方法

    在python 不同时区之间的差值与转换方法

    今天小编就为大家分享一篇在python 不同时区之间的差值与转换方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Python将HTML快速转换成PDF的方法实现

    Python将HTML快速转换成PDF的方法实现

    在Web开发和报告任务中,将HTML内容转换为PDF是一种常见需求,本文主要介绍了Python将HTML快速转换成PDF的方法实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01

最新评论