这个gabor filter使用了正弦函数和余弦函数分别表示gabor filter 的实数部分和虚数部分。
滤波器代码如下 :
% SPATIALGABOR - applies single oriented gabor filter to an image % % Usage: % [Eim, Oim, Aim] = spatialgabor(im, wavelength, angle, kx, ky, showfilter) % % Arguments: % im - Image to be processed. % wavelength - Wavelength in pixels of Gabor filter to construct % angle - Angle of filter in degrees. An angle of 0 gives a % filter that responds to vertical features. % kx, ky - Scale factors specifying the filter sigma relative % to the wavelength of the filter. This is done so % that the shapes of the filters are invariant to the % scale. kx controls the sigma in the x direction % which is along the filter, and hence controls the % bandwidth of the filter. ky controls the sigma % across the filter and hence controls the % orientational selectivity of the filter. A value of % 0.5 for both kx and ky is a good starting point. % showfilter - An optional flag 0/1. When set an image of the % even filter is displayed for inspection. % % Returns: % Eim - Result from filtering with the even (cosine) Gabor filter % Oim - Result from filtering with the odd (sine) Gabor filter % Aim - Amplitude image = sqrt(Eim.^2 + Oim.^2) % % Peter Kovesi % School of Computer Science & Software Engineering % The University of Western Australia % pk at csse uwa edu au % http://www.csse.uwa.edu.au/~pk % % October 2006 function [Eim, Oim, Aim, Filter] = spatialgabor(im, wavelength, angle, kx, ky, showfilter) % 添加的参数直接测试用 %ori=imread('C:\Users\watkins\Pictures\cartoon.jpg'); %grayimg=rgb2gray(ori); %im=im2double(grayimg); %wavelength=3; %angle=90; %kx=0.5; %ky=0.5; %showfilter=1; if nargin == 5 showfilter = 0; end im = double(im); % Construct even and odd Gabor filters sigmax = wavelength*kx; sigmay = wavelength*ky; sze = round(3*max(sigmax,sigmay)); [x,y] = meshgrid(-sze:sze); evenFilter = exp(-(x.^2/sigmax^2 + y.^2/sigmay^2)/2)... .*cos(2*pi*(1/wavelength)*x); oddFilter = exp(-(x.^2/sigmax^2 + y.^2/sigmay^2)/2)... .*sin(2*pi*(1/wavelength)*x); evenFilter = imrotate(evenFilter, angle, 'bilinear'); oddFilter = imrotate(oddFilter, angle, 'bilinear'); Filter=evenFilter; % Do the filtering Eim = filter2(evenFilter,im); % Even filter result Oim = filter2(oddFilter,im); % Odd filter result Aim = sqrt(Eim.^2 + Oim.^2); % Amplitude if showfilter % Display filter for inspection figure(1), imshow(evenFilter,[]); title('filter'); end
调用代码:
ori=imread('C:\Users\watkins\Pictures\cartoon.jpg'); grayimg=rgb2gray(ori); gim=im2double(grayimg); %[Eim,Oim,Aim]=spatialgabor(gim,3,90,0.5,0.5,1);%90-vertical===0-horizontal [Eim,Oim,Aim,Filter]=spatialgabor(gim,4,90,0.95,0.95,0);%90-vertical===0-horizontal %add by watkins %theta=[0 pi/4 2*pi/4 3*pi/4 4*pi/4 5*pi/4 6*pi/4 7*pi/4]; theta=[0 pi/4*360 2*pi/4*360 3*pi/4*360 4*pi/4*360 5*pi/4*360 6*pi/4*360 7*pi/4*360 ]; gamma=1; psi=0; sigma=6; % 也可以为12 lambda=[3 4 5 6 7]; [nh nw]=size(Filter); G=cell(5,8); for i = 1:5 for j = 1:8 G{i,j}=zeros(nh,nw); end end for i = 1:5 for j = 1:8 [Eim,Oim,Aim,Filter] = spatialgabor(gim,lambda(i),theta(j),0.95,0.95); G{i,j}=Filter; end end %plot figure; for i = 1:5 for j = 1:8 subplot(5,8,(i-1)*8+j); %imshow(real(G{s,j})/2-0.5,[]); imshow(real(G{i,j}),[]); end end %figure(2); %imshow(Aim); %imshow(Eim); %imshow(Oim);
滤波器组的图片为: