在經過一天的瀏覽csdn,博客園後,總算是對gabor濾波器有了一個大概的瞭解,所以趁還熱着,趕緊記錄一下。
寫的話,先給自己梳理下要寫什麼吧:
1. 什麼是gabor濾波器,公式定義
2. gabor濾波器的代碼實現
3. 實驗結果圖
4. 借鑑的資料
1. gabor濾波器簡介(主要copy吧)
在圖像處理中,Gabor函數是一個用於邊緣提取的線性濾波器。Gabor濾波器的頻率和方向表達同人類視覺系統類似。研究發現,Gabor濾波器十分適合紋理表達和分離。在空間域中,一個二維Gabor濾波器是一個由正弦平面波調製的高斯核函數。
還有,生物學實驗發現,Gabor濾波器可以很好地近似單細胞的感受野函數(光強刺激下的傳遞函數),什麼視皮層內的超柱,bla...bla,總之是這方面仿生的數學模型。
另外,網上有一種說法,gabor分爲實部和虛部,用實部進行濾波後圖像會平滑;虛部濾波後用來檢測邊緣。【來自百度知道某個大神的回答】,我查了文獻,發現的確有人用Gabor的奇函數部分做邊緣提取(《基於Gabor濾波器的邊緣檢測算法》 無線電工程 2000年第3卷第30期)。另外,從我的實驗結果也有類似的發現。暫且認爲這個對的吧。
Gabor濾波器的脈衝響應,可以定義爲一個正弦波(對於二維Gabor濾波器是正弦平面波)乘以高斯函數。由於乘法卷積性質,Gabor濾波器的脈衝響應的傅立葉變換是其調和函數的傅立葉變換和高斯函數傅立葉變換的卷積。該濾波器由實部和虛部組成,二者相互正交。一組不同頻率不同方向的Gabor函數數組對於圖像特徵提取非常有用。
下面給出二維Gabor函數的數學表達:
複數表達:
實數部分:
虛數部分:
其中:
和
以上的講解用我自己的理解的話,其實上面都是在講如何實現一個濾波器,就像實現圖像處理裏面的一個均值平滑濾波器一樣,只不過平滑濾波器太簡單了,就一個3*3或5*5的方格里求均值在放到原處。這裏呢,也是在實現一個濾波器,但是gabor的稍微複雜(一看就知道,參數多如麻啊!)。
波長(λ):它的值以像素爲單位指定,通常大於等於2.但不能大於輸入圖像尺寸的五分之一。通常用的是它的倒數頻率f大於等於0.2。
方向(θ):這個參數指定了Gabor函數並行條紋的方向,它的取值爲0到360度
相位偏移(φ):它的取值範圍爲-180度到180度。其中,0he180度分別對應中心對稱的center-on函數和center-off函數,而-90度和90度對應反對稱函數。
長寬比(γ):空間縱橫比,決定了Gabor函數形狀(support,我翻譯爲形狀)的橢圓率(ellipticity)。當γ= 1時,形狀是圓的。當γ< 1時,形狀隨着平行條紋方向而拉長。
還有一個σ,它的話,在代碼實現裏常常是濾波器大小的一半。
在實際使用gabor的話,我們一般用的是它的實數部分,也是就說,我們就是根據第三個公式求gabor濾波器的。
2. 代碼實現
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | %gamma 長寬比,一般設爲1 %lambda爲波長 %psi爲相位移動,一般爲0<br>%theta爲濾波器的角度 function gb=Gabor(sigma,theta,lambda, psi , gamma ) sigma_x = sigma; sigma_y = sigma/ gamma ; % Bounding box nstds = 4; xmax = max ( abs (nstds*sigma_x* cos (theta)), abs (nstds*sigma_y* sin (theta))); xmax = ceil ( max (1,xmax)); ymax = max ( abs (nstds*sigma_x* sin (theta)), abs (nstds*sigma_y* cos (theta))); ymax = ceil ( max (1,ymax)); xmin = -xmax; ymin = -ymax; [x,y] = meshgrid (xmin:xmax,ymin:ymax); % Rotation x_theta=x* cos (theta)+y* sin (theta); y_theta=-x* sin (theta)+y* cos (theta); gb= exp (-.5*(x_theta.^2/sigma_x^2+y_theta.^2/sigma_y^2)).* cos (2* pi /lambda*x_theta+ psi ); |
3. 實驗結果圖
1 | filter =Gabor(6, pi /4,8,0,1);imshow( filter /2+0.5) |
1 2 3 | img= imread ( 'lena.png' ); img=rgb2gray(img); f= filter2 ( filter ,img, 'valid' );f= abs (f);imshow(f/ max (f(:))) |
額,,,好像有點水,讓大家失望了
4. 借鑑的資料
http://blog.csdn.net/watkinsong/article/details/7874032
http://blog.csdn.net/jinshengtao/article/details/17797641
http://blog.csdn.net/tender8888/article/details/7470985