(转载)
灰度共生矩阵法,顾名思义,就是通过计算灰度图像得到它的共生矩阵,然后透过计算这个共生矩阵得到矩阵的部分特征值,来分别代表图像的某些纹理特征(纹理的定义仍是难点)。灰度共生矩阵能反映图像灰度关于方向、相邻间隔、变化幅度的综合信息,它是分析图像的局部模式和它们排列规则的基础。
对于灰度共生矩阵的理解,需要明确几个概念:方向,偏移量和灰度共生矩阵的阶数。
1、 方向
一般计算过程会分别选在几个不同的方向来进行,常规的是0°、45°、90°、135°,理论上的所有方向计算方法不可取。
定义如下:
水平方向为0°垂直的90°,以及45°和135°(大致如上图所画)
2、偏移量(offset:下面例子中,取值为1来帮助理解)
3、灰度共生矩阵的阶数和灰度图像的灰度值的阶数是一致的,即当灰度图像的灰度值的阶数是N时,灰度共生矩阵为N*N的矩阵。
0 | 0 | 0 | 1 | 2 |
0 | 0 | 1 | 1 | 2 |
0 | 1 | 1 | 1 | 1 |
1 | 1 | 2 | 2 | 1 |
1 | 2 | 2 | 1 | 0 |
假定offset为1,取0°方向求共生矩阵时:
最初取点(1,1) 和(1,2),此时在频度矩阵的(0,0)处加1((1,1)点的灰度值为0,(1,2)点的灰度也为0);
然后取(1,2) 和(1,3)点,此时也在频度矩阵的(0,0)处加1;
接着取到(1,3) 和(1,4)点,此时也在频度矩阵的(0,0)处加1;
接着取到(1,4) 和(1,5) 点,此时在频度矩阵的(1,0)处加1((1,5)点的灰度值为1,(1,4)点的灰度为0)。
直到每一行都取遍即可。
假定offset为1,取45°方向求共生矩阵时:
最初取点(1,1) 和(2,2),此时在45°方向频度矩阵的(0,0)处加1((1,1)点的灰度值为0,(2,2)点的灰度也为0);
然后取(1,2) 和(2,3)点,此时在45°方向频度矩阵的(0,1)处加1;
接着取到(1,3) 和(2,4)点,此时也在45°方向频度矩阵的(0,1)处加1;
接着取到(1,4) 和(2,5) 点,此时在45°方向频度矩阵的(1,2)处加1((1,4)点的灰度值为1,(2,5)点的灰度为2)。
然后下一行,直到每一行合适的值都取遍即可。
另两个方向的情况相似。
最后得到如下四个频度矩阵
10 | 0 | 1 | 2 |
0 | 3 | 3 | 0 |
1 | 1 | 5 | 4 |
2 | 0 | 2 | 2 |
11 | 0 | 1 | 2 |
0 | 1 | 5 | 0 |
1 | 0 | 3 | 5 |
2 | 1 | 1 | 0 |
0°方向频度矩阵45°方向频度矩阵
10 | 0 | 1 | 2 |
0 | 3 | 3 | 0 |
1 | 1 | 6 | 3 |
2 | 0 | 2 | 2 |
10 | 0 | 1 | 2 |
0 | 3 | 0 | 0 |
1 | 0 | 7 | 2 |
2 | 0 | 2 | 2 |
90°方向频度矩阵135°方向频度矩阵
在用matlab编程时由于matlab的矩阵的下脚标是从1开始的所以矩阵的形式类似于下面的形式:
p(I(i,j)+1,I(i,j+1)+1)= p(I(i,j)+1,I(i,j+1)+1)+1;这是0°方向的计算式
这里,灰度阶数即从最低的0变成最低为1
四个方向的计算式,大致如下:
p1(IN(M,N)+1,IN(M,N+1)+1)=p1(IN(M,N)+1,IN(M,N+1)+1)+1;%是共生矩阵0度的计算式
p1(IN(M,N)+1,IN(M-1,N+1)+1)=p1(IN(M,N)+1,IN(M-1,N+1)+1)+1;%是45度的计算式
p1(IN(M,N)+1,IN(M-1,N)+1)=p1(IN(M,N)+1,IN(M-1,N)+1)+1;%是共生矩阵90度的计算式
p1(IN(M,N)+1,IN(M-1,N-1)+1)=p1(IN(M,N)+1,IN(M-1,N-1)+1)+1;%是135度的计算式
现在各个方向统计完毕,然后将频度矩阵/总频次即得共生矩阵
这时候得到四个共生矩阵,分别是、、、
其编程实现,可参见如下代码:
%2.为了--减少计算量,对原始图像灰度级压缩,将Gray量化成16级
%--------------------------------------------------------------------------
for i = 1:M
for j =1:N
for n = 1:256/16
if (n-1)*16<=Gray(i,j)&Gray(i,j)<=(n-1)*16+15
Gray(i,j) = n-1;
end
end
end
end
%--------------------------------------------------------------------------
%3.计算四个共生矩阵P,取距离为1,角度分别为0,45,90,135
%--------------------------------------------------------------------------
P = zeros(16,16,4);
for m = 1:16
for n =1:16
for i = 1:M
for j = 1:N
if j
P(m,n,1) = P(m,n,1)+1;
P(n,m,1) = P(m,n,1);
end
if i>1&j
P(m,n,2) = P(m,n,2)+1;
P(n,m,2) = P(m,n,2);
end
if i
P(m,n,3) = P(m,n,3)+1;
P(n,m,3) = P(m,n,3);
end
if i
P(m,n,4) = P(m,n,4)+1;
P(n,m,4) = P(m,n,4);
end
end
end
if m==n
P(m,n,:) = P(m,n,:)*2;
end
end
end
%%---------------------------------------------------------
% 对共生矩阵归一化
%%---------------------------------------------------------
for n = 1:4
P(:,:,n) =P(:,:,n)/sum(sum(P(:,:,n)));
end