matlab实现gabor filter (6)

代码:

%%%%%%%VERSION 3
%%ANOTHER DESCRIBTION OF GABOR FILTER

%The Gabor filter is basically a Gaussian (with variances sx and sy along x and y-axes respectively)
%modulated by a complex sinusoid (with centre frequencies U and V along x and y-axes respectively) 
%described by the following equation
%%
%               1                -1     x  ^    y  ^
%%% Gi(x,y) = ---------- * exp ([----{(----) 2+(----) 2}])*Mi(x,y,f); 
%            2*pi*sx*sy           2    sx       sy
%%% i =1,2
%%% M1(x,y,f) = cos[2*pi*f*sqrt(x^2+y^2)];
%%% M2(x,y,f) = cos[2*pi*f*(x*cos(theta) + y*sin(theta)];

%% Describtion :

%% I : Input image
%% Sx & Sy : Variances along x and y-axes respectively
%% f : The frequency of the sinusoidal function
%% theta : The orientation of Gabor filter

%% G1 & G2 : The output filters as described above
%% gabout1 & gabout2 : The output filtered images

%%  Author : Ahmad poursaberi  e-mail : [email protected]
%%          Faulty of Engineering, Electrical&Computer Department,Tehran
%%          University,Iran,June 2004

function [G1,G2,gabout1,gabout2] = gaborfilter2(I,Sx,Sy,f,theta)

if isa(I,'double')~=1 
    I = double(I);
end

for x = -fix(Sx):fix(Sx)
    for y = -fix(Sy):fix(Sy)
        M1 = cos(2*pi*f*sqrt(x^2+y^2));
        M2 = cos(2*pi*f*(x*cos(theta)+y*sin(theta)));
        G1(fix(Sx)+x+1,fix(Sy)+y+1) = (1/(2*pi*Sx*Sy)) * exp(-.5*((x/Sx)^2+(y/Sy)^2))*M1;
        G2(fix(Sx)+x+1,fix(Sy)+y+1) = (1/(2*pi*Sx*Sy)) * exp(-.5*((x/Sx)^2+(y/Sy)^2))*M2;
    end
end

Imgabout1 = conv2(I,double(imag(G1)),'same');
Regabout1 = conv2(I,double(real(G1)),'same');

Imgabout2 = conv2(I,double(imag(G2)),'same');
Regabout2 = conv2(I,double(real(G2)),'same');

gabout1 = sqrt(Imgabout1.*Imgabout1 + Regabout1.*Regabout1);
gabout2 = sqrt(Imgabout2.*Imgabout2 + Regabout2.*Regabout2);


调用代码:

close all;
clear all;
clc;

% 读入图像
image=imread('C:\Users\watkins\Pictures\cartoon.jpg');
grayImage=rgb2gray(image);
grayImage=im2double(grayImage);
% 显示读入图像
imshow(grayImage);

sx=32;
sy=32;
theta=[0 pi/4 2*pi/4 3*pi/4 4*pi/4 5*pi/4 6*pi/4 7*pi/4];
gamma=1;
psi=0;
sigma=6; % 也可以为12
lambda=[5 6 7 8 9];

V=[4 5 6 7 8];
U=[0 pi/4 2*pi/4 3*pi/4 4*pi/4 5*pi/4 6*pi/4 7*pi];
%U=[1 2 3 4 5 6 7 8];

% Creating 40 Gabor Filters
G = cell(5,8);
for i = 1:5
    for j = 1:8
        G{i,j}=zeros(65,65);
    end
end
for i = 1:5
    for j = 1:8
        f=1/lambda(i);
        %[T,gabout] = gaborfilter(grayImage,sx,sy,U(j),V(i));
        %G{i,j} = T;
        %G{i,j} = gaborfilter1(grayImage,sx,sy,f,theta(j));
        [T1,T2] = gaborfilter2(grayImage,sx,sy,f,theta(j));
        G{i,j} = T2;
    end
end

% Showing Gabor Filters
figure;
for s = 1:5
    for j = 1:8        
        subplot(5,8,(s-1)*8+j);        
        %imshow(real(G{s,j})/2-0.5,[]);
        imshow(real(G{s,j}),[]);
    end
end


 

生成的滤波器组,第一个返回的滤波器组图像:

matlab实现gabor filter (6)_第1张图片

 

第二个生成的滤波器组图像:

matlab实现gabor filter (6)_第2张图片

你可能感兴趣的:(function,image,filter,matlab,lambda,output)