灰度共生矩阵的接触知识,http://www.cnblogs.com/tiandsp/archive/2013/03/23/2977673.html
初学者再看如此多的公式,可能看也看不懂。那就简单的办法就是直接看图(matlab help文件中的):
刚开始看的人,肯定也摸不着头脑。
我这里解释下两边矩阵的含义:
(1)左边的矩阵,你可以想成某图像的像素(当然不是rgb的,可以认为是灰度图)
(2)右边的矩阵(定义为GLCM):是生成的灰度共生矩阵。关于维数:这里是8*8的,但实际情况中,你可以是2*2,4*4,16*16等等(在matlab中,如果你是二值图形,维数默认为2,如果是灰度图,默认为8)。
现在再讲讲GLCM里面数字的含义,如GLCM(1,1)就是从左往右水平的像素是分别都是1,1的次数。从左边的矩阵可以看出,只有一次,同理GLCM(1,2)=2,因为有从左往右的像素分别是1,2的情况有两种,再比如GLCM(2,2)=0,因为没有从左往右像素分别是2,2的情况。(这里的从左往右是相邻的)。
我相信在这里,初学者都明白了,GLCM的如何生成的吧。
(1)下面讲讲关于matlab自带的graycomartix函数吧(原理其实很简单,你可以自己写个函数):
我上面讲的例子,其实可以只用一个函数就可以完成。
gray = [1 1 5 6 8 2 3 5 7 1 4 5 7 1 2 8 5 1 2 5]; GLCM = graycomatrix(gray,'GrayLimits',[]);
GLSM =
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 16
原因是,GrayLimits参数的默认值是改种类型的范围,如double的范围[0 1] int16的范围[-32768 32767]
(2)另外,关于graycomatrix函数,你可以写成
GLCM = graycomatrix(gray,'G',[]);
因为不论参数不论是‘G’还是‘Graycomatrix’还是‘g’都可以被识别的。
(3)最后不要混淆,GLCM的矩阵大小和你原始的gray是不一样的。(GLCM的大小只和参数‘graylimits’有关!)
[GLCM, SI] = graycomatrix(gray,'G',[]); 这里的得到的矩阵SI才是和gray矩阵一样的。
SI的解释:对矩阵gray的像素进行分类,如果你设的参数“NumLvels”是8,那么灰度共生矩阵就将gray线性分类成8类,对应的类的数值(1-8)就是SI矩阵。
for example:
gray = [ 1 1 5 6 8 8; 2 3 5 7 0 2; 0 2 3 5 6 7]; [glcm,SI] = graycomatrix(gray,'NumLevels',9,'G',[])
glcm =
0 0 2 0 0 0 0 0 0
0 1 0 0 0 1 0 0 0
0 0 0 2 0 0 0 0 0
0 0 0 0 0 2 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 2 1 0
0 0 0 0 0 0 0 1 1
1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1
SI =
2 2 6 7 9 9
3 4 6 8 1 3
1 3 4 6 7 8
gray就是3*6的矩阵,SI就是gray对应的分类,因为参数“NumLevels”设为9,所以SI的数值就是1-9,大小和gray一样。而glcm和和前面讲的一样!