matlab实现gabor filter (8) 效果很好

gabor 滤波器函数:

 

function gb=gabor_fn(bw,gamma,psi,lambda,theta)
% bw    = bandwidth, (1)
% gamma = aspect ratio, (0.5)
% psi   = phase shift, (0)
% lambda= wave length, (>=2)
% theta = angle in rad, [0 pi)
 
sigma = lambda/pi*sqrt(log(2)/2)*(2^bw+1)/(2^bw-1);
sigma_x = sigma;
sigma_y = sigma/gamma;

sz=fix(8*max(sigma_y,sigma_x));
if mod(sz,2)==0, sz=sz+1;end

% alternatively, use a fixed size
% sz = 60;
 
[x y]=meshgrid(-fix(sz/2):fix(sz/2),fix(sz/2):-1:fix(-sz/2));
% x (right +)
% y (up +)

% Rotation 
x_theta=x*cos(theta)+y*sin(theta);
y_theta=-x*sin(theta)+y*cos(theta);
 
gb=exp(-0.5*(x_theta.^2/sigma_x^2+y_theta.^2/sigma_y^2)).*cos(2*pi/lambda*x_theta+psi);
%figure;
%imshow(gb/2+0.5);
%imshow(gb); %直接显示的gabor filter非常难看
%title('gabor filter');


调用代码:

 

clear all;
close all;

% 测试用程序
theta = [0 pi/4 2*pi/4 3*pi/4 4*pi/4 5*pi/4 6*pi/4 7*pi/4];
lambda = [4 5 6 7 8];
psi = 0;
gamma = 1;
bw = 0.5;



%{
% 初始化用来存放gabor filter组的cell
G=cell(5,8);
for i = 1:5
    for j = 1:8
        G{i,j}=zeros(GaborH,GaborW);
    end
end
%}

% 计算每个滤波器
figure;
for i = 1:5
    for j = 1:8
        gaborFilter=gabor_fn(bw,gamma,psi,lambda(i),theta(j));
        subplot(5,8,(i-1)*8+j);
        imshow(real(gaborFilter),[]);
    end
end

%{
% 绘制滤波器组
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
%}


生成的滤波器组图片:

matlab实现gabor filter (8) 效果很好_第1张图片

你可能感兴趣的:(function,filter,测试,matlab,UP,lambda)