Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

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. Otro nombre para una matriz de coocurrencia de nivel de gris es matriz de dependencia espacial de nivel de gris.

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. (Puede especificar otras relaciones espaciales de píxeles utilizando el argumento nombre-valor Offsets). 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) devuelve una o más matrices de coocurrencia de nivel de gris, dependiendo de los valores de los argumentos opcionales nombre-valor.

ejemplo

[glcm,SI] = graycomatrix(___) devuelve la imagen escalada, SI, que se utiliza para calcular la matriz de coocurrencia de nivel de gris.

ejemplo

Ejemplos

contraer todo

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

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

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)

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

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)

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

Argumentos de entrada

contraer todo

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

Argumentos de par nombre-valor

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]. Si N es el número de niveles de gris (véase NumLevels) que se desea utilizar en el escalado, el rango [low high] se divide en N bins de igual anchura y los valores de un bin se asignan a un único nivel de gris. Los valores de escala de grises inferiores o iguales a low se escalan a 1. Los valores de escala de grises mayores o iguales a high se escalan a NumLevels. Si GrayLimits se establece en [], graycomatrix utiliza los valores mínimo y máximo de escala de grises en I como límites, [min(I(:)) max(I(:))]; por ejemplo, [0, 1] para la clase doble y [-32768, 32767] para la clase 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 matriz de coocurrencia de nivel de gris (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.

Distancia entre el píxel de interés y su vecino, especificada como 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, o desplazamiento, 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 el arreglo: 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.

Considerar el orden de los valores, especificado como el valor booleano 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 en el cálculo de la GLCM, devuelta como 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 de intensidad, graycomatrix escala la imagen a ocho niveles de gris. Puede especificar el número de niveles de gris que graycomatrix utiliza para escalar la imagen utilizando el argumento nombre-valor NumLevels, así como la forma en que graycomatrix escala los valores utilizando el argumento nombre-valor GrayLimits.

La siguiente figura muestra cómo graycomatrix calcula varios valores en la GLCM de la imagen I de 4 por 5. El elemento (1,1) de la GLCM contiene el valor 1 porque solo hay un caso en la imagen en el que dos píxeles adyacentes horizontalmente tienen los valores 1 y 1. El elemento (1,2) de la GLCM contiene el valor 2 porque hay dos instancias en la imagen en las que dos píxeles adyacentes horizontalmente tienen los valores 1 y 2. graycomatrix continúa este procesamiento para rellenar todos los valores de la GLCM.

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