[html] view plain copy function [t]=statxture(f,scale) if nargin==1 scale(1:6)=1; else scale=scale(1:6)'; end p=imhist(f); %p是256*1的列向量 p=p./numel(f); L=length(p); [v,mu]=statmoments(p,3); %計算六個紋理特徵 t(1)=mu(1); %平均值 t(2)=mu(2).^0.5; %標準差 varn=mu(2)/(L-1)^2; t(3)=1-1/(1+varn); %平滑度首先為(0~1)區間通過除以(L-1)^2將變數標準化 t(4)=mu(3)/(L-1)^2; %三階矩(通過除以(L-1)^2將變數標準化) t(5)=sum(p.^2); %一致性 t(6)=-sum(p.*(log2(p+eps))); %熵 T=[t(1) t(2) t(3) t(4) t(5) t(6)] %縮放值,預設為1 t=t.*scale; end function [v,unv]=statmoments(p,n) Lp=length(p); if (Lp~=256)&(Lp~=65536) error('p must be a 256- or 65536-element vector.'); end G=Lp-1; p=p/sum(p);p=p(:); z=0:G; z=z./G; m=z*p; z=z-m; v=zeros(1,n); v(1)=m; for j=2:n v(j)=(z.^j)*p; end if nargout>1 unv=zeros(1,n); unv(1)=m.*G; for j=2:n unv(j)=((z*G).^j)*p end end end
f為輸入的圖片,必須是灰階映像。
因為紋理特徵提取是灰階的紋理特徵。
matlab中建立一個function的M檔案
拷貝上面的代碼運行就可以了。