Main Content

graycomatrix

从图像创建灰度共生矩阵

说明

glcm = graycomatrix(I) 从图像 I 创建灰度共生矩阵 (GLCM)。灰度共生矩阵又名灰度空间相关性矩阵

graycomatrix 通过计算灰度级(灰度强度)值为 I 的像素与灰度级值为 j 的像素水平相邻的频率来创建 GLCM。(您可以使用 Offsets 名称-值参量指定其他像素空间关系。)glcm 中的每个元素 (i,j) 指定值为 i 的像素与值为 j 的像素水平相邻的次数。

示例

glcm = graycomatrix(I,Name=Value) 根据可选名称-值参量的值,返回一个或多个灰度共生矩阵。

示例

[glcm,SI] = graycomatrix(___) 返回缩放后的图像 SI,用于计算灰度共生矩阵。

示例

全部折叠

将灰度图像读入工作区。

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

计算灰度图像的灰度共生矩阵 (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)

定义四个偏移量。

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

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

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

注意该函数如何返回由四个 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)

使用 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))

输入参数

全部折叠

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

名称-值参数

将可选的参量对组指定为 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] 形式的二元素向量。如果 N 是用于缩放的灰度级的数量(请参阅 NumLevels),则范围 [low high] 划分为 N 个等宽 bin,每个 bin 中的值映射到一个灰度级。小于或等于 low 的灰度值将缩放为 1。大于或等于 high 的灰度值将缩放至 NumLevels。如果 GrayLimits 设置为 [],则 graycomatrix 使用 I 中的最小和最大灰度值作为限值 [min(I(:)) max(I(:))],例如,双精度类的范围为 [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]

下图表示数组:offset = [0 1; -1 1; -1 0; -1 -1]

Each row of the offset array indicates the horizontal and vertical offset from the center pixel, respectively.

考虑值的顺序,指定为布尔值 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 用于缩放图像的灰度级的数目,以及 graycomatrix 使用 GrayLimits 名称-值参量来缩放值的方式。

下图显示 graycomatrix 如何计算 4×5 图像 I 的 GLCM 中的几个值。GLCM 中的元素 (1,1) 值为 1,因为图像中两个水平相邻的像素分别具有值 11 的情况只有一处。GLCM 中的元素 (1,2) 值为 2,因为图像中两个水平相邻的像素分别具有值 12 的情况有两处。graycomatrix 继续采用此方法填充 GLCM 中的所有值。

Mapping between three pairs of pixels in an image and the corresponding elements of the 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 之前推出