Gabor濾波及python實現

2021-10-02 19:33:30 字數 2184 閱讀 7157

fourier變換的不足

fourier頻率分析存在嚴重不足,它無法告知某些頻率成分發生在哪些時間內,無法表示某個時刻訊號頻譜的分布情況。訊號在某時刻的乙個小的鄰域內發生變化,那麼訊號的整個頻譜都要受到影響,而頻譜的變化從根本上來說無法標定發生變化的時間位置和發生變化的劇烈程度。傅利葉變換的時域和頻域是完全分割開來的。

其實根本原因是傅利葉變換的三角基是全域性的,其區域性化性質不好,因而只能得到訊號的整個頻譜,難以在任何有限頻段上確定任意小範圍內訊號的區域性特徵

為了解決這種區域性性的問題,2023年,dennisgabor提出了「視窗fourier變換」的概念,即gabor變換

1.gabor 核作為影象特徵

乙個gabor核能獲取到影象某個頻率鄰域的響應情況,這個響應結果可以看做是影象的乙個特徵

用多個不同頻率的gabor核去獲取影象在不同頻率鄰域的響應情況,最後就能形成影象在各個頻率段的特徵

gabor可用於邊緣提取的線性濾波器,能夠提供良好的方向選擇和尺度選擇特性,而且對於光照變化不敏感,十分適合紋理分析

#構建gabor濾波器

def build_filters():

filters =

ksize = [7,9,11,13,15,17] # gabor尺度,6個

lamda = np.pi/2.0 # 波長

for theta in np.arange(0, np.pi, np.pi / 4): #gabor方向,0°,45°,90°,135°,共四個

for k in range(6):

kern = cv2.getgaborkernel((ksize[k], ksize[k]), 1.0, theta, lamda, 0.5, 0, ktype=cv2.cv_32f)

kern /= 1.5*kern.sum()

plt.figure(1)

#用於繪製濾波器

for temp in range(len(filters)):

plt.subplot(4, 6, temp + 1)

plt.imshow(filters[temp])

plt.show()

return filters

#gabor特徵提取

def getgabor(img,filters):

res = #濾波結果

for i in range(len(filters)):

# res1 = process(img, filters[i])

accum = np.zeros_like(img)

for kern in filters[i]:

fimg = cv2.filter2d(img, cv2.cv_8uc1, kern)

accum = np.maximum(accum, fimg, accum)

#用於繪製濾波效果

plt.figure(2)

for temp in range(len(res)):

plt.subplot(4,6,temp+1)

plt.imshow(res[temp], cmap='gray' )

plt.show()

return res #返回濾波結果,結果為24幅圖,按照gabor角度排列

getgabor(img, filters)參考文章:

Gabor濾波 多尺度問題

gabor變換屬於加窗傅利葉變換,gabor函式可以在頻域不同尺度 不同方向上提取相關的特徵。另外gabor函式與人眼的生物作用相仿,所以經常用作紋理識別上,並取得了較好的效果。二維gabor函式可以表示為 其中 v的取值決定了gabor濾波的波長,u的取值表示gabor核函式的方向,k表示總的方向...

Gabor濾波器學習

本文的目的是用c實現生成gabor模版,並對影象卷積。並簡單提一下,gabor濾波器在紋理特徵提取上的應用。一 什麼是gabor函式 以下內容含部分翻譯自維基百科 在影象處理中,gabor函式是乙個用於邊緣提取的線性濾波器。gabor濾波器的頻率和方向表達同人類視覺系統類似。研究發現,gabor濾波...

gabor濾波器簡介

在經過一天的瀏覽csdn,後,總算是對gabor濾波器有了乙個大概的了解,所以趁還熱著,趕緊記錄一下。寫的話,先給自己梳理下要寫什麼吧 1.什麼是gabor濾波器,公式定義 2.gabor濾波器的 實現 3.實驗結果圖 4.借鑑的資料 1.gabor濾波器簡介 主要copy吧 在影象處理中,gabo...