matlab中实现Gabor滤波器 - GarfieldEr007

matlab中实现Gabor滤波器

2016-04-10 14:02 GarfieldEr007 阅读(1686) 评论(0) 编辑收藏举报

1.spatialgabor.m描述gabor函数

% 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] = spatialgabor(im, wavelength, angle, kx, ky, showfilter)

if nargin == 5

showfilter = 0;

end

im = double(im);

[rows, cols] = size(im);

newim = zeros(rows,cols);

% 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\');

% 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

2.main.m

ori=imread(\'D:\Images\New\Cars\image_0001.jpg\');

grayimg=rgb2gray(ori);

gim=im2double(grayimg);

[Eim,Oim,Aim]=spatialgabor(gim,3,90,0.5,0.5,1);%90-vertical===0-horizontal

imshow(Aim);

from: http://blog.csdn.net/abcjennifer/article/details/7360436