為什么要使用濾波
消除圖像中的噪聲成分叫作圖像的平滑化或?yàn)V波操作。信號(hào)或圖像的能量大部分集中在幅度譜的低頻和中頻段是很常見的,而在較高頻段,感興趣的信息經(jīng)常被噪聲淹沒(méi)。因此一個(gè)能降低高頻成分幅度的濾波器就能夠減弱噪聲的影響。
如下圖,左圖帶有椒鹽噪聲,右圖為使用中值濾波處理后的圖片。
圖像濾波的目的有兩個(gè):一是抽出對(duì)象的特征作為圖像識(shí)別的特征模式;另一個(gè)是為適應(yīng)圖像處理的要求,消除圖像數(shù)字化時(shí)所混入的噪聲。
python +opencv講解
均值濾波
含義
如圖:如果我們想對(duì)紅色點(diǎn)進(jìn)行處理,則它新值等于周圍N乘N個(gè)像素點(diǎn)的平均(包括自身)
用表達(dá)式表達(dá):
擴(kuò)展到對(duì)整個(gè)圖像進(jìn)行均值濾波
實(shí)現(xiàn)方法:
處理結(jié)果=cv2.blur(原始圖像,核大小)
核大?。阂裕▽挾?,高度)的元祖
效果:使圖像變模糊啦。能處理被椒鹽攻擊過(guò)的照片。
1
2
3
4
5
6
7
|
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() |
方框?yàn)V波
實(shí)現(xiàn)方法:函數(shù)boxFilter
處理結(jié)果=cv2.boxFilter(原始圖像,目標(biāo)圖像深度,核大小,normalize屬性)
目標(biāo)圖像深度: int類型的目標(biāo)圖像深度,-1表示與原始圖像一致
核大?。海▽挾龋叨龋┰?br />
normalize:是否對(duì)目標(biāo)圖像進(jìn)行歸一化處理
normalize為true 時(shí)與均值濾波一樣,為false時(shí)表示任意一個(gè)點(diǎn)的像素為周圍像素點(diǎn)的和,容易發(fā)生溢出超過(guò)255
normalize=1,1為true
1
2
3
4
5
6
7
|
import cv2 a = cv2.imread( 'lenacolor.png' ) # b = cv2.boxFilter(a, - 1 ,( 5 , 5 ),normalize = 1 ) cv2.imshow( 'original' ,a) cv2.imshow( 'result' ,b) cv2.waitKey( 0 ) cv2.destroyAllWindows() |
結(jié)果:
normalize=0,0為false
結(jié)果中只有幾個(gè)點(diǎn)不是白色
減少核大小為(2,2)normalize=0
高斯濾波
含義:
中心點(diǎn)權(quán)重高,越遠(yuǎn)越低
實(shí)現(xiàn)方法:GaussianBlur
處理結(jié)果=cv2.GaussianBlur(原始圖像src,核函數(shù)大小ksize,sigmaX)
核函數(shù)大小ksize:(N,N)必須是奇數(shù)
sigmaX:控制x方向方差,控制權(quán)重,一般取0,它自己去計(jì)算方差。y軸方差和x一致
1
2
3
4
5
6
7
|
import cv2 a = cv2.imread( 'lenacolor.png' ) # b = cv2.GaussianBlur(a,( 3 , 3 ), 0 ) cv2.imshow( 'original' ,a) cv2.imshow( 'result' ,b) cv2.waitKey( 0 ) cv2.destroyAllWindows() |
中值濾波
使用像素點(diǎn)鄰域附近的像素的中值代替該點(diǎn)的像素值。通俗點(diǎn)來(lái)說(shuō),在這個(gè)像素的左邊找五個(gè)像素點(diǎn),右邊找五個(gè)像素點(diǎn),將這些像素進(jìn)行排序,排序過(guò)后產(chǎn)生一個(gè)中值,用中間大小的值,來(lái)代替該像素的值。
中值濾波可以有效的去除斑點(diǎn)和椒鹽噪聲。但是效率低,其運(yùn)算時(shí)間 為均值濾波的五倍以上。
實(shí)現(xiàn)方法:medianBlur
目標(biāo)圖像=cv2.medianBlur(原始圖像,intksize)
intksize:核函數(shù),必須為奇數(shù).
1
2
3
4
5
6
7
|
import cv2 a = cv2.imread( 'lenacolor.png' ) # b = cv2.medianBlur(a, 5 ) cv2.imshow( 'original' ,a) cv2.imshow( 'result' ,b) cv2.waitKey( 0 ) cv2.destroyAllWindows() |
到此這篇關(guān)于opencv 圖像濾波(均值,方框,高斯,中值)的文章就介紹到這了,更多相關(guān)opencv 圖像濾波內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!
原文鏈接:https://blog.csdn.net/kobeyu652453/article/details/107134459