南莊網(wǎng)站開發(fā)最近韓國電影片
中值濾波是一種常見的圖像處理濾波技術,用于去除圖像中的噪聲。它的原理是用一個滑動窗口(也稱為卷積核)在圖像上移動,對窗口中的像素值進行排序,然后用窗口中像素值的中值來替換中心像素的值。這樣,中值濾波可以有效地消除圖像中的椒鹽噪聲、激光斑點等離群值。
中值濾波與前面介紹的濾波方式不同,不再采用加權求均值的方式計算濾波結果。它用鄰域內(nèi)所有像素值的中間值來替代當前像素點的像素值。
基本原理
中值濾波會取當前像素點及其周圍臨近像素點(一共有奇數(shù)個像素點)的像素值,將這些像素值排序,然后將位于中間位置的像素值作為當前像素點的像素值。
例如,針對圖 7-27 中第 4 行第 4 列的像素點,計算它的中值濾波值。
將其鄰域設置為 3×3 大小,對其 3×3 鄰域內(nèi)像素點的像素值進行排序(升序降序均可),
按升序排序后得到序列值為:[66,78,90,91,93,94,95,97,101]。在該序列中,處于中心位置(也叫中心點或中值點)的值是“93”,因此用該值替換原來的像素值 78,作為當前點的新像素值,
處理結果如圖 7-28 所示。
函數(shù)語法
在 OpenCV 中,實現(xiàn)中值濾波的函數(shù)是 cv2.medianBlur()
,其語法格式如下:
dst = cv2.medianBlur( src, ksize)
式中:
? dst 是返回值,表示進行中值濾波后得到的處理結果。
? src 是需要處理的圖像,即源圖像。它能夠有任意數(shù)量的通道,并能對各個通道獨立處
理。圖像深度應該是 CV_8U、CV_16U、CV_16S、CV_32F 或者 CV_64F 中的一種。
**? ksize 是濾波核的大小。**濾波核大小是指在濾波處理過程中其鄰域圖像的高度和寬度。
需要注意,核大小必須是比 1 大的奇數(shù),比如 3、5、7 等。
實驗:針對噪聲圖像,對其進行中值濾波,顯示濾波的結果
代碼如下:
import cv2
o=cv2.imread("lenaNoise.png")
r=cv2.medianBlur(o,3)
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()
運行結果:
其中左圖是原始圖像,右圖是中值濾波后的處理結果圖像。
從圖中可以看到,由于沒有進行均值處理,中值濾波不存在均值濾波等濾波方式帶來的細節(jié)模糊問題。
在中值濾波處理中,噪聲成分很難被選上,所以可以在幾乎不影響原有圖像的情況下去除全部噪聲。但是由于需要進行排序等操作,中值濾波需要的運算量較大。