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