纹理特征:灰度共生矩阵

(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;
posted @ 2013-07-17 14:58  wishchin  阅读(226)  评论(0编辑  收藏  举报