www.gusucode.com > 灰度共生矩阵、灰度梯度共生矩阵提取纹理特征 > code6/GrayGradinet.m

    function OUT=GrayGradinet(IN)
% 灰度梯度共生矩阵 H
%归一化灰度梯度矩阵 H_basic

%小梯度优势 T1
% 大梯度优势 T2
% 灰度分布的不均匀性 T3
% 梯度分布的不均匀性 T4
% 能量 T5
% 灰度平均 T6
% 梯度平均 T7
% 灰度均方差 T8
% 梯度均方差 T9
% 相关 T10
% 灰度熵 T11
% 梯度熵 T12
% 混合熵 T13
% 惯性 T14
% 逆差矩 T15


gray=256;
% close all;



   
%  figure, imshow(IN);
gray=256;

[R,C]=size(IN);

%采用平方求和计算梯度矩阵
GM=zeros(R-1,C-1);
for i=1:R-1
    for j=1:C-1
        n_GM=(IN(i,j+1)-IN(i,j))^2+(IN(i+1,j)-IN(i,j))^2;
        GM(i,j)=sqrt(double(n_GM));
    end
end
% figure,imshow(GM);

%找出最大值最小值        
n_min=min(GM(:));
n_max=max(GM(:));
%把梯度图象灰度级离散化
%设置新的灰度级为new_gray
new_gray=32;

%新的梯度矩阵为new_GM
new_GM=zeros(R-1,C-1);
new_GM=uint8((GM-n_min)/(n_max-n_min)*(new_gray-1));



%计算灰度梯度共生矩阵
%梯度矩阵比轨度矩阵维数少1,忽略灰度矩阵最外围
H=zeros(gray,new_gray);
for i=1:R-1
    for j=1:C-1
        H(IN(i,j)+1,new_GM(i,j)+1)= H(IN(i,j)+1,new_GM(i,j)+1)+1;
    end
end

%归一化灰度梯度矩阵 H_basic
total=i*j;
H_basic=H/total;


%小梯度优势 T1
TT=sum(H);
T1=0;
for j=1:new_gray
    T1=T1+TT(1,j)/j^2;
end
T1=T1/total;


%计算大梯度优势 T2
T2=0;
for j=1:new_gray
    T2=T2+TT(1,j)*(j-1);
end
T2=T2/total;


%计算灰度分布的不均匀性 T3
T3=0;
TT1=sum(H');
for j=1:gray
    T3=T3+TT1(1,j)^2;
end
T3=T3/total;


%计算梯度分布的不均匀性 T4
T4=0;
for j=1:new_gray
    T4=T4+TT(1,j)^2;
end
T4=T4/total;


%计算能量 T5
T5=0;
for i=1:gray
    for j=1:new_gray
        T5=T5+H_basic(i,j)^2;
    end
end


%计算灰度平均 T6
TT2=sum((H_basic)');
T6=0;
for j=1:gray
    T6=T6+(j-1)*TT2(1,j);
end


%计算梯度平均 T7
T7=0;
TT3=sum(H_basic);
for j=1:new_gray
    T7=T7+(j-1)*TT3(1,j);
end


%计算灰度均方差 T8
T8=0;
for j=1:gray
    T8=T8+(j-1-T6)^2*TT2(1,j);
end
T8=sqrt(T8);


%计算梯度均方差 T9
T9=0;
for j=1:new_gray
    T9=T9+(j-1-T7)^2*TT3(1,j);
end
T9=sqrt(T9);


% 计算相关 T10
T10=0;
for i=1:gray
    for j=1:new_gray
        T10=T10+(i-1-T6)*(j-1-T7)*H_basic(i,j);
    end
end


%计算灰度熵 T11
T11=0;
for j=1:gray
    T11=T11+TT2(1,j)*log10(TT2(1,j)+eps);
end
T11=-T11;


%计算梯度熵 T12
T12=0;
for j=1:new_gray
    T12=T12+TT3(1,j)*log10(TT3(1,j)+eps);
end
T12=-T12;


%计算混合熵 T13
T13=0;
for i=1:gray
    for j=1:new_gray
        T13=T13+H_basic(i,j)*log10(H_basic(i,j)+eps);
    end
end
T13=-T13;


%计算惯性 T14
T14=0;
for i=1:gray
    for j=1:new_gray
        T14=T14+(i-j)^2*H_basic(i,j);
    end
end


%计算逆差矩 T15
T15=0;
for i=1:gray
    for j=1:new_gray
        T15=T15+H_basic(i,j)/(1+(i-j)^2);
    end
end


x=1:50:750;

OUT(1,1)=T1;
OUT(1,2)=T2;
OUT(1,3)=T3;
OUT(1,4)=T4;
OUT(1,5)=T5;
OUT(1,6)=T6;
OUT(1,7)=T7;
OUT(1,8)=T8;
OUT(1,9)=T9;
OUT(1,10)=T10;
OUT(1,11)=T11;
OUT(1,12)=T12;
OUT(1,13)=T13;
OUT(1,14)=T14;
OUT(1,15)=T15;
% if num>2
%     plot(x,OUT,'-');
%     hold on;
% else
%     plot(x,OUT,'-*r');
%     hold on;
% end