function [gb_R,gb_I]=gabor_wt(lambda,theta,m,gamma,a,psi,b,delta)
%[gb_R,gb_I]==gabor_wt(lambda,theta,m,gamma,a,psi,b,delta)
%lambda 为函数波长
%theta 为gabor 核函数的方向
%psi 为相位偏移
%sigma 为高斯函数的标准差
%gamma This parameter, called more precisely the spatial aspect ratio, specifies the ellipticity of the support of the Gabor function.
% For γ = 1, the support is circular. For γ < 1 the support is elongated in orientation of the parallel stripes of the function.
%Default value is γ = 0.5
%m 尺度参数
%a 尺度参数 默认为2
%以h(x,y)=exp(-.5*(x_theta.^2/sigma_x^2+y_theta.^2/sigma_y^2)).*exp(1i*(2*pi/lambda*x_theta+psi));
% 为母小波,对它进行尺度收缩和旋转 hmn(x,y)=a^(-m).*h(x_theta,y_theta);a >1
%a^(-m) 为尺度因子 x_theta=a^(-m)*(x*cos(theta)+y*sin(theta));
% y_theta=-a^(-m)*(x*sin(theta)+y*cos(theta)); theta=n*pi/k; S,K 为尺度和方向的数目,m=0,1,…,S?1,n=0,1,…,K?1.通过改变m和n的值,就可以
% 得到一组方向和尺度不同的Gabor滤波器
% 版本 1.0
narginchk(3,8);
if nargin<8
delta=1;
end
if nargin<7
b=1;
end
if nargin<6
psi=0;
end
if nargin<5
a=2;
end
if nargin<4
gamma=0.5;
end
sigma=lambda/pi*sqrt(log(2)/2)*(2^b+1)/(2^b-1);
if (gamma <= 1 && gamma > 0)
n = ceil(3*sigma/gamma);
else
n = ceil(3*sigma);
end
[x,y] = meshgrid(-n:delta:n);
% Rotation
x_theta=a^(-m)*(x*cos(theta)+y*sin(theta));
y_theta=-a^(-m)*(x*sin(theta)+y*cos(theta));
gb= a^(-m).*exp(-.5*(x_theta.^2+gamma^2*y_theta.^2)/sigma^2).*exp(1i*(2*pi/lambda*x_theta+psi));
gb_R= real(gb);
gb_I= imag(gb);
end
gamma=1;
lambda=8; %1
psi=0;
theta=pi;
n=1;
delta=0.1;% 网格步长
K=10; % 控制方向个数
a=2; % a.^(-m) 尺度因子
for m=0:0.5:2.5 %
for theta=0:pi/K:(pi-pi/K)
% [gb_R,gb_I]=gabor_wt(lambda,theta,m,gamma,a,psi,b,delta)
gb2=gabor_wt(lambda,theta,m,gamma,a,psi,1,delta);
name1=[' gabor wavelet a = ',num2str(a),' m = ',num2str(m),' \theta = ',num2str(theta*180/pi),'lambda=',num2str(lambda)];
name2=[' fft gabor wavelet a = ',num2str(a),' m = ',num2str(m),' \theta = ',num2str(theta*180/pi),'lambda=',num2str(lambda)];
% figure,mesh(gb2);
subplot(1,2,1),imshow(gb2,[]);
title(name1);
f_gb2=fftshift(abs(fft2(gb2)));
subplot(1,2,2),imshow(f_gb2,[]);
title(name2);
filename2=['D:\img\gabor wavelet\','gabor_wavelet and fft_gabor',num2str(n)];
saveas(gcf,filename2,'jpg');
close all
n=n+1;
end
end