python實(shí)現(xiàn)圖像降噪
本文實(shí)例為大家分享了python實(shí)現(xiàn)圖像降噪的具體代碼,供大家參考,具體內(nèi)容如下
任務(wù)描述
背景
圖像在數(shù)字化和傳輸?shù)冗^程中會(huì)產(chǎn)生噪聲,從而影響圖像的質(zhì)量,而圖像降噪技術(shù)可以有效地減少圖像中的噪聲。如下圖所示,左圖是一幅包含噪聲的圖像(圖中的黑點(diǎn)即為噪聲),右圖是降噪后的結(jié)果(黑點(diǎn)顯著減少)。

中值濾波是一種常用的圖像降噪方法,對(duì)于一幅帶噪聲的圖像 1(設(shè)分辨率為 w×h),降噪方法如下:
1)將圖像1轉(zhuǎn)換成灰度圖,仍稱為圖像1;
2)新建圖像2,圖像2為灰度圖,分辨率與圖像1相同;
3)對(duì)于圖像 1 中坐標(biāo)為 (x,y) 的像素 p,求 p 的中值 c,然后將圖像 2 中 (x,y) 處的像素值設(shè)置成 c,其中,1≤x≤w−2、1≤y≤h−2;
4)保存圖像 2,圖像 2 即存放了降噪后的結(jié)果。
其中,第 3 步要計(jì)算 (x,y) 處像素 p 的中值 c,計(jì)算方法如下:

1)選取以 p 為中心的 3×3 圖像區(qū)域,如上圖所示,每個(gè)小方格代表一個(gè)像素,數(shù)字表示像素的灰度值,像素 p 的坐標(biāo)為 (x,y),則選取的圖像區(qū)域?yàn)辄S色底紋區(qū)域;
2)對(duì)步驟 1 中選取的 9 個(gè)像素的顏色值進(jìn)行升序排列,如上圖所示例子排序后為:11、12、13、14、15、16、17、18、99;
3)在步驟 2 得到的排序結(jié)果中,排在最中間一個(gè)值即為中值 c,如上圖所示例子中像素 p 的中值為 15。
任務(wù)
本關(guān)任務(wù)是補(bǔ)全程序,使其能進(jìn)行圖像降噪,說明如下:
1)排序操作可利用列表中的sort函數(shù)進(jìn)行;
2)關(guān)于代碼的相關(guān)說明見注釋。
相關(guān)知識(shí)
略。
編程要求
在 Begin-End 區(qū)間補(bǔ)全代碼,具體要求見上。
測試說明
測試集正確結(jié)果如下:
(1 , 1 ) -> 255
(72 , 42) -> 191
(120, 45) -> 127
(164, 49) -> 89
(235, 49) -> 38
你的圖像與正確答案相同!
說明如下:
1)系統(tǒng)會(huì)調(diào)用你編寫的median函數(shù),并以“像素坐標(biāo) -> 中值”的格式打印結(jié)果,如測試集第 1 行的(1 , 1 ) -> 255表示:(1,1) 處像素的中值為255;
2)此外,系統(tǒng)會(huì)檢查程序生成的圖像文件,若正確則在測試集最后一行打印你的圖像與正確答案相同!。
開始你的任務(wù)吧,祝你成功!
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
# 對(duì)圖像文件1進(jìn)行降噪,并將結(jié)果保存為圖像文件2
# 圖像文件1和2的路徑分別為path1和path2
def denoise(path1, path2):
? ? img1 = Image.open(path1) ?# 圖像1
? ? img1 = img1.convert('L') ?# 將圖像1轉(zhuǎn)換為灰度圖
? ? 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) ?# 將灰度設(shè)置為中值
? ? img2.save(path2)
path1 = 'step4.bmp' ?# 帶噪聲的圖像
path2 = 'step4_2.bmp' ?# 降噪后的圖像
denoise(path1, path2)
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python Flask利用SocketIO庫實(shí)現(xiàn)圖表的繪制
這篇文章主要為大家詳細(xì)介紹了Python Flask框架如何利用SocketIO庫實(shí)現(xiàn)圖表的繪制,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2022-12-12
Python利用PyQt5制作一個(gè)獲取網(wǎng)絡(luò)實(shí)時(shí)數(shù)據(jù)NBA數(shù)據(jù)播報(bào)GUI功能
現(xiàn)在NBA聯(lián)賽也進(jìn)行到半決賽了,我們怎么樣才能以更快的方法獲取NBA的數(shù)據(jù)呢?這里我們就自己來做一個(gè)數(shù)據(jù)播報(bào)的程序2021-07-07
簡單介紹Python的Django框架的dj-scaffold項(xiàng)目
這篇文章主要介紹了簡單介紹Python的Django框架的dj-scaffold項(xiàng)目,用于輔助Django框架的目錄設(shè)置,需要的朋友可以參考下2015-05-05
celery4+django2定時(shí)任務(wù)的實(shí)現(xiàn)代碼
這篇文章主要介紹了celery4+django2定時(shí)任務(wù)的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12
對(duì)python內(nèi)置map和six.moves.map的區(qū)別詳解
今天小編就為大家分享一篇對(duì)python內(nèi)置map和six.moves.map的區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12
在python 不同時(shí)區(qū)之間的差值與轉(zhuǎn)換方法
今天小編就為大家分享一篇在python 不同時(shí)區(qū)之間的差值與轉(zhuǎn)換方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01
Python將HTML快速轉(zhuǎn)換成PDF的方法實(shí)現(xiàn)
在Web開發(fā)和報(bào)告任務(wù)中,將HTML內(nèi)容轉(zhuǎn)換為PDF是一種常見需求,本文主要介紹了Python將HTML快速轉(zhuǎn)換成PDF的方法實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01

