【问题标题】:applying gabor filter to an images将 gabor 滤波器应用于图像
【发布时间】:2015-10-31 22:21:06
【问题描述】:

我对图像处理非常陌生。我想知道如何在具有 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 个不同的方向

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

【问题讨论】:

  • 你得到的是你正在使用的 Gabor 滤波器的可视化。您需要将此滤镜应用于视网膜图像以获得您想要的图像。
  • 哦哦,先生...我会尝试这样做...非常感谢先生
  • 先生,我如何将此滤镜应用于视网膜图像。我尝试使用 conv2 函数,但它适用于任何其他方法
  • 最后一张图片是滤镜的图片吧?
  • 是的先生..它是过滤器图像..现在我想将此图像强加到我的原始图像上

标签: matlab image-processing


【解决方案1】:

你应该添加这两行:

...
% gb is the n-th gabor filter 
img_out(:,:,n) = imfilter(img_in, gb, 'symmetric');   
figure;
imshow(img_out(:,:,n));
...  

【讨论】:

  • 先生,我尝试过同样的方法……但没有给我正确的输出。我希望我上传的输出图像有 2 个不同的方向。而且我认为输出可以通过我的原始图像和我的for循环的img_out的两个图像的叠加来获得......我不知道我是否正确我只是在猜测它
  • 您在问题中写了 12 个不同的方向。您能否在问题中具体说明您已经尝试过什么,什么没有奏效?您是否编写了自己附加的代码?因为您实际上是在创建您需要的所有图像,所以您只需单独显示它们。
  • 当然,先生。我将编辑我的问题..先生,我已经尝试过这个程序我没有得到正确的输出图像作为我的输出图像
  • siri 正在获取可视化输出。我想将这 12 种不同的输出强加到我的原始图像上,我该怎么做?
【解决方案2】:

我从您的问题中了解到,您想应用 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

希望这会对您有所帮助。 最良好的问候。

【讨论】:

  • 请正确编辑您的帖子,它现在几乎无法阅读。
  • Ander Biguri 我编辑了我的帖子并使其具有可读性,谢谢。
猜你喜欢
  • 2012-02-18
  • 1970-01-01
  • 1970-01-01
  • 2019-07-27
  • 1970-01-01
  • 2011-04-13
  • 2014-05-29
  • 2018-12-11
  • 2011-07-04
相关资源
最近更新 更多