使用 Gabor 滤波器的图像纹理特征

标签 image filter textures time-frequency

我有以下 gabor 过滤器来提取图像纹理特征..

a=imread('image0001.jpg');
a=double(a); 
a=a-mean(a(:)); 
[r,c,l]=size(a); 

 K=5;  S=6;
 Uh=0.4;
 Ul=0.05;
 alpha=(Uh/Ul)^(1/(S-1));  
 sigmau=(alpha-1)*Uh/((alpha+1)*sqrt(2*log(2))); 
 sigmav=tan(pi/(2*K))*(Uh-2*log(2)*((sigmau^2)/Uh))/sqrt((2*log(2))-(((2*log(2))^2)*(sigmau^2)/(Uh^2)));
 sigmax=1/(2*pi*sigmau);
 sigmay=1/(2*pi*sigmav);
 b=fft2(a);
 [e d]=size(b);
  i=1;
 G=zeros(r,c,S*K);
 IZ=zeros(r,c,S*K);
for m=0:S-1
    for n=0:K-1 
       fprintf(1,'.');
       for x=-r/2+1:r/2;
          for y=-c/2+1:c/2;
             xdash=(alpha^(-m))*((x)*cos(n*pi/K)+(y)*sin(n*pi/K));
             ydash=(alpha^(-m))*((y)*cos(n*pi/K)-(x)*sin(n*pi/K));
             g(r/2+x,r/2+y)=(alpha^(-m))*((1/(2*pi*sigmax*sigmay))*exp(-0.5*(((xdash^2)/(sigmax^2))+((ydash^2)/(sigmay^2)))+0.8i*pi*xdash));
          end
       end
       [rr cc]=size(g); 
       G(:,:,i)=g;
       h=fft2(g); 
       z=b.*h;
       iz=ifft2(z);
       IZ(:,:,i)=iz;
       FeatureVector(i)=mean(abs(iz(:)));
       i=i+1;
    end
 end
 fprintf(1,'\n');

%%%%%%%%%

当我运行此代码时,出现此错误:

Error using ==> times Matrix dimensions must agree. Error in ==> ComputeGaborFeatures4 at 37 z=b.*h;



请问是否有人可以帮助我解决此错误,或者有人可以给我另一个简单的 gabor 过滤器?

最佳答案

该错误是由于调用数组乘法 (.*) 时 b 和 h 的大小不相等,因为 rr 不等于 r 而 cc 不等于 c。

要么您想使用矩阵乘法 (*),要么您需要在调用 fft2 之前使 g 和 a 具有相同的大小。

关于使用 Gabor 滤波器的图像纹理特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3729024/

相关文章:

java - 如何将图像保存到用户的手机上?然后加载它?

windows - 如何为动画 GIF 加水印并将 2 个 ImageMagick 命令组合在一起?

reporting-services - 在 SSRS 上的 MDX 查询中对度量使用过滤器

javascript - 从数组中删除重复对象总是返回第 n 个索引

list - 从嵌套列表中过滤元素

c++ - CopyResource 从一个 D3D11 设备到另一个

java - 无法显示来自本地主机的图像

c# - 将图像作为二进制数据写入文本文件 C#

c++ - 了解纹理如何与 CUDA 配合使用

c++ - 如何在cocos2d-x中制作清晰的纹理