Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

graycomatrix

Crear matriz de co-ocurrencia a nivel de gris a partir de la imagen

Sintaxis

glcms = graycomatrix(I)
glcms = graycomatrix(I,Name,Value,...)
[glcms,SI] = graycomatrix(___)

Descripción

glcms = graycomatrix(I) crea una matriz de co-ocurrencia a nivel de gris (GLCM) a partir de la Ide imagen. Otro nombre para una matriz de la co-ocurrencia del gris-nivel es un matriz de dependencia espacial de nivel de gris. También, la co-ocurrencia de la palabra se utiliza con frecuencia en la literatura sin un guión, coocurrencia.

graycomatrix crea el GLCM calculando con qué frecuencia un píxel con un valor de nivel de gris (intensidad de escala de grises) i ocurre horizontalmente adyacente a un píxel con el valor j. (puede especificar otras relaciones espaciales de píxeles mediante el parámetro 'Offsets' .) Cada elemento (i,j) en glcm especifica el número de veces que el píxel con valor i ocurrió horizontalmente adyacente a un píxel con valor j.

ejemplo

glcms = graycomatrix(I,Name,Value,...) Devuelve una o más matrices de co-ocurrencia de nivel gris, dependiendo de los valores de los pares de nombre/valor opcionales. Los nombres de los parámetros pueden abreviarse y el caso no importa.

ejemplo

[glcms,SI] = graycomatrix(___) Devuelve la imagen escalada, SI, que se utiliza para calcular la matriz de co-ocurrencia a nivel de gris. Los valores en SI están entre 1 y NumLevels.

Ejemplos

contraer todo

Lea una imagen en escala de grises en el espacio de trabajo.

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

Calcule la matriz de co-ocurrencia de nivel gris (GLCM) para la imagen en escala de grises. De forma predeterminada, graycomatrix calcula el GLCM basándose en la proximidad horizontal de los píxeles: [0 1]. Que es el píxel al lado del píxel de interés en la misma fila. En este ejemplo se especifica un desplazamiento diferente: dos filas separadas 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 muestras 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 co-ocurrencia de nivel gris (GLCM) y devuelva la imagen escalada utilizada en el cálculo. Al especificar los paréntesis vacíos para el parámetro GrayLimits , el ejemplo utiliza los valores mínimos y máximos 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 espacio de trabajo.

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

Defina cuatro desvíos.

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

Calcule el GLCMs, devolviendo también la imagen escalada. Mostrar la imagen escalada, realizando una reescalación adicional de los valores de datos al intervalo [0,1].

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

Observe cómo la función devuelve una matriz de cuatro GLCMs.

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 espacio de trabajo.

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

Calcule el GLCM usando la opción Symmetric , devolviendo también la imagen escalada. El GLCM creado cuando se establece Symmetric en true es simétrico a través de su diagonal, y equivale 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

Mostrar la imagen escalada, realizando una reescalación adicional de los valores de datos al intervalo [0,1].

imshow(rescale(SI))

Argumentos de entrada

contraer todo

Imagen de entrada, especificada como un array 2-D, real, no Sparse, numérico o lógico.

Ejemplo:

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Argumentos de par nombre-valor

Especifique pares opcionales separados por comas de argumentos Name,Value . Name es el nombre del argumento y Value es el valor correspondiente. Name debe aparecer dentro de comillas simples (' '). Puede especificar varios argumentos de par de nombre y valor en cualquier orden como Name1,Value1,...,NameN,ValueN.

Ejemplo:

El intervalo usó la imagen de entrada de escala en niveles grises, especificado como un vector de dos elementos [low high]. Si N es el número de niveles de grises (consulte el parámetro 'NumLevels') que se utiliza para el escalamiento, el rango [low high] se divide en N bins de anchura igual y los valores de un bin se asignan a un solo nivel gris. Los valores de escala de grises inferiores o iguales a low se escalen a 1. Los valores de escala de grises mayores o iguales a high se escalen a 'NumLevels'. Si'GrayLimits' se establece en [], graycomatrix utiliza los valores mínimos y máximos de escala de grises en I como límites, [min(I(:)) max(I(:))], por ejemplo, [0 1] para la clase Double y [-32768 32767] para la clase int16.

Ejemplo:

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Número de niveles de grises, especificados como enteros. Por ejemplo, si NumLevels es 8, graycomatrix escala los valores en I por lo que son enteros entre 1 y 8. El número de niveles de grises determina el tamaño de la matriz de co-ocurrencia del nivel de gris (glcm).

Ejemplo:

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Distancia entre el píxel de interés y su vecino, especificado como una matriz de enteros p-por-2. Cada fila del array es un vector de dos elementos, [row_offset, col_offset], que especifica la relación, o Compensar, 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 desvío se expresa a menudo como un ángulo, en la tabla siguiente se enumeran los valores de desvío que especifican ángulos comunes, dada la distancia de píxeles D.

Ángulo

Compensar

0

[0 D]

45

[-D D]

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

La figura ilustra el array: offset = [0 1; -1 1; -1 0; -1 -1]

Ejemplo:

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Considere el orden de los valores, especificado como el valor booleano true o false. Por ejemplo, cuando 'Symmetric' se establece en true, graycomatrix cuenta tanto 1, 2 como 2, 1 emparejamientos al calcular el número de veces que el valor 1 está adyacente al valor 2. Cuando 'Symmetric' se establece en false, graycomatrix sólo cuenta 1, 2 o 2, 1, dependiendo del valor de 'offset'.

Ejemplo:

Tipos de datos: logical

Argumentos de salida

contraer todo

Matriz de co-ocurrencia a nivel de gris (o matrices), devuelta como una matriz NumLevels-por-NumLevels-por-P de la clase double, donde P es el número de desvíos en Offset.

Imagen escalada utilizada en el cálculo de GLCM, devuelta como una matriz double del mismo tamaño que la imagen de entrada.

Algoritmos

graycomatrix calcula el 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 grises. 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 utiliza graycomatrix para escalar la imagen mediante el parámetro 'NumLevels' y la forma en que graycomatrix escala los valores mediante el parámetro 'GrayLimits' .

En la siguiente figura se muestra cómo graycomatrix calcula varios valores en la GLCM de la imagen de 4 por 5 I. El elemento (1, 1) en el GLCM contiene el valor 1 porque sólo hay una instancia en la imagen donde dos píxeles adyacentes horizontales tienen los valores 1 y 1. El elemento (1,2) en el GLCM contiene el valor 2 porque hay dos instancias en la imagen donde dos píxeles adyacentes horizontales tienen los valores 1 y 2. graycomatrix continúa este proceso para rellenar todos los valores del GLCM.

graycomatrix omite los pares de píxeles si alguno de los píxeles contiene un NaN, reemplaza Infs positivo con el valor NumLevelsy reemplaza Infs negativo con el valor 1. graycomatrix omite los píxeles de borde, si el píxel vecino correspondiente cae fuera de los límites de la imagen.

El GLCM creado cuando 'Symmetric' se establece en true es simétrico a través de su diagonal, y equivale a la GLCM descrita por Haralick (1973). El GLCM producido por la sintaxis siguiente, con 'Symmetric' establecido en true

 graycomatrix(I, 'offset', [0 1], 'Symmetric', true)

equivale a la suma de los dos GLCMs producidos por las siguientes afirmaciones en las que'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.

Consulte también

Introducido antes de R2006a