matlab纹理特征提取代码

[html]  view plain copy
  1. function [t]=statxture(f,scale)  
  2. if nargin==1  
  3.     scale(1:6)=1;  
  4. else  
  5.     scale=scale(1:6)';  
  6. end  
  7. p=imhist(f);                  %p是256*1的列向量  
  8. p=p./numel(f);  
  9. L=length(p);  
  10. [v,mu]=statmoments(p,3);  
  11. %计算六个纹理特征  
  12. t(1)=mu(1);                   %平均值  
  13. t(2)=mu(2).^0.5;              %标准差   
  14. varn=mu(2)/(L-1)^2;       
  15. t(3)=1-1/(1+varn);            %平滑度首先为(0~1)区间通过除以(L-1)^2将变量标准化  
  16. t(4)=mu(3)/(L-1)^2;           %三阶矩(通过除以(L-1)^2将变量标准化)  
  17. t(5)=sum(p.^2);               %一致性  
  18. t(6)=-sum(p.*(log2(p+eps)));  %熵  
  19. T=[t(1) t(2) t(3) t(4) t(5) t(6)]  
  20. %缩放值,默认为1  
  21. t=t.*scale;  
  22. end  
  23.   
  24. function [v,unv]=statmoments(p,n)  
  25. Lp=length(p);  
  26. if (Lp~=256)&(Lp~=65536)  
  27.     error('p must be a 256- or 65536-element vector.');  
  28. end  
  29. G=Lp-1;  
  30. p=p/sum(p);p=p(:);  
  31. z=0:G;  
  32. z=z./G;  
  33. m=z*p;  
  34. z=z-m;  
  35. v=zeros(1,n);  
  36. v(1)=m;  
  37. for j=2:n  
  38.     v(j)=(z.^j)*p;  
  39. end  
  40. if nargout>1  
  41.     unv=zeros(1,n);  
  42.     unv(1)=m.*G;  
  43.     for j=2:n  
  44.         unv(j)=((z*G).^j)*p  
  45.     end  
  46. end  
  47. end  

f为输入的图片,必须是灰度图像。

因为纹理特征提取是灰度的纹理特征。

matlab中建立一个function的M文件

拷贝上面的代码运行就可以了。

你可能感兴趣的:(matlab)