python實現(xiàn)圖像降噪
本文實例為大家分享了python實現(xiàn)圖像降噪的具體代碼,供大家參考,具體內(nèi)容如下
任務描述
背景
圖像在數(shù)字化和傳輸?shù)冗^程中會產(chǎn)生噪聲,從而影響圖像的質(zhì)量,而圖像降噪技術(shù)可以有效地減少圖像中的噪聲。如下圖所示,左圖是一幅包含噪聲的圖像(圖中的黑點即為噪聲),右圖是降噪后的結(jié)果(黑點顯著減少)。
中值濾波是一種常用的圖像降噪方法,對于一幅帶噪聲的圖像 1(設分辨率為 w×h),降噪方法如下:
1)將圖像1轉(zhuǎn)換成灰度圖,仍稱為圖像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 即存放了降噪后的結(jié)果。
其中,第 3 步要計算 (x,y) 處像素 p 的中值 c,計算方法如下:
1)選取以 p 為中心的 3×3 圖像區(qū)域,如上圖所示,每個小方格代表一個像素,數(shù)字表示像素的灰度值,像素 p 的坐標為 (x,y),則選取的圖像區(qū)域為黃色底紋區(qū)域;
2)對步驟 1 中選取的 9 個像素的顏色值進行升序排列,如上圖所示例子排序后為:11、12、13、14、15、16、17、18、99;
3)在步驟 2 得到的排序結(jié)果中,排在最中間一個值即為中值 c,如上圖所示例子中像素 p 的中值為 15。
任務
本關任務是補全程序,使其能進行圖像降噪,說明如下:
1)排序操作可利用列表中的sort函數(shù)進行;
2)關于代碼的相關說明見注釋。
相關知識
略。
編程要求
在 Begin-End 區(qū)間補全代碼,具體要求見上。
測試說明
測試集正確結(jié)果如下:
(1 , 1 ) -> 255
(72 , 42) -> 191
(120, 45) -> 127
(164, 49) -> 89
(235, 49) -> 38
你的圖像與正確答案相同!
說明如下:
1)系統(tǒng)會調(diào)用你編寫的median函數(shù),并以“像素坐標 -> 中值”的格式打印結(jié)果,如測試集第 1 行的(1 , 1 ) -> 255表示:(1,1) 處像素的中值為255;
2)此外,系統(tǒng)會檢查程序生成的圖像文件,若正確則在測試集最后一行打印你的圖像與正確答案相同!。
開始你的任務吧,祝你成功!
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進行降噪,并將結(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) ?# 將灰度設置為中值 ? ? img2.save(path2) path1 = 'step4.bmp' ?# 帶噪聲的圖像 path2 = 'step4_2.bmp' ?# 降噪后的圖像 denoise(path1, path2)
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Pandas數(shù)據(jù)清洗函數(shù)總結(jié)
本文主要介紹了Pandas數(shù)據(jù)清洗函數(shù)總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-01-01Python實現(xiàn)將Excel轉(zhuǎn)換為json的方法示例
這篇文章主要介紹了Python實現(xiàn)將Excel轉(zhuǎn)換為json的方法,涉及Python文件讀寫及格式轉(zhuǎn)換相關操作技巧,需要的朋友可以參考下2017-08-08python數(shù)據(jù)庫編程 Mysql實現(xiàn)通訊錄
這篇文章主要為大家詳細介紹了python數(shù)據(jù)庫編程,Mysql實現(xiàn)通訊錄,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-03-03python中的selenium實現(xiàn)自動向下滾動頁面并指定最大滑動距離
這篇文章主要介紹了python中的selenium實現(xiàn)自動向下滾動頁面并指定最大滑動距離,下文有關selenium的資料介紹有一定的參考價值,需要的小伙伴可以參考一下2022-02-02pandas讀取HTML和JSON數(shù)據(jù)的實現(xiàn)示例
Pandas可以直接讀取html和JSON數(shù)據(jù),本文就來介紹一下pandas讀取HTML和JSON數(shù)據(jù)的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,感興趣的可以了解一下2024-01-01Python 在OpenCV里實現(xiàn)仿射變換—坐標變換效果
這篇文章主要介紹了Python 在OpenCV里實現(xiàn)仿射變換—坐標變換效果,本文通過一個例子給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-08-08