主要内容

graycomatrix

从图像创建灰度共生矩阵

说明

glcm = graycomatrix(I) 从图像 I 创建灰度共生矩阵 (GLCM)。

graycomatrix 通过计算灰度级(灰度强度)值为 I 的像素与灰度级值为 j 的像素水平相邻的频率来创建 GLCM。glcm 中的每个元素 (i,j) 指定值为 i 的像素与值为 j 的像素水平相邻的次数。

glcm = graycomatrix(I,Name=Value) 根据名称-值参量的值调整 GLCM 计算的各个方面。例如,您可以通过使用 Offsets 名称-值参量为一个图像创建多个 GLCM。

示例

[glcm,SI] = graycomatrix(___) 还返回缩放图像 SI,用于计算 GLCM。

示例

示例

全部折叠

将灰度图像读入工作区。

I = imread('circuit.tif');
imshow(I)

Figure contains an axes object. The hidden axes object contains an object of type image.

计算灰度图像的灰度共生矩阵 (GLCM)。默认情况下,graycomatrix 基于像素的水平接近度 [0 1] 计算 GLCM。这是与感兴趣的像素位于同一行的下一个像素。此示例指定不同的偏移量:同一列上相隔两行。

glcm = graycomatrix(I,'Offset',[2 0])
glcm = 8×8

       14205        2107         126           0           0           0           0           0
        2242       14052        3555         400           0           0           0           0
         191        3579        7341        1505          37           0           0           0
           0         683        1446        7184        1368           0           0           0
           0           7         116        1502       10256        1124           0           0
           0           0           0           2        1153        1435           0           0
           0           0           0           0           0           0           0           0
           0           0           0           0           0           0           0           0

创建简单的 3×6 示例数组。

I = [ 1 1 5 6 8 8; 2 3 5 7 0 2; 0 2 3 5 6 7]
I = 3×6

     1     1     5     6     8     8
     2     3     5     7     0     2
     0     2     3     5     6     7

计算灰度共生矩阵 (GLCM),并返回计算中使用的缩放图像。此示例为 GrayLimits 参数指定空括号,从而使用输入图像中的最小和最大灰度值作为限值。

[glcm,SI] = graycomatrix(I,'NumLevels',9,'GrayLimits',[])
glcm = 9×9

     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 = 3×6

     2     2     6     7     9     9
     3     4     6     8     1     3
     1     3     4     6     7     8

将灰度图像读入工作区。

I = imread('cell.tif');
imshow(I)

Figure contains an axes object. The hidden axes object contains an object of type image.

定义四个偏移量。

offsets = [0 1; -1 1;-1 0;-1 -1];

计算 GLCM,同时返回缩放后的图像。显示缩放图像,对数据值额外执行一次重新缩放,使之处于范围 [0, 1] 内。

[glcms,SI] = graycomatrix(I,'Offset',offsets);
imshow(rescale(SI))

Figure contains an axes object. The hidden axes object contains an object of type image.

注意该函数如何返回由四个 GLCM 组成的数组。

whos
  Name           Size              Bytes  Class     Attributes

  I            159x191             30369  uint8               
  SI           159x191            242952  double              
  glcms          8x8x4              2048  double              
  offsets        4x2                  64  double              

将灰度图像读入工作区。

I = imread('circuit.tif');
imshow(I)

Figure contains an axes object. The hidden axes object contains an object of type image.

使用 Symmetric 选项计算 GLCM,同时返回缩放图像。当您将 Symmetric 设置为 true 时创建的 GLCM 是关于其对角线对称的,等效于 Haralick (1973) 描述的 GLCM。

[glcm,SI] = graycomatrix(I,'Offset',[2 0],'Symmetric',true);
glcm
glcm = 8×8

       28410        4349         317           0           0           0           0           0
        4349       28104        7134        1083           7           0           0           0
         317        7134       14682        2951         153           0           0           0
           0        1083        2951       14368        2870           2           0           0
           0           7         153        2870       20512        2277           0           0
           0           0           0           2        2277        2870           0           0
           0           0           0           0           0           0           0           0
           0           0           0           0           0           0           0           0

显示缩放图像,对数据值额外执行一次重新缩放,使之处于范围 [0, 1] 内。

imshow(rescale(SI))

Figure contains an axes object. The hidden axes object contains an object of type image.

输入参数

全部折叠

输入图像,指定为二维数值矩阵或二维逻辑矩阵。

名称-值参数

全部折叠

将可选参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

示例: glcm = graycomatrix(I,Offset=[2 0]) 指定行偏移量为 2,列偏移量为 0。

如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: glcm = graycomatrix(I,"Offset",[2 0]) 指定行偏移量为 2,列偏移量为 0。

