使用matlab实现Gabor滤波器

    xiaoxiao2025-03-24  58

    1、spatialgabor.m

    % 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) function[Eim,Oim,Aim] = spatialgabor(im,wavelength,angle,kx,ky,showfilter) if nargin == 5 showfilter = 0; end im = double(im); [rows,cols] = size(im); newim = zeros(rows,cols); %构建奇数和偶数滤波器 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'); %制作滤波器 Eim = filter2(evenFilter,im); Oim = filter2(oddFilter,im); Aim = sqrt(Eim.^2 + Oim.^2); if showfilter %展示滤波器以便于检查 figure(1),imshow(evenFilter,[]);title('filter'); end

    2、main.m

    %parameter %Usage: % [Eim, Oim, Aim] =  spatialgabor(im, wavelength, angle, kx, ky, showfilter) % im :这个是你要输入的图片,运行的过程中会进行灰度变换,名称随意命名 % wavelength:波长,以像素为单位构造的Gabor滤波器 % angle:过滤器的角度,单位为度;0角度意味着响应垂直特征的滤波器 % kx:控制带宽 % ky:控制方向选择;一般默认(kx,ky)设置为(0.5,0.5) % showfilter:可选的标志0/1;当设置为1时,可以看到滤波器的图像,如果设置为0则看不到滤波器 img = imread('E:\VGG16检索\Corel100类库\0_1.jpg'); figure; subplot(121); imshow('E:\VGG16检索\Corel100类库\0_1.jpg');%显示原图 title('原图所示'); %先将彩色图像转换为灰度图像 grayimg = rgb2gray(img); gim = im2double(grayimg); [Eim,Oim,Aim] = spatialgabor(gim,3,90,0.5,0.5,0);%spatialgabor(im, wavelength, angle, kx, ky, showfilter) subplot(122); imshow(Aim); Aimsize = size(Aim);%查看滤波之后图像的尺寸 title('Gabor滤波后图');

    3、结果

    ps:欢迎一起学习!

    最新回复(0)