opencv 影象濾波(均值,方框,高斯,中值)
為什麼要使用濾波
消除影象中的噪聲成分叫作影象的平滑化或濾波操作。訊號或影象的能量大部分集中在幅度譜的低頻和中頻段是很常見的,而在較高頻段,感興趣的資訊經常被噪聲淹沒。因此一個能降低高頻成分幅度的濾波器就能夠減弱噪聲的影響。
如下圖,左圖帶有椒鹽噪聲,右圖為使用中值濾波處理後的圖片。
影象濾波的目的有兩個:一是抽出物件的特徵作為影象識別的特徵模式;另一個是為適應影象處理的要求,消除影象數字化時所混入的噪聲。
python +opencv講解
均值濾波
含義
如圖:如果我們想對紅色點進行處理,則它新值等於周圍N乘N個畫素點的平均(包括自身)
用表示式表達:
擴充套件到對整個影象進行均值濾波
實現方法:
處理結果=cv2.blur(原始影象,核大小)
核大小:以(寬度,高度)的元祖
效果:使影象變模糊啦。能處理被椒鹽攻擊過的照片。
import cv2 a=cv2.imread('lenacolor.png')# b=cv2.blur(a,(8,8)) cv2.imshow('original',a) cv2.imshow('result',b) cv2.waitKey(0) cv2.destroyAllWindows()
方框濾波
實現方法:函式boxFilter
處理結果=cv2.boxFilter(原始影象,目標影象深度,核大小,normalize屬性)
目標影象深度: int型別的目標影象深度,-1表示與原始影象一致
normalize:是否對目標影象進行歸一化處理
normalize為true 時與均值濾波一樣,為false時表示任意一個點的畫素為周圍畫素點的和,容易發生溢位超過255
normalize=1,1為true
import cv2 a=cv2.imread('lenacolor.png')# b=cv2.boxFilter(a,-1,(5,5),normalize=1) cv2.imshow('original',b) cv2.waitKey(0) cv2.destroyAllWindows()
結果:
normalize=0,0為false
結果中只有幾個點不是白色
減少核大小為(2,2)normalize=0
高斯濾波
含義:
中心點權重高,越遠越低
實現方法:GaussianBlur
處理結果=cv2.GaussianBlur(原始影象src,核函式大小ksize,sigmaX)
核函式大小ksize:(N,N)必須是奇數
sigmaX:控制x方向方差,控制權重,一般取0,它自己去計算方差。y軸方差和x一致
import cv2 a=cv2.imread('lenacolor.png')# b=cv2.GaussianBlur(a,(3,3),0) cv2.imshow('original',中值)" src="http://img1.cppcns.com/images/2020/202007/q3fhwn00yuj.jpg" />中值濾波
使用畫素點鄰域附近的畫素的中值代替該點的畫素值。通俗點來說,在這個畫素的左邊找五個畫素點,右邊找五個畫素點,將這些畫素進行排序,排序過後產生一箇中值,用中間大小的值,來代替該畫素的值。
中值濾波可以有效的去除斑點和椒鹽噪聲。但是效率低,其運算時間 為均值濾波的五倍以上。
實現方法:medianBlur
目標影象=cv2.medianBlur(原始影象,intksize)
intksize:核函式,必須為奇數.import cv2 a=cv2.imread('lenacolor.png')# b=cv2.medianBlur(a,5) cv2.imshow('original',中值)" src="http://img1.cppcns.com/images/2020/202007/oyl2nghhz30.jpg" />
到此這篇關於opencv 影象濾波(均值,中值)的文章就介紹到這了,更多相關opencv 影象濾波內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!