纹理特征:灰度共生矩阵
(1).CalTexture.m文件
function T = CalTexture(Image) [M,N,O] = size(Image);%% 得到图像的宽,高和通道 %-------------------------------------------------------------------------- %1.原始图像灰度化 %-------------------------------------------------------------------------- if O==3 Gray = double(0.3*Image(:,:,1)+0.59*Image(:,:,2)+0.11*Image(:,:,3)); else if O==1 Gray =Image; end; end; % imshow(Gray); %-------------------------------------------------------------------------- %2.Î灰度共生矩阵分块,减少计算量 %-------------------------------------------------------------------------- Layer =8; for i = 1:M for j = 1:N for n = 1:256/Layer if (n-1)*Layer <= Gray(i,j) && Gray(i,j)<=((n-1)*Layer +Layer-1) Gray(i,j) = n-1; end end end end %-------------------------------------------------------------------------- %3.计算四个方向的灰度矩阵0,45,90,135 %-------------------------------------------------------------------------- P = zeros(Layer,Layer,4); dis = 5; for m = 1:Layer for n = 1:Layer for i = 1:M for j = 1:N if j<N-dis&&Gray(i,j)==m-1&&Gray(i,j+dis)==n-1 P(m,n,1) = P(m,n,1)+1; %P(n,m,1) = P(m,n,1)+1; P(n,m,1) = P(n,m,1)+1; end if i<M-dis&&j<N-dis&&Gray(i,j)==m-1&&Gray(i+dis,j+dis)==n-1 P(m,n,2) = P(m,n,2)+1; P(n,m,2) = P(n,m,2)+1; end if i<M-dis&&Gray(i,j)==m-1&&Gray(i+dis,j)==n-1 P(m,n,3) = P(m,n,3)+1; P(n,m,3) = P(n,m,3)+1; end if i<M-dis&&j>dis&&Gray(i,j)==m-1&&Gray(i+dis,j-dis)==n-1 P(m,n,4) = P(m,n,4)+1; P(n,m,4) = P(n,m,4)+1; end end end if m==n P(m,n,:) = P(m,n,:)*2; end end end % % for n=1:4 % imshow(p(n)); % end %%--------------------------------------------------------- % ¶灰度矩阵归一化 %%--------------------------------------------------------- for n = 1:4 P(:,:,n) = P(:,:,n)/sum(sum(P(:,:,n))); end %-------------------------------------------------------------------------- %4.¶计算灰度矩阵的特征 %-------------------------------------------------------------------------- H = zeros(1,4); I = H; Ux = H; Uy = H; deltaX= H; deltaY = H; C =H; L =H; for n = 1:4 E(n) = sum(sum(P(:,:,n).^2)); %%计算能量 for i = 1:Layer for j = 1:Layer if P(i,j,n)~=0 H(n) = -P(i,j,n)*log(P(i,j,n))+H(n); %%计算熵 end I(n) = (i-j)^2*P(i,j,n)+I(n); %%计算中心矩 L(n) = P(i,j,n)/(1+(i-j).^2)+L(n);%计算惯性 Ux(n) = i*P(i,j,n)+Ux(n); %计算X均值 Uy(n) = j*P(i,j,n)+Uy(n); %计算Y均值 end end end for n = 1:4 for i = 1:Layer for j = 1:Layer deltaX(n) = (i-Ux(n))^2*P(i,j,n)+deltaX(n); % deltaY(n) = (j-Uy(n))^2*P(i,j,n)+deltaY(n); % % C(n) = i*j*P(i,j,n)+C(n); C(n) = (i-Ux(n))*(j-Uy(n))*P(i,j,n)+C(n);%计算相关性 end end %C(n) = (C(n)-Ux(n)*Uy(n))/deltaX(n)/deltaY(n); %Ïà¹ØÐÔ C(n)= C(n)/deltaX(n)/deltaY(n); end %-------------------------------------------------------------------------- T(1,1) = mean(E); T(2,1) = sqrt(cov(E)); T(1,2) = mean(H); T(2,2) = sqrt(cov(H)); T(1,3) = mean(I); T(2,3) = sqrt(cov(I)); T(1,4) = mean(C); T(2,4) = sqrt(cov(C));
//输出结果到数组,有四组结果
for n =1:4; T(3,n)=C(n); T(4,n)=E(n); T(5,n)=H(n); T(6,n)=I(n); T(7,n)=L(n); end;