日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

python實現圖像降噪_python

作者:名劍求瑕 ? 更新時間: 2022-09-30 編程語言

本文實例為大家分享了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

欄目分類
最近更新