數字影象處理筆記(九):選擇性濾波
阿新 • • 發佈:2018-12-23
1 - 引言
在前面我們討論了高通和低通濾波器對影象進行處理,它們都是在整個影象的頻率矩陣上操作,但是在很多應用中,我們感興趣是處理指定的頻段或頻率矩形的小區域,因此需要使用選擇性濾波,選擇性濾波主要有兩類
- 帶阻濾波器或帶通濾波器
- 陷波濾波器
下面就讓我們來介紹一下這兩種濾波器
2 - 帶阻濾波器和帶通濾波器
這種型別的濾波器很容易使用前面的概念來構建,前面我們學習了理想、布特沃斯和高斯濾波器,則我們可以通過這些濾波器構建新的帶阻濾波器
帶通濾波器則為:
下面以影象的形式來展示一個高斯帶通濾波器
這個濾波器本質上與前面的濾波器沒有很大的改變,因此不再進行試驗分析(詳情可見之前的筆記)
3 - 陷波濾波器
陷波濾波器是更有用的選擇性濾波器可以有效的去除週期性噪聲。陷波濾波器可以用高通濾波器的乘積來構造。一般形式為:
其中,
和
是高通濾波器。
距離的計算:
和
例如,下面一個用理想低通濾波器,它包含兩個陷波對
進行莫爾波紋的過濾
import cv2
import numpy as np
import matplotlib.pyplot as plt
#解決中文顯示問題
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
img = cv2.imread('images/2.jpg',0) #直接讀為灰度影象
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
s1 = np.log(np.abs(fshift))
plt.subplot(221),plt.imshow(img,'gray'),plt.title('原始影象')
plt.subplot(222),plt.imshow(s1,'gray'),plt.title('中心頻率域')
w , h = img.shape
"""設計理想陷波濾波器"""
flt = np.zeros(img.shape)
rx1 = w / 4
ry1 = h / 2
rx2 = w*3/4
ry2 = h/2;
r = min(w,h)/6 #半徑
for i in range(1,w):
for j in range(1,h):
if ((i - rx1)**2 + (j - ry1)**2 >= r**2) and ((i - rx2)**2 + (j - ry2)**2 >= r**2):
flt[i,j] = 1
plt.subplot(223),plt.imshow(flt,'gray'),plt.title('陷波濾波器')
new_img = np.abs(np.fft.ifft2(np.fft.ifftshift(fshift*flt)))
plt.subplot(224),plt.imshow(new_img,'gray'),plt.title('濾波後圖像')
plt.show()
可以看到我們原始影象含有較多的莫爾波紋,我們可以通過構建不同的陷波濾波器對影象進行濾波
可見大部分的莫爾波紋已經被過濾,但是圖片也因為濾波失去資訊而變得平滑模糊,這時候我們可以選用不同數量和不同的單個濾波器種類來達到更好的效果。
4 - 小結
到這裡,對於濾波器的學習可以做一個小結,我們學習了在空間域、頻域的高通、低通濾波器對影象做增強操作,我們在以後的實踐中,可以靈活的構建和使用多種濾波器為我們需要識別的圖片進行預處理,以達到更好的識別效果。