代码:
%%%%%%%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
生成的滤波器组,第一个返回的滤波器组图像:
第二个生成的滤波器组图像: