matlab实现gabor filter (7)

这个gabor filter使用了正弦函数和余弦函数分别表示gabor filter 的实数部分和虚数部分。

滤波器代码如下 :

 

% 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, Filter] = spatialgabor(im, wavelength, angle, kx, ky, showfilter)
 
    % 添加的参数直接测试用
    %ori=imread('C:\Users\watkins\Pictures\cartoon.jpg');
    %grayimg=rgb2gray(ori);
    %im=im2double(grayimg); 
    %wavelength=3;
    %angle=90;
    %kx=0.5;
    %ky=0.5;
    %showfilter=1;
    
    if nargin == 5
         showfilter = 0;
     end
     
     im = double(im);
     % 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');  
     Filter=evenFilter;
     

    % 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

 

调用代码:

ori=imread('C:\Users\watkins\Pictures\cartoon.jpg');
grayimg=rgb2gray(ori);
gim=im2double(grayimg); 
%[Eim,Oim,Aim]=spatialgabor(gim,3,90,0.5,0.5,1);%90-vertical===0-horizontal
[Eim,Oim,Aim,Filter]=spatialgabor(gim,4,90,0.95,0.95,0);%90-vertical===0-horizontal
%add by watkins
%theta=[0 pi/4 2*pi/4 3*pi/4 4*pi/4 5*pi/4 6*pi/4 7*pi/4];
theta=[0 pi/4*360 2*pi/4*360 3*pi/4*360 4*pi/4*360 5*pi/4*360 6*pi/4*360 7*pi/4*360 ];
gamma=1;
psi=0;
sigma=6; % 也可以为12
lambda=[3 4 5 6 7];

[nh nw]=size(Filter);

G=cell(5,8);
for i = 1:5
    for j = 1:8
        G{i,j}=zeros(nh,nw);
    end
end

for i = 1:5
    for j = 1:8
        [Eim,Oim,Aim,Filter] = spatialgabor(gim,lambda(i),theta(j),0.95,0.95);
        G{i,j}=Filter;
    end
end

%plot
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

%figure(2);
%imshow(Aim);
%imshow(Eim);
%imshow(Oim);


滤波器组的图片为:

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值