主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

graycomatrix

R2026a

从图像创建灰度共生矩阵

描述

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]。

灰度级的数量,指定为正整数。例如,如果 NumLevels 为 8,则 graycomatrix 将 I 中的值缩放为 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] 来指定这些偏移量。

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

数据类型: logical

输出参量

全部折叠

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

数据类型: double

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

数据类型: double

算法

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

下图显示 graycomatrix 如何使用 [0 1] 的默认偏移量计算 GLCM 中的前三个值。在 GLCM 中,元素 (1, 1) 包含值 1,因为输入图像中两个水平相邻像素分别具有值 1 和 1 的情形只有一处。GLCM 中的元素 (1, 2) 包含值 2,因为两个水平相邻像素具有值 1 和 2 的情形有两处。GLCM 中的元素 (1, 3) 的值为 0,因为不存在两个水平相邻像素的值分别为 1 和 3 的情况。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 之前推出