Contenido principal

graycomatrix

Crear una matriz de coocurrencia de nivel de gris a partir de una imagen

Descripción

glcm = graycomatrix(I) crea una matriz de coocurrencia de nivel de gris (GLCM) a partir de la imagen I.

graycomatrix crea la GLCM calculando la frecuencia con la que un píxel con valor de nivel de gris (intensidad de la escala de grises) i aparece horizontalmente adyacente a un píxel con valor j. Cada elemento (i, j) de glcm especifica el número de veces que el píxel con valor i ocurrió horizontalmente adyacente a un píxel con valor j.

glcm = graycomatrix(I,Name=Value) ajusta aspectos del cálculo de la GLCM en función de los valores de los argumentos nombre-valor. Por ejemplo, puede crear varias GLCM para una imagen utilizando el argumento nombre-valor Offsets.

ejemplo

[glcm,SI] = graycomatrix(___) también devuelve la imagen escalada, SI, que se utiliza para calcular la GLCM.

ejemplo

Ejemplos

contraer todo

Lea una imagen en escala de grises en el área de trabajo.

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

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

Calcule la matriz de coocurrencia de nivel de gris (GLCM) para una imagen en escala de grises. De forma predeterminada, graycomatrix calcula la GLCM basándose en la proximidad horizontal de los píxeles: [0 1]. Es decir, el píxel situado junto al píxel de interés en la misma fila. Este ejemplo especifica un desplazamiento diferente: dos filas de separación en la misma columna.

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

Cree un arreglo de muestra simple de 3 por 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

Calcule la matriz de coocurrencia de nivel de gris (GLCM) y devuelva la imagen escalada que se ha utilizado en el cálculo. Especificando corchetes vacíos en el parámetro GrayLimits, el ejemplo utiliza los valores mínimo y máximo de escala de grises de la imagen de entrada como límites.

