本文主要是介绍图像的纹理特性之灰度共生矩阵的graycomatrix函数及其matlab实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
图像的灰度共生矩阵(Gray-level co-occurrence matrix from an image)
灰度共生矩阵是像素距离和角度的矩阵函数,它通过计算图像中一定距离和一定方向的两点灰度之间的相关性,来反映图像在方向、间隔、变化幅度及快慢上的综合信息。
graycomatrix
matlab(r2013b)里如下解释和使用
语法
glcm = graycomatrix(I)
glcms = graycomatrix(I, param1, val1,param2, val2,...)
[glcm, SI] = graycomatrix(...)
描述
glcm = graycomatrix(I):创建图形I的灰度共生矩阵glcm。graycomatrix通过计算灰度值(灰度强度)i与水平相邻的灰度值为j的相邻频率,来得到GLCM。(也可以使用'Offsets'参数,指定像素的空间临接关系)。GLCM里的元素(i,j)代表代表灰度i与灰度j在图像中水平相邻的次数。
graycomatrix从图像的scaled version中得到GLCM。默认的,如果是一个二进制图像,graycomatrix将这个图像转换到两个灰度级(two grey-levels)。如果I是一个强度图像,graycomatrix将该图像转换到8个灰度级。使用NumLevels 参数可以指定graycomatrix转换后的灰度级别,使用'GrayLimits' 参数可以指定转化的方式。
下图显示了在4*5的图像中,graycomatrix如何计算GLCM里的一些值。
图1
glcms = graycomatrix(I,param1,val1,param2,val2,...)返回一个或多个灰度共生矩阵,具体取决于可选参数/值。 参数名称可以缩写,大小写也不重要。
参数
按字母表顺序列出如下参数
'GrayLimits' 描述: 一个二元素向量[low high],用于指定I中的值如何缩放到gray级别。 如果N是用于缩放的灰度级数(参见参数'NumLevels'),范围[low high]被划分为N个相等的宽度bins,并且bin中的值被映射到一个灰度级别。 小于等于low的灰度值的缩放为1.将大于等于high的灰度值缩放为“NumLevels”。如果“GrayLimits”设置为[],则将I中的灰度级最小和最大灰度值设置为low和high,[min{I(:)} max{I(:)}] 默认 如 double[0 1] int16 [-32768 32767],不写该参数时, 默认为[0,1]
理解:具体过程是这样的,是从图像I缩放到si,然后根据si来得到glcm(图1)。
matlab示例如下
i =
1.0000 1.5000 2.0000
2.5000 3.0000 3.5000
4.0000 4.5000 5.0000
>> [glcms,si] = graycomatrix(i,'graylimits',[1,4])
glcms =
0 1 0 0 0 0 0 0
0 0 1 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 1 0 0
0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 2
si =
1 2 3
5 6 7
8 8 8
理解:由i 根据'graylimits',[1,4] 将i映射为灰度级别默认为1-8的si 小于等于1映射为1,大于等于4映射为8,1-4之间再划分六个等级带对应至2 3 4 5 6 7,
接着按默认水平邻接的方法,将像素值水平邻接的次数放至矩阵glcm中
'NumLevels' 描述:指定了在I中缩放灰度值时要使用的灰度级数的整数。例如,如果NumLevels为8(默认为8),则graycomatrix将I中的值缩放为1到8之间的整数。灰度级数决定了 灰度共生矩阵(glcm)的大小。
matlab示例如下
>> i=[-0.1 0.5;1 2]
i =
-0.1000 0.5000
1.0000 2.0000
>> [glcms,si] = graycomatrix(i,'numlevels',3)
glcms =
0 1 0
0 0 0
0 0 1
si =
1 2
3 3
理解:未写graylimits 默认为[0,1],所以大于等于1的为2,小于等于0为1,0-1为2,glcm为3*3矩阵
'Offset' 描述:p*2整数数组,指定感兴趣像素与其邻像素之间的距离。 数组中的每一行都是一个两元素向量[row_offset,col_offset],用于指定像素的关系或偏移量。 row_offset是感兴趣像素与其邻居之间的行数。 col_offset是感兴趣像素与其邻居之间的列数。由于偏移量通常表示为一个角度,下表列出了指定公共角度的偏移值,与定像素距离D(理解:[0,D]为0度:0代表行距为0,即同一行,d代表列相距为d,为正数在右边,所以为0度)。 默认为[0,1]
>> i=[-0.1 0.5 1;1 2 3]
i =
-0.1000 0.5000 1.0000
1.0000 2.0000 3.0000
>> [glcms,si] = graycomatrix(i,'numlevels',3,'offset',[0 2])
glcms =
0 0 1
0 0 0
0 0 1
si =
1 2 3
3 3 3
理解,offset',[0 2],所以,glcm坐标为【1,2】处没有值。【1.3】【3,3】处有值
'Symmetric' 描述:布尔值创建一个GLCM,其中不考虑像素对中的值的排序。 例如,当“symmetric”设置为true时,当计算值1与值2相邻的次数时,灰度矩阵将计算1,2和2,1两个配对。当“symmetric”为“false”时,灰度矩阵仅计数1,2 或2,1,取决于“offset”的值。 默认为false
[glcm, SI] = graycomatrix(...) 返回用于计算灰度生成矩阵glsm的缩放图像SI。 SI中的值介于1和NumLevel之间。
Class Support
I可以是数字或逻辑矩阵,但必须是二维,实数和非稀疏的。 SI是具有与I相同大小的double型矩阵。glcms是'NumLevels'*'NumLevels'*P的double型阵列,其中P是'offset'中的偏移数。
notes
灰度共生矩阵的另一个名称是灰度空间依赖矩阵(gray-level spatial dependence matrixgray-level spatial dependence matrix)。 此外,文献中常常使用cooccurrence,而没有连字符。
如果像素包含NaN,则灰度矩阵忽略该像素对儿。
graycomatrix替换正值Infs为NumLevels值,并取代负值Infs为值1。
如果相应的相邻像素落在图像边界之外,则灰度矩阵忽略边界像素。
当“Symmetric”设置为true时,创建的GLCM在其对角线上是对称的,并且相当于Haralick(1973)描述的GLCM。 GLCM通过以下语法生成,“Symmetric”设置为true
灰度矩阵(I,'offset',[0 1],'Symmetric',true)
相当于以下声明产生的两个GLCM的总和,其中“Symmetric”被设置为false。
graycomatrix(I,'offset',[0 1],'Symmetric',false)
graycomatrix(I,'offset',[0 -1],'Symmetric',false)Examples
例子
1、
I = imread('circuit.tif');
glcm = graycomatrix(I,'Offset',[2 0]);
2、
I = [ 1 1 5 6 8 8; 2 3 5 7 0 2; 0 2 3 5 6 7];
[glcm,SI] = graycomatrix(I,'NumLevels',9,'G',[])
这篇关于图像的纹理特性之灰度共生矩阵的graycomatrix函数及其matlab实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!