空间滤波器是怎么来的
前面提到,我們可以用平均或加權(quán)平均來降低噪聲,以增強(qiáng)圖像。前面我們是對像素點(diǎn)的周邊8領(lǐng)域進(jìn)行的操作,要是我們想對周邊更多領(lǐng)域進(jìn)行操作呢?如果我們想要調(diào)整加權(quán)的權(quán)重值呢?
那么用前2篇文章中的方法顯然是非常煩瑣且不靈活的。我們注意到,對8領(lǐng)域進(jìn)行平均或加權(quán)平均操作,實(shí)質(zhì)上是對3×3的一個(gè)矩形區(qū)域進(jìn)行操作。
如果相鄰像素再擴(kuò)大一圈,就是5×5的矩形區(qū)域:
我們前面說:圖像就是矩陣,那么這個(gè)相鄰像素構(gòu)成的區(qū)域不也是矩陣嗎?同樣的,不管是平均操作還是加權(quán)平均,這個(gè)區(qū)域矩陣中的每一個(gè)像素點(diǎn)都需要乘以一個(gè)系數(shù),那么這個(gè)系數(shù)是不是同樣組成了一個(gè)矩陣呢,如果是3×3的區(qū)域,那么系數(shù)矩陣就是:
根據(jù)線性代數(shù)的矩陣數(shù)乘法則,我們可以把9放在矩陣外部,變成這個(gè)形式:
同樣的,加權(quán)操作的系數(shù)矩陣是這樣的:
那么,對圖像的平均操作和加權(quán)平均操作進(jìn)行降噪實(shí)質(zhì)上就是用這個(gè)系數(shù)矩陣與圖像中的任意一點(diǎn)的領(lǐng)域區(qū)域矩陣進(jìn)行矩陣點(diǎn)乘,然后求點(diǎn)乘后矩陣的和。
寫出公式就是:
w是大小為n×n的系數(shù)矩陣,f(x,y)是點(diǎn)(x,y)處的值,g(x,y)是進(jìn)行平均操作或加權(quán)平均操作后點(diǎn)(x,y)處的值。
import cv2 import numpy as npsalt = cv2.imread("salt_lena.bmp", 0) row, column = salt.shape reduce = salt[:] coefficient = np.array([[1, 2, 1],[2, 4, 2],[1, 2, 1]]) region_row, region_column = coefficient.shapefor x in range((region_row - 1) // 2, row - (region_row - 1) // 2):for y in range((region_column - 1) // 2, column - (region_column - 1) // 2):reduce[x, y] = np.sum(coefficient * salt[x - (region_row - 1) // 2:x + (region_row - 1) // 2 + 1,y - (region_column - 1) // 2:y + (region_column - 1) // 2 + 1]) / np.sum(coefficient)cv2.imshow("reduce_filter", reduce.astype("uint8")) cv2.waitKey()效果是以前的做法是一樣的。
這樣的話,就把系數(shù)矩陣w抽象了出來,如果需要擴(kuò)大領(lǐng)域操作的范圍,就改變系數(shù)矩陣的大小n×n,如果需要調(diào)整權(quán)重,就改變系數(shù)矩陣中的相應(yīng)位置的值。
這個(gè)抽象的系數(shù)矩陣w我們可以稱它為模板、核、窗口、卷積核等等,都是等價(jià)的。而這種操作既然是降低噪聲,就是過濾掉噪聲,借用頻率域的術(shù)語,又可以稱之為濾波操作,那么這個(gè)系數(shù)矩陣w就稱之為濾波器。由于是在圖像的二維空間中進(jìn)行操作,所以又稱為空間濾波器。以后你看到模板、核、卷積核、窗口、濾波器、空間濾波器等等術(shù)語,都指的是這個(gè)東西。當(dāng)然,卷積的真實(shí)含義與這里的操作有一點(diǎn)點(diǎn)的區(qū)別,但不必過于拘泥于術(shù)語的精確性。關(guān)于卷積以后還將探討到。
事實(shí)上opencv已經(jīng)給我們封裝好了。我們用一個(gè)5×5的空間濾波器,使用opencv的filter2D函數(shù)。
salt = cv2.imread("salt_lena.bmp", 0) filter = 1 / 25 * np.ones((5, 5)) reduce_filter = cv2.filter2D(salt, -1, filter) cv2.imshow("reduce_filter", reduce_filter) cv2.waitKey()輸出結(jié)果:
這里我們用了3×3和5×5的空間濾波器,大小都是奇數(shù),那么可不可以使用4×4,8×8,甚至是5×4,8×7的尺寸呢,當(dāng)然是可以的。但是,使用奇數(shù)尺寸的濾波器可以簡化索引,并更為直觀,因?yàn)樾枰僮鞯南袼攸c(diǎn)是落在濾波器的中心位置上。
總結(jié)
以上是生活随笔為你收集整理的空间滤波器是怎么来的的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么用加权平均来降噪
- 下一篇: 高斯模糊