【CV】一文講懂圖像處理中的低通、高通、帶阻和帶通濾波器
空間域和頻域濾波器通常分為四種類型的濾波器——低通、高通、帶阻和帶通濾波器。在本文中,我們?yōu)槊恳环N濾波器提供了注釋、代碼示例和圖像輸出。

低通濾波器:只允許通過低頻細(xì)節(jié),衰減高頻細(xì)節(jié)。例如:平滑濾波器。
高通濾波器:只允許通過高頻細(xì)節(jié),衰減低頻細(xì)節(jié)。例如:銳化蒙版濾波器。
帶阻濾波器:衰減一定頻率范圍內(nèi)的信號。允許低于某個閾值或高于另一個閾值的頻率通過。
帶通濾波器:只允許特定頻帶內(nèi)的信號通過,允許高于低閾值和低于高個閾值的頻率通過。
我們可以將不同濾波器用如下的公式來表示

其中δ(x, y)是單位脈沖核
Zone板是用于測試過濾器特性的一種測試板,有很多中版本。本文我們使用如下方程生成我們的要用的Zone板。

其中 x,y 是遞增步長0.0275,取值范圍在[-8.2, 8.2]的一組數(shù),最終形成一個 597x597 的圖像,樣子如下所示

具體的代碼如下:
def zone(x, y):return 0.5 * (1 + math.cos(x * x + y * y))SIZE = 597image = np.zeros((SIZE, SIZE))start = -8.2end = 8.2step = 0.0275def dist_center(y, x):global SIZEcenter = SIZE / 2return math.sqrt( (x - center)**2 + (y - center)**2)for y in range(0, SIZE):for x in range(0, SIZE):if dist_center(y, x) > 300:continuey_val = start + y * stepx_val = start + x * stepimage[y, x] = zone(x_val, y_val)
接下來我們將通過代碼展示如何使用各種濾波器,以及展示每個濾波器對Zone板的處理結(jié)果。
低通濾波器
kernel_size = 15lowpass_kernel_gaussian = gkern(kernel_size)lowpass_kernel_gaussian = lowpass_kernel_gaussian / lowpass_kernel_gaussian.sum()lowpass_kernel_box = np.ones((kernel_size, kernel_size))lowpass_kernel_box = lowpass_kernel_box / (kernel_size * kernel_size)lowpass_image_gaussian = cv2.filter2D(image, -1, lowpass_kernel_gaussian)lowpass_image_box = cv2.filter2D(image, -1, lowpass_kernel_box)

高通濾波器
在空間域中,可以通過從圖像本身中減去低通濾波圖像來獲得高通濾波圖像(如非銳化掩模)
highpass_image_gaussian = image - lowpass_image_gaussianhighpass_image_gaussian = np.absolute(highpass_image_gaussian)highpass_image_box = image - lowpass_image_boxhighpass_image_box = np.absolute(highpass_image_box)

帶阻濾波器
在空間域中,可以通過將低通濾波與高通濾波圖像(在不同閾值下)相加來獲得帶阻濾波圖像。
bandreject_image = lowpass_image_gaussian + highpass_image_box
帶通濾波器
在空間域中,可以通過從圖像本身中減去帶阻濾波圖像來獲得帶通濾波圖像。
bandpass_image = image - bandreject_imagebandpass_image = np.absolute(bandpass_image)

最后,各位小伙伴可以比較一下不同濾波器對同一圖像的處理結(jié)果哦。仔細(xì)理解一下低通、高通、帶阻、帶通的含義。
往期精彩回顧
評論
圖片
表情
