2014-07-04 2 views
1

3D 이미지로 작업 중이므로 Gabor 기능을 구현하고 싶습니다. 이 목적을 위해 다른 스케일 및 방향 (어쩌면 3D, 두 각도)으로 Gabor 필터 뱅크를 생성 한 다음이를 내 이미지로 변환해야합니다. 제 질문은 3D 가보 필터를 구현 한 다음 3D 이미지로이를 전환 할 수있는 가능성이 있다는 것입니다. 또는 2D 슬라이스로 수행해야합니까? 그렇다면, matlab에 그것을 구현하는 모든 제안을 주시면 감사하겠습니다.matlab에있는 3D 이미지에 가보 필터를 구현하는 방법

미리 감사드립니다.

답변

1

2D로 지정하십시오. Gabor 필터는 이미지를 회색 음영으로 자동 변경하므로 3D가 어쨌든 쓸모 없게됩니다.

여기 matlab 용 가보 필터입니다. 사용했는데 완벽하게 작동합니다.

function gaborArray = gaborFilterBank(u,v,m,n) 

% GABORFILTERBANK generates a custum Gabor filter bank. 
% It creates a u by v array, whose elements are m by n matries; 
% each matrix being a 2-D Gabor filter. 
% 
% 
% Inputs: 
%  u : No. of scales (usually set to 5) 
%  v : No. of orientations (usually set to 8) 
%  m : No. of rows in a 2-D Gabor filter (an odd integer number usually set to 39) 
%  n : No. of columns in a 2-D Gabor filter (an odd integer number usually set to 39) 
% 
% Output: 
%  gaborArray: A u by v array, element of which are m by n 
%     matries; each matrix being a 2-D Gabor filter 
% 
% 
% Sample use: 
% 
% gaborArray = gaborFilterBank(5,8,39,39); 
% 
% 
% Details can be found in: 
% 
% M. Haghighat, S. Zonouz, M. Abdel-Mottaleb, "Identification Using 
% Encrypted Biometrics," Computer Analysis of Images and Patterns, 
% Springer Berlin Heidelberg, pp. 440-448, 2013. 
% 
% 
% (C) Mohammad Haghighat, University of Miami 
%  [email protected] 
%  I WILL APPRECIATE IF YOU CITE OUR PAPER IN YOUR WORK. 



if (nargin ~= 4) % Check correct number of arguments 
    error('There should be four inputs.') 
end 


%% Create Gabor filters 

% Create u*v gabor filters each being an m*n matrix 

gaborArray = cell(u,v); 
fmax = 0.25; 
gama = sqrt(2); 
eta = sqrt(2); 

for i = 1:u 

    fu = fmax/((sqrt(2))^(i-1)); 
    alpha = fu/gama; 
    beta = fu/eta; 

    for j = 1:v 
     tetav = ((j-1)/v)*pi; 
     gFilter = zeros(m,n); 

     for x = 1:m 
      for y = 1:n 
       xprime = (x-((m+1)/2))*cos(tetav)+(y-((n+1)/2))*sin(tetav); 
       yprime = -(x-((m+1)/2))*sin(tetav)+(y-((n+1)/2))*cos(tetav); 
       gFilter(x,y) = (fu^2/(pi*gama*eta))*exp(-((alpha^2)*(xprime^2)+(beta^2)*(yprime^2)))*exp(1i*2*pi*fu*xprime); 
      end 
     end 
     gaborArray{i,j} = gFilter; 

    end 
end 


%% Show Gabor filters 

% Show magnitudes of Gabor filters: 
figure('NumberTitle','Off','Name','Magnitudes of Gabor filters'); 
for i = 1:u 
    for j = 1:v   
     subplot(u,v,(i-1)*v+j);   
     imshow(abs(gaborArray{i,j}),[]); 
    end 
end 

% Show real parts of Gabor filters: 
figure('NumberTitle','Off','Name','Real parts of Gabor filters'); 
for i = 1:u 
    for j = 1:v   
     subplot(u,v,(i-1)*v+j);   
     imshow(real(gaborArray{i,j}),[]); 
    end 
end 
+0

정직하기를, 나는 2 차원 가보 필터 뱅크를 구현하고 내 2D 이미지와 함께 컨 볼브. 그러나 나는 알고 싶다, 3d 이미지에서 그것을 할 수 있는가? 심지어 의미가 있는지 없는지도 모르겠다. :) 어쨌든 당신의 대답에 감사드립니다. – user3397178

+0

나는 100 perct가 아니다. 물론, gabor가 이미지를 2D로 변환하기 때문에 불가능합니다. 나는 그것의 3D 버전이 있는지 모른다. – Celik

관련 문제