Gabor滤波在图象处理中的特征提取、纹理分析和立体视差估计等方面有许多应用。它对应的冲激响应是将复指数振荡函数乘以高斯包络函数所得的结果。下面记录了GABORFILTER matlab代码(Stiven Schwanz Dias)和文献《Tutorial on Gabor Filters》(Movellan)的一些要点。
一、两维空间Gabor滤波器
公式:
g=s*wr
其中:
g(x, y): gabor基函数
s(x, y): 复高斯函数、载体
wr(x, y): 两维高斯窗函数
(一)高斯函数
s(x,y)=exp(j(2*pi*(u0*x+v0*y)+P))
其中:
(u0, v0) 、 P 分别为s(x, y)的空间频率和相位参数(笛卡尔空间),这三个参数也可以写为极坐标形式:
F0=(u0^2+v0^2)^0.5
wo=arctan(v0/u0)
那么:
s(x,y)=exp(j(2*pi*F0(x*cosw0+y*sinw0)+P))
(二)窗口函数
定义为:
wr(x,y)=K*exp(-pi*(a^2*(x-x0)^2)+b^2*(y-y0)^2)
(三)gabor滤波基函数的形式
1、笛卡尔复空间
g(x,y)=K*exp(j(2*pi(u0*x+v0*y)+P))
*exp(-pi*(a^2*(x-x0)^2)+b^2*(y-y0)^2)
2、极坐标
g(x,y)=K*exp(j(2*pi*F0*(x*cosw0+y*sinw0)+P))
*exp(-pi*(a^2*(x-x0)^2)+b^2*(y-y0)^2)
3、去除DC响应
g(x, y) = k*(exp(j*(2*pi*F*(x*cos(W)+y*sin(W))+P))-exp(-pi*(F/S)^2+j*P))
*exp(-pi*S^2*(x*x+y*y))
令x0=y0=0,a=b=S
GABORFILTER.m 就是利用上式实现基函数。去除DC响应可参考文献1.3。
二、代码
(一)GABORFILTER.m
function [G,GABOUT]=GABORFILTER(I,S,F,W,P) % GABOUT : filtered image GABOUT
% I : input image
% S : modulated by a complex sinusoid,影响窗口幅度
% F : frequency (F,W)
% W : frequency (F,W)
% P : phase
if isa(I,'double')~=1 I=double(I); end size=fix(1.5/S); % exp(-1.5^2*pi) < 0.1% %k=2*pi*S^2; %F=S^2/sqrt(2*pi); k=1; for x=-size:size for y=-size:size G(size+x+1,size+y+1)=k*exp(-pi*S^2*(x*x+y*y))*... (exp(j*(2*pi*F*(x*cos(W)+y*sin(W))+P))-exp(-pi*(F/S)^2+j*P)); end end GABOUT=conv2(I,double(G),'same');
(二)test.m
clear;clc; Irgb=imread('\lena.jpg'); I=rgb2gray(Irgb); figure(1); subplot(221),imshow(I);title('原图'); % 第一类 S=1/4; F =2^0.5; W=1; P = 0; [G,GABOUT]=GABORFILTER(I,S,F,W,P);% figure(1);plot(abs(G)) Ig=mat2gray(abs(GABOUT)); subplot(222),imshow(Ig);title(['S=' num2str(S) ',P=' num2str(P)]);