Python實現(xiàn)中值濾波去噪方式
中值濾波器去噪:
中值濾波的主要原理是將數(shù)字圖像中的某點用該點的鄰域中各個像素值的中值所來代替,這樣就能讓目標(biāo)像素周圍能夠更好的接近真實值,比如一張白紙上有一個黑點時,黑點的像素值比較大,經(jīng)過中值濾波過后,黑點附近的像素值可能就會變小。經(jīng)過中值濾波后一些相對孤立的噪聲點就容易被清除掉,這樣就能提高圖像的質(zhì)量。
所以中值濾波器去噪的一個優(yōu)點就是對椒鹽噪聲的去除具有很好的效果,具體操作是選取一個中心鄰域,然后給鄰域類各個像素的灰度值按大小進(jìn)行排序,選取排序序列中的中值作為該鄰域中心點的像素值的灰度值。
它的缺點是當(dāng)鄰域挑選過大時,可能會造成圖像特征丟失。
實現(xiàn)代碼如下:
import numpy as np import cv2 from PIL import Image import scipy.signal as signal import matplotlib.pyplot as plt #創(chuàng)建一個500*500的矩陣 input_images = np.zeros((500, 500)) filename = "E:/pycharm/GraduationDesign/Test/testtwo.png" #convert將當(dāng)前圖像轉(zhuǎn)換為灰度模式,并且返回新的圖像。 #將圖片在重新定義的矩陣中再顯示,不然可能會只顯示部分。 img = Image.open(filename).resize((500, 500)).convert('L') plt.subplot(221) plt.title('原圖', fontproperties=font_set) plt.imshow(img) #圖像的尺寸,按照像素數(shù)計算。它的返回值為寬度和高度的二元組(width, height)。 width = img.size[0] height = img.size[1] threshold=130 #可以改寫代碼使其成為二值化,此代碼可理解為反向二值化 for h in range(height): for w in range(width): #getpixel直接獲得(h,w)處的像素直接返回這個點三個通道的像素值 #返回給定位置的像素值。如果圖像為多通道,則返回一個元組(r,g,b,閾值)。 #如果改成(w,h)出現(xiàn)的圖像會倒轉(zhuǎn) if img.getpixel((w, h)) < threshold: input_images[h, w] = 1 else: input_images[h, w] = 0 plt.subplot(222) plt.title('二值化', fontproperties=font_set) plt.imshow(input_images) data = signal.medfilt2d(np.array(img), kernel_size=3) # 二維中值濾波 for h in range(0, height): for w in range(0, width): if data[h][w] < 128: input_images[h, w] = 0 else: input_images[h, w] = 1 plt.subplot(223) plt.title('中值濾波去噪(3*3)', fontproperties=font_set) plt.imshow(input_images) data = signal.medfilt2d(np.array(img), kernel_size=7) # 二維中值濾波 for h in range(0, height): for w in range(0, width): if data[h][w] < 128: input_images[h, w] = 0 else: input_images[h, w] = 1 plt.subplot(224) plt.title('中值濾波去噪(7*7)', fontproperties=font_set) plt.imshow(input_images) plt.show()
效果圖:
圖中的小黑點是我簡單模擬實現(xiàn)圖片中含有椒鹽噪聲中所加入的。當(dāng)中值濾波領(lǐng)域選取過大時會使圖片失真。
以上這篇Python實現(xiàn)中值濾波去噪方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python--模塊(Module)和包(Package)詳解
這篇文章主要介紹了Python中模塊(Module)和包(Package)的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-09-09詳解分布式系統(tǒng)中如何用python實現(xiàn)Paxos
提到分布式算法,就不得不提 Paxos 算法,在過去幾十年里,它基本上是分布式共識的代 名詞,因為當(dāng)前最常用的一批共識算法都是基于它改進(jìn)的。比如,F(xiàn)ast Paxos 算法、 Cheap Paxos 算法、Raft 算法、ZAB 協(xié)議等等。2021-05-05Python巧用SnowNLP實現(xiàn)生成srt字幕文件
SnowNLP是一個可以方便的處理中文文本內(nèi)容的python類庫,本文主要為大家詳細(xì)介紹了Python如何巧用SnowNLP實現(xiàn)將一段話一鍵生成srt字幕文件,感興趣的可以了解下2024-01-01解決python錯誤提示:TypeError: expected string or&nb
這篇文章主要介紹了解決python錯誤提示:TypeError: expected string or bytes-lik問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01Python opencv醫(yī)學(xué)處理的實現(xiàn)過程
這篇文章主要介紹了Python opencv醫(yī)學(xué)處理的實現(xiàn)過程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-05-05Python操作PDF文件之實現(xiàn)A3頁面轉(zhuǎn)A4
這篇文章主要為大家詳細(xì)介紹了Python操作PDF文件之實現(xiàn)A3頁面轉(zhuǎn)A4功能的相關(guān)資料,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-11-11Python unittest如何生成HTMLTestRunner模塊
這篇文章主要介紹了Python unittest如何生成HTMLTestRunner模塊,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-09-09