3

我对图像处理非常陌生。我想知道如何在具有 12 个不同方向(例如 0、15、30、45 到 165)的图像上应用 gabor 滤波器。我想将此 gabor 滤波器应用于 12 个方向并输出必须显示每个方向。我的输入是视网膜图像,方向输出应该是应用 gabor 过滤器后微调的视网膜图像。我该怎么做?

 %code for gabor filter                
 I = getimage();         
 I=I(:,:,2);    
 lambda  = 8;    
theta   = 0;    
psi     = [0 pi/2];    
gamma   = 0.5;    
 bw      = 1;    
 N       = 12;    
img_in = im2double(I);    
%img_in(:,:,2:3) = [];  % discard redundant channels, it's gray anyway    
 img_out = zeros(size(img_in,1), size(img_in,2), N);        
 for n=1:N         
        gb = gabor_fn(bw,gamma,psi(1),lambda,theta)...          
         + 1i * gabor_fn(bw,gamma,psi(2),lambda,theta);     
         % gb is the n-th gabor filter         
         img_out(:,:,n) = imfilter(img_in, gb, 'symmetric');          
        % filter output to the n-th channel       
        %theta = theta + 2*pi/N;          
        theta = 15 * n;   % i wrote this because my angles are multiples of 15       
        % next orientation           
 end 

 figure(1);           
 imshow(img_in);                  
 title('input image');                    
 figure(2);            
 img_out_disp = sum(abs(img_out).^2, 3).^0.5;        
 %default superposition method, L2-norm        
 img_out_disp = img_out_disp./max(img_out_disp(:));           
 % normalize        
 imshow(img_out_disp);         
 title('gabor output, L-2 super-imposed, normalized');        

我的输入图像是 在此处输入图像描述

我的输出图像是 在此处输入图像描述

我如何通过应用 gabor 过滤器将图像定向到 12 个不同的方向

我应该得到视网膜图像的输出,但我得到的输出图像为

在此处输入图像描述

4

2 回答 2

2

您应该添加这两行:

...
% gb is the n-th gabor filter 
img_out(:,:,n) = imfilter(img_in, gb, 'symmetric');   
figure;
imshow(img_out(:,:,n));
...  
于 2013-11-06T10:52:41.840 回答
0

我从您的问题中了解到您想应用 gabor 过滤器 12 次并且每次都以指定的方向(theta)对吗?这样做 --> 在 for 循环之前写这个 ----> ...

responses = {}; % to save each response from filter.

在过滤你的图像后像这样卷积它---->
...

response =  conv2(img_in,gb,'same'); 

...

然后像这样得到你的振幅---> ...

realpart = real(response);
imagpart = imag(response);
response = sqrt(realpart.^2 + imagpart.^2);

...

替换 ---> img_out(:,:,n) 用这个 ---->
...

responses = cat(1,responses,response);

此代码会将您从每个过滤器的响应保存到一个单元格,如果您想查看响应,只需执行此操作...

X = responses{1}; % or 2 or 3...

此链接将提供有关 gabor 过滤器的更好信息 http://matlabserver.cs.rug.nl/edgedetectionweb/web/edgedetection_params.html

希望这会帮助你。最良好的问候。

于 2015-10-28T20:55:25.333 回答