【opencv】(3) 图像滤波:均值、方框、中值、高斯
內容有: 均值濾波?cv2.blur(),方框濾波?cv2.boxFilter(),高斯濾波?cv2.GaussianBlur(),中值濾波 cv2.medianBlur()
濾波可理解為,平均卷積操作。對于圖像上存在的噪聲點,通過濾波平滑處理操作,可以去除噪聲點。在開始前我們先導入需要用的庫文件,獲取需要用到的圖片。
import cv2
# 指定圖像所在文件夾位置
filepath = 'C:\\Users\\admin\\.spyder-py3\\test\\opencv\\img'
# 獲取文件夾中某張圖像
img = cv2.imread(filepath+'\\lina.jpg')
# 顯示圖像
cv2.imshow('img',img) # (自定義窗口名,圖象變量)
cv2.waitKey(0) # 圖像不會自動消失
cv2.destoryAllWindows() # 按下任意鍵圖像消失
1. 均值濾波
原理: 卷積核在圖像上滑動,將核的錨點放在該特定位置的像素上,同時,核內的其他值與該像素鄰域的各像素重合;對卷積核內的所有像素值求平均,將所得結果放到與錨點對應的像素上;對圖像所有像素重復上述過程。
方法:cv2.blur(img, ksize)
img表示圖像變量;ksize表示卷積核大小(n,n),卷積核是值全為1的矩陣
#(1)均值濾波
# 參數:輸入的圖像數據,卷積核大小,即滑窗的寬和高,一般用奇數
blur = cv2.blur(img,(3,3))
# 顯示圖像
cv2.imshow('blur',blur)
cv2.waitKey(0)
cv2.destoryAllWindows()
??
2. 方框濾波
原理: 卷積核在圖像上滑動,將核的錨點放在該特定位置的像素上,同時,核內的其他值與該像素鄰域的各像素重合;方框濾波有2種方法(1)將卷積核內所有像素值相加,超過255的像素值變成255;(2)對卷積核內的所有像素值求平均。將所得結果放到與錨點對應的像素上;對圖像所有像素重復上述過程。
如果方框濾波使用第2種方法得到的結果和均值濾波的結果一樣。
濾波函數:?cv2.boxFilter(img, -1, ksize, normalize)
img代表輸入圖像;-1代表得到的結果在顏色通道上是一致的,一般不用改;ksize代表卷積核大小;normalize代表是否歸一化,如果為True,得到的結果同均值濾波。
#(2)方框濾波
# 卷積核3*3
box = cv2.boxFilter(img,-1,(3,3),normalize=True)
# 顯示圖像
cv2.imshow('box',box)
cv2.waitKey(0)
cv2.destoryAllWindows()
下圖左側是normalize=False的圖像,右側是normalize=True的圖像
??
3. 高斯濾波
原理: 卷積核在圖像上滑動,將核的錨點放在該特定位置的像素上,同時,核內的其他值與該像素鄰域的各像素重合;卷積核內的權重值服從高斯分布,離中心點越近的點權值越大。將卷積核內各值與相應像素值做內積,將乘積相加后求平均,將所得結果放到與錨點對應的像素上;對圖像所有像素重復上述過程。
濾波方法:?cv2.GaussianBlur(img, ksize, 標準差x, 標準差y)
img代表輸入圖像;ksize卷積核大小,滑窗寬度高度為奇數;標準差x代表沿x方向的卷積核的標準差;標準差y代表沿y方向的卷積核的標準差,不設置的話則和x軸的標準差一致
# 輸入圖像,卷積核大小,沿x軸方向的標準差=1,沿y軸標準差不設置的話和沿x軸一樣
aussian = cv2.GaussianBlur(img, (5,5), 1)
# 顯示圖像
cv2.imshow('aussian',aussian)
cv2.waitKey(0)
cv2.destoryAllWindows()
下圖左側為原圖,右側為高斯濾波后的圖
??
4. 中值濾波
原理: 卷積核在圖像上滑動,將核的錨點放在該特定位置的像素上,同時,核內的其他值與該像素鄰域的各像素重合;被卷積核框住的像素值從小到大排序,取中間大小的像素值代替滑窗中最中間的值。將所得結果放到與錨點對應的像素上;對圖像所有像素重復上述過程。
濾波方法:?cv2.medianBlur(img, ksize)
img代表輸入的圖像,ksize代表濾波模板的尺寸大小,填一個數值,必須是大于1的奇數
#(4)中值濾波
median = cv2.medianBlur(img,5) # 用5*5的卷積核去做滑窗,排序后,取中間那個值
# 顯示圖像
cv2.imshow('median',median)
cv2.waitKey(0)
cv2.destoryAllWindows()
下圖左側為原圖,右側為濾波后的圖像。可以看出,中值濾波對處理椒鹽噪聲具有很好的效果。
??
最后我們來把這三種濾波(均值、高斯、中值)圖像放在一起看一下
#(5)一個窗口顯示多個圖像
# np.hstack()表示沿著橫向堆疊
# np.vstack()表示沿著縱向堆疊
# 參數應該為一個元組
import numpy as np
res = np.hstack((blur,aussian,median))
# 圖像顯示
cv2.imshow('result',res)
cv2.waitKey(0)
cv2.destoryAllWindows()
總結
以上是生活随笔為你收集整理的【opencv】(3) 图像滤波:均值、方框、中值、高斯的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【opencv】(2) 图像处理:边界填
- 下一篇: 【opencv】(4) 形态学处理:腐蚀