[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

Lea una imagen en escala de grises en el área de trabajo.

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

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

Defina cuatro desplazamientos.

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

Calcule las GLCM y devuelva también la imagen escalada. Muestre la imagen escalada y vuelva a escalar los valores de los datos al intervalo [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.

Observe cómo la función devuelve un arreglo de cuatro GLCM.

whos
  Name           Size              Bytes  Class     Attributes

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

Lea una imagen en escala de grises en el área de trabajo.

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

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

Calcule la GLCM utilizando la opción Symmetric y devuelva también la imagen escalada. La GLCM que se crea cuando establece Symmetric en true es simétrica en toda su diagonal y es equivalente a la GLCM descrita por Haralick (1973).

[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

Muestre la imagen escalada y vuelva a escalar los valores de los datos al intervalo [0, 1].

imshow(rescale(SI))

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

Argumentos de entrada

contraer todo

Imagen de entrada, especificada como matriz numérica 2D o matriz lógica 2D.

Argumentos de par nombre-valor

contraer todo

Especifique pares de argumentos opcionales como Name1=Value1,...,NameN=ValueN, donde Name es el nombre del argumento y Value es el valor correspondiente. Los argumentos de nombre-valor deben aparecer después de otros argumentos. Sin embargo, el orden de los pares no importa.

Ejemplo: glcm = graycomatrix(I,Offset=[2 0]) especifica un desplazamiento de fila de 2 y un desplazamiento de columna de 0.

En las versiones anteriores a la R2021a, use comas para separar cada nombre y valor, y encierre Name entre comillas.

Ejemplo: glcm = graycomatrix(I,"Offset",[2 0]) especifica un desplazamiento de fila de 2 y un desplazamiento de columna de 0.

Rango utilizado para escalar la imagen de entrada en niveles de gris, especificado como vector de 2 elementos de la forma [low high]. El rango [low high] se divide en NumLevels bins de igual anchura y los valores de escala de grises de un bin se asignan a un único nivel de gris. Los valores de escala de grises inferiores o iguales a low se asignan a 1. Los valores de escala de grises mayores o iguales a high se asignan a NumLevels. .

Si GrayLimits se establece en [], graycomatrix utiliza los valores mínimo y máximo de la escala de grises en I como límites, [min(I(:)) max(I(:))], por ejemplo, [0, 1] para el tipo de datos double y [-32768, 32767] para el tipo de datos int16.

Número de niveles de gris, especificado como número entero positivo. Por ejemplo, si NumLevels es 8, graycomatrix escala los valores en I para que sean enteros entre 1 y 8. El número de niveles de gris determina el tamaño de la GLCM. El número predeterminado de niveles de gris es 8 en el caso de las imágenes numéricas y 2 en el caso de las imágenes lógicas.

Desplazamiento entre el píxel de interés y su vecino, especificado como una matriz de enteros de p por 2. Cada fila de la matriz es un vector de dos elementos, [row_offset col_offset], que especifica la relación espacial de un par de píxeles. row_offset es el número de filas entre el píxel de interés y su vecino. col_offset es el número de columnas entre el píxel de interés y su vecino.

Dado que el desplazamiento se expresa a menudo como un ángulo, la siguiente tabla enumera los valores de desplazamiento que especifican ángulos comunes, teniendo en cuenta la distancia D entre píxeles.

Ángulo

Desplazamiento

0

[0 D]

45

[-D D]

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

La figura ilustra cuatro desplazamientos de distancia 1 desde el píxel de interés. Debe especificar estos desplazamientos utilizando la matriz [0 1; -1 1; -1 0; -1 -1].

Considere el orden de los valores, especificado como true o false. Por ejemplo, cuando Symmetric se establece en true, graycomatrix cuenta tanto los emparejamientos 1,2 como 2,1 cuando calcula el número de veces que el valor 1 es adyacente al valor 2. Cuando Symmetric se establece en false, graycomatrix solo cuenta los emparejamientos 1,2 o 2,1, dependiendo del valor de Offset.

Tipos de datos: logical

Argumentos de salida

contraer todo

Matriz (o matrices) de coocurrencia de nivel de gris, devuelta como arreglo de NumLevels por NumLevels por p, donde p es el número de desplazamientos en Offset.

Tipos de datos: double

Imagen escalada usada para calcular la GLCM, devuelta como una matriz numérica del mismo tamaño que la imagen de entrada. Los valores de SI se encuentran entre 1 y NumLevels.

Tipos de datos: double

Algoritmos

graycomatrix calcula la GLCM a partir de una versión escalada de la imagen. De forma predeterminada, si I es una imagen binaria, graycomatrix escala la imagen a dos niveles de gris. Si I es una imagen en escala de grises, graycomatrix escala la imagen a ocho niveles de gris. Puede especificar el número de niveles de gris que utiliza graycomatrix para escalar la imagen con el argumento nombre-valor NumLevels. Puede ajustar la forma en que graycomatrix escala los valores con el argumento nombre-valor GrayLimits.

La figura muestra cómo graycomatrix calcula los tres primeros valores de una GLCM con el desplazamiento predeterminado de [0 1]. En la GLCM, el elemento (1, 1) contiene el valor 1 porque solo hay un caso en la imagen de entrada en el que dos píxeles adyacentes horizontalmente tienen los valores 1 y 1, respectivamente. El elemento (1, 2) de la GLCM contiene el valor 2 porque hay dos casos en los que dos píxeles adyacentes horizontalmente tienen los valores 1 y 2. El elemento (1, 3) de la GLCM tiene el valor 0 porque no hay casos de dos píxeles adyacentes horizontalmente con los valores 1 y 3. graycomatrix continúa procesando la imagen de entrada, escaneándola en busca de otros pares de píxeles (i, j) y registrando los recuentos en los elementos correspondientes de la GLCM.

graycomatrix ignora los pares de píxeles si alguno de ellos contiene un valor NaN, y sustituye los valores Infs positivos por el valor NumLevels y los valores Infs negativos por el valor 1. graycomatrix ignora los píxeles del borde si el píxel vecino correspondiente queda fuera de los límites de la imagen.

La GLCM que se crea cuando se establece Symmetric en true es simétrica en toda su diagonal y es equivalente a la GLCM descrita por Haralick (1973). La GLCM obtenida mediante la siguiente sintaxis, con Symmetric en true

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

es equivalente a la suma de las dos GLCM producidas por las siguientes instrucciones, donde Symmetric se establece en false.

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

Referencias

[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.

Historial de versiones

Introducido antes de R2006a