python实现图像降噪
作者:名剑求瑕 发布时间:2022-03-09 06:36:38
本文实例为大家分享了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)
来源:https://blog.csdn.net/qq_42833469/article/details/121581439
猜你喜欢
- 本文实例讲述了Python Excel表格创建乘法表。分享给大家供大家参考,具体如下:题目如下:创建程序multiplicationTabl
- 晚上突然间看到大猫的头像在闪动,速度打开一看,发现他问,以前我写button标签的时候有没有写type属性,老实的我只有诚实地告诉他,我没写
- 如下所示:# -*- coding: utf-8 -*-# @Author: xiaodong# @Date: just hid
- 要判断自定义对象的类型,用__class__方法,或者用isinstance(object, class-or-type-or-tuple)
- 一、正则表达式的特殊字符介绍正则表达式^ 匹配行首 &nb
- 1.BeautifulSoup简介BeautifulSoup4和 lxml 一样,Beautiful Soup 也是一个HTML/XML的解
- 1、选择结构通过判断条件是否成立来决定分支的执行。2、选择结构形式:单分支、双分支、多分支。3、多分支结构,几个分支之间有逻辑关系,不能随意
- 如今我使用 Python 已经很长时间了,但当我回顾之前写的一些代码时,有时候会感到很沮丧。例如,最早使用 Python 时,我写了一个名为
- asp日期转换星座函数,参数是日期型function astro(birth)astro=""if
- 一、介绍说明mitmproxy是一个支持HTTP和HTTPS的抓包程序,有类似Fiddler、Charles的功能,只不过它是一个控制台的形
- 一、get//get请求function getUrl($url, $header = []){ $ch = cu
- 本文实例讲述了PHP实现断点续传乱序合并文件的方法。分享给大家供大家参考,具体如下:分割成多个文件发送,由于网络原因并不上先发就能发接收到。
- 近日,朋友写一个关于成绩管理的系统,其中遇到一个小问题。如果按照SQLSERVER的ORDER 排序时,比如遇到两个100分,结果必然是名次
- python版本:3.8class object: """ The most base type "
- 我一直很难理解Javascript语言的继承机制。它没有"子类"和"父类"的概念,也没有"
- 背景重装系统,发现之前装在E盘的python可以直接使用,就只是将python的安装目录加入到环境变量中,也一直没有管它,今天跟天软交互的时
- 我们有时候,看到几k的日志文件,一大堆,一个一个打开又很麻烦,少看几个,又担心遗漏,这个时候,如果有一个可以合并所有文本文件的工具就好了。下
- //获取字符数组String.prototype.ToCharArray=function() { &n
- 一、使用三种方法实现0-n累加求和定义函数分别使用while循环、for循环、递归函数实现对0-n的累加求和1、使用while循环定义一个累
- Swagger是一个API开发者的工具框架,用于生成、描述、调用和可视化RESTful风格的Web服务。总体目标是使客户端和文件系统服务器以