将输入图像缩放到灰度级所使用的范围,指定为 [low high] 形式的二元素向量。范围 [low high] 划分为 NumLevels 个等宽的 bin,并且一个 bin 中的灰度值映射到单个灰度级。小于或等于 low 的灰度值将映射到 1。大于或等于 high 的灰度值将映射到 NumLevels

如果 GrayLimits 设置为 [],则 graycomatrix 使用 I 中的最小和最大灰度值作为限值 [min(I(:)) max(I(:))],例如,对于数据类型为 double 的范围为 [0, 1],而数据类型为 int16 的范围为 [-32768, 32767]。

灰度级的数量,指定为正整数。例如,如果 NumLevels8,则 graycomatrixI 中的值缩放为 1 到 8 之间的整数。灰度级的数量确定 GLCM 的大小。数值图像的默认灰度级的数量为 8,逻辑图像的默认灰度级的数量为 2

感兴趣的像素与其邻点之间的偏移量,指定为由整数组成的 p×2 矩阵。矩阵中的每行均为一个二元素向量,即 [row_offset col_offset],它指定一对像素的空间关系。row_offset 是关注的像素与其邻点之间的行数。col_offset 是感兴趣的像素与其邻点之间的列数。

由于偏移量通常以角度表示,下表列出了在给定像素距离 D 时与常见角度对应的偏移值。

角度

偏移量

0

[0 D]

45

[-D D]

90[-D 0]
135[-D -D]

下图显示距离感兴趣像素 1 的四个偏移量。您将使用矩阵 [0 1; -1 1; -1 0; -1 -1] 来指定这些偏移量。

考虑值的顺序,指定为 truefalse。例如,当 Symmetric 设置为 true 时,graycomatrix 在计算值 1 与值 2 相邻的次数时,会将 1,2 和 2,1 对组都进行计数。当 Symmetric 设置为 false 时,graycomatrix 根据 Offset 的值仅对 1,2 或 2,1 对组进行计数。

数据类型: logical

输出参量

全部折叠

灰度共生矩阵,以 NumLevels×NumLevels×p 数组形式返回,其中 pOffset 中偏移量的数目。

数据类型: double

用于 GLCM 计算的缩放图像,以与输入图像大小相同的数值矩阵形式返回。SI 中的值介于 1NumLevels 之间。

数据类型: double

算法

graycomatrix 根据缩放后的图像计算 GLCM。默认情况下,如果 I 是二值图像,则 graycomatrix 将图像缩放到两个灰度级。如果 I 是灰度图像,则 graycomatrix 将图像缩放到八个灰度级。您可以通过使用 NumLevels 名称-值参量来指定 graycomatrix 用于缩放图像的灰度级的数量。您可以使用 GrayLimits 名称-值参量来调整 graycomatrix 缩放值的方式。

下图显示 graycomatrix 如何使用 [0 1] 的默认偏移量计算 GLCM 中的前三个值。在 GLCM 中,元素 (1, 1) 包含值 1,因为输入图像中两个水平相邻像素分别具有值 11 的情形只有一处。GLCM 中的元素 (1, 2) 包含值 2,因为两个水平相邻像素具有值 12 的情形有两处。GLCM 中的元素 (1, 3) 的值为 0,因为不存在两个水平相邻像素的值分别为 13 的情况。graycomatrix 继续处理输入图像,扫描图像中的其他像素对组 (i, j) 并将计数记录在 GLCM 的对应元素中。

如果像素对组中有任一像素包含 NaN,则 graycomatrix 忽略该像素对组,并用值 NumLevels 替换正的 Infs,用值 1 替换负的 Infs。如果对应的相邻像素位于图像边界之外,则 graycomatrix 忽略边界像素。

Symmetric 设置为 true 时创建的 GLCM 是关于其对角线对称的,等效于 Haralick (1973) 描述的 GLCM。在 Symmetric 设置为 true 时由以下语法生成的 GLCM

graycomatrix(I,Offset=[0 1],Symmetric=true)

等效于在 Symmetric 设置为 false 时由以下语句生成的两个 GLCM 的总和。

graycomatrix(I,Offset=[0 1],Symmetric=false) 
graycomatrix(I,Offset=[0 -1],Symmetric=false)

参考

[1] Haralick, R. M., K. Shanmugan, and I. Dinstein, "Textural Features for Image Classification", IEEE Transactions on Systems, Man, and Cybernetics, Vol. SMC-3, 1973, pp. 610-621.

[2] Haralick, R. M., and L. G. Shapiro. Computer and Robot Vision: Vol. 1, Addison-Wesley, 1992, p. 459.

版本历史记录

在 R2006a 之前推出