python图像降噪

news/2024/7/21 7:09:28 标签: 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 区间补全代码,具体要求见上。

测试说明
  测试集正确结果如下:

python">(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)此外,系统会检查程序生成的图像文件,若正确则在测试集最后一行打印你的图像与正确答案相同!。

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

python">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)

在这里插入图片描述


http://www.niftyadmin.cn/n/502535.html

相关文章

oracle的后门网站下载资源

http://edelivery.oracle.com/ 几乎能下oracle所有的产品,如各种9i 但是官方上是没有入口的。转载于:https://blog.51cto.com/itbull/1177440

java 设计模式 回调_Java设计模式百例 - 观察者模式

观察者(Observer)模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,主体对象的状态变化会通知所有观察者对象。观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或…

QoS CAR 和GTS实验

实验目的: 熟悉CAR 流量监管和GTS流量 理解QOS是如何工作的 实验拓扑 实验思路 在R2的S0/6/0上作CAR 在R1的S0/6/0上作GTS 实验配置 R1 # acl number 3000 rule 0 permit ip source 172.16.1.1 0 destination 192.168.1.1 0 rule 1 deny ip acl number 3001 rule…

图像置换加密

任务描述 背景   之前实训学习了如何对字符进行加密,其实图像也可以加密,如下图所示。 其中,% 表示求余运算,a 和 b 是此加密方法的密钥,在本关,a 取 1、b 取 2。 任务   本关任务是实现函数enImg(p…

android和iOS平台的崩溃捕获和收集

通过崩溃捕获和收集,可以收集到已发布应用(游戏)的异常,以便开发人员发现和修改bug,对于提高软件质量有着极大的帮助。本文介绍了iOS和android平台下崩溃捕获和收集的原理及步骤,不过如果是个人开发应用或者…

文件合并工具

myFile.py import os 获取dirpath文件夹下所有txt文件的路径def getTxtPaths(dirpath):paths [ ]filenames os.listdir(dirpath)for filename in filenames :filepath os.path.join(dirpath,filename)if os.path.isfile(filepath) and filename.endswith(.txt):paths.appen…

java访问数据库 博文_Spark jdbc postgresql数据库连接和写入操作源代码解读

概述:Spark postgresql jdbc 数据库连接和写入操作源代码解读。具体记录了SparkSQL对数据库的操作,通过java程序。在本地开发和执行。总体为,Spark建立数据库连接,读取数据。将DataFrame数据写入还有一个数据库表中。附带完整项目…

Windows内核编程之:检查内存的可用性

这两个函数不是返回该段内存是否可读写,而是当不可读写的时候引发一个异常(Exception)。这个异常需要用到微软的编译器提供的"结构化异常"处理变法。"结构化异常"机制会轻松的检测到这种异常进而做出相应的异常处理 /*************************…