Sx,Sy在公式里分别表示Guass函数沿着x,y轴的标准差,相当于其他的gabor函数中的 sigma. 同时也用Sx,Sy指定了gabor滤波器的大小。(滤波器矩阵的大小)
这里没有考虑到相位偏移.
%%%%%%%VERSION 2 %%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 x' ^ y' ^ %%% G(x,y,theta,f) = exp ([----{(----) 2+(----) 2}])*cos(2*pi*f*x'); % 2 sx' sy' %%% x' = x*cos(theta)+y*sin(theta); %%% y' = y*cos(theta)-x*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 %% G : The output filter as described above %% gabout : The output filtered image %% Author : Ahmad poursaberi e-mail : [email protected] %% Faulty of Engineering, Electrical&Computer Department,Tehran %% University,Iran,June 2004 function [G,gabout] = gaborfilter1(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) xPrime = x * cos(theta) + y * sin(theta); yPrime = y * cos(theta) - x * sin(theta); G(fix(Sx)+x+1,fix(Sy)+y+1) = exp(-.5*((xPrime/Sx)^2+(yPrime/Sy)^2))*cos(2*pi*f*xPrime); end end Imgabout = conv2(I,double(imag(G)),'same'); Regabout = conv2(I,double(real(G)),'same'); gabout = sqrt(Imgabout.*Imgabout + Regabout.*Regabout);
这个gaobor函数生成的gabor滤波器的图像如图:
不同的参数也会导致不同的结果。
这个gabor滤波器的实现增加了尺度和方向变换,其他的参数以及意义都和上面的一样。
%%%%%%%VERSION 1 %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 ^ %%% G(x,y) = ---------- * exp ([----{(----) 2+(----) 2}+2*pi*i*(Ux+Vy)]) % 2*pi*sx*sy 2 sx sy %% Describtion : %% I : Input image %% Sx & Sy : Variances along x and y-axes respectively %% U & V : Centre frequencies along x and y-axes respectively %% G : The output filter as described above %% gabout : The output filtered image %% Author : Ahmad poursaberi e-mail : [email protected] %% Faulty of Engineering, Electrical&Computer Department,Tehran %% University,Iran,June 2004 function [G,gabout] = gaborfilter(I,Sx,Sy,U,V); if isa(I,'double')~=1 I = double(I); end for x = -fix(Sx):fix(Sx) for y = -fix(Sy):fix(Sy) G(fix(Sx)+x+1,fix(Sy)+y+1) = (1/(2*pi*Sx*Sy))*exp(-.5*((x/Sx)^2+(y/Sy)^2)+2*pi*i*(U*x+V*y)); end end Imgabout = conv2(I,double(imag(G)),'same'); Regabout = conv2(I,double(real(G)),'same'); gabout = uint8(sqrt(Imgabout.*Imgabout + Regabout.*Regabout));
调用代码:
ori=imread('C:\Users\watkins\Pictures\cartoon.jpg'); grayimg=rgb2gray(ori); gim=im2double(grayimg); Sx=32; Sy=32; f=sqrt(8); theta=pi/2; u=4; v=4; %[G,gabout] = gaborfilter1(gim,Sx,Sy,f,theta); [G,gabout] = gaborfilter1(gim,Sx,Sy,u,v); imshow(real(G)); %imshow(real(gabout));
滤波器图片:
%%%%%%%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);
调用代码:
ori=imread('C:\Users\watkins\Pictures\cartoon.jpg'); grayimg=rgb2gray(ori); gim=im2double(grayimg); Sx=16; Sy=16; f=sqrt(2); theta=pi/2; u=8; v=0; %[G,gabout] = gaborfilter1(gim,Sx,Sy,f,theta); %[G,gabout] = gaborfilter1(gim,Sx,Sy,u,v); [G1,G2,gabout1,gabout2] = gaborfilter2(gim,Sx,Sy,f,theta); R=real(G2); k=127.5/max(max(abs(R))); imshow(uint8(k*R+127.5)); %imshow(real(G2)); %imshow(abs(real(gabout)));
生成的滤波器图片: