2013-04-27 4 views
3

누군가가 나를 MATLAB에서 가보 필터를 보여줄 수있는 방법을 보여줄 수 있지만 그것을 보여줄 수는 있지만 내가 원하는 것은 아닙니다. 이건 내 코드입니다 :matlab에 40 gabor 필터를 표시하는 방법

[Gf,gabout] = gaborfilter1(B,sx,sy,f,theta(j)); 


G{m,n,i,j} = Gf; 

이것은 가보 필터 클래스입니다 :

imshow(G{m,n,i,j},[]); 

결과 :

enter image description here이 코드로 imshow, 그리고

function [Gf,gabout] = gaborfilter(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); 
     Gf(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(Gf)),'same'); 
Regabout = conv2(I,double(real(Gf)),'same'); 

gabout = sqrt(Imgabout.*Imgabout + Regabout.*Regabout); 

하지만이 결과를 원한다면, 누군가 이걸 어떻게 슬 루잉시키는 걸 도와 줄 수 있니?

gabor filter

+0

Google에서 도움을 드리기 위해 더 많은 코드를 게시해야한다고 생각합니다. 예를 들어'gaborfilter' 함수는 보여 주지만'gaborfilter1' 함수는 보여주지 않습니다. 그들은 같은가요? 루프 내에서'gaborfilter1'을 실행한다고 가정합니다. 코드를 게시 할 수 있습니까? 또한 Gabor 필터 공식이 잘못되었다고 생각합니다. 시그마는 어디 있습니까? 'f' 할 일은 무엇입니까? – Tokkot

답변

1

는 다음과 같은 기능을 사용합니다. 나는 이것이 유용하길 바란다.
------------------------------------------------ ----------------

gfs = GaborFilter(51,0.45,0.05,6,4); 
n=0; 
for s=1:6 
    for d=1:4 
     n=n+1; 
     subplot(6,4,n) 
     imshow(real(squeeze(gfs(s,d,:,:))),[]) 
    end 
end 

Sample Image
------------------------ ----------------------------------------

function gfs = GaborFilter(winLen,uh,ul,S,D) 

% gfs(SCALE, DIRECTION, :, :) 

winLen = winLen + mod(winLen, 2) -1; 
x0 = (winLen + 1)/2; 
y0 = x0; 

if S==1 
    a = 1; 
    su = uh/sqrt(log(4)); 
    sv = su; 
else 
    a = (uh/ul)^(1/(S-1)); 
    su = (a-1)*uh/((a+1)*sqrt(log(4))); 
    if D==1 
     tang = 1; 
    else 
     tang = tan(pi/(2*D)); 
    end 
    sv = tang * (uh - log(4)*su^2/uh)/sqrt(log(4) - (log(4)*su/uh)^2); 
end 

sx = 1/(2*pi*su); 
sy = 1/(2*pi*sv); 
coef = 1/(2*pi*sx*sy); 

gfs = zeros(S, D, winLen, winLen); 

for d = 1:D 
    theta = (d-1)*pi/D; 
    for s = 1:S 
     scale = a^(-(s-1)); 
     gab = zeros(winLen); 
     for x = 1:winLen 
      for y = 1:winLen 
       X = scale * ((x-x0)*cos(theta) + (y-y0)*sin(theta)); 
       Y = scale * (-(x-x0)*sin(theta) + (y-y0)*cos(theta)); 
       gab(x, y) = -0.5 * ((X/sx).^2 + (Y/sy).^2) + (2*pi*1j*uh)*X ; 
      end 
     end 
     gfs(s, d, :, :) = scale * coef * exp(gab); 
    end 
end 
0

" cos "성분을 복소 부 ->complex(0, (2*pi*f*xprime)) ans 또한 배율을 (1/sqrt(2*Sy*Sx))으로 곱하십시오.

관련 문제