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.

Segmentación de texturas con filtros de texturas

Este ejemplo muestra cómo utilizar la segmentación de texturas para identificar las regiones en función de su textura. Su objetivo es segmentar dos tipos de tejido en una imagen utilizando filtros de textura.

Paso 1: leer imagen

Lee.bag.png

I = imread('bag.png'); figure imshow(I)

Paso 2: crear imagen de textura

Se usa para crear una imagen de textura.entropyfilt La función devuelve una matriz donde cada píxel de salida contiene el valor de entropía de la vecindad 9-por-9 alrededor del píxel correspondiente en la imagen de entrada.entropyfiltI La entropía es una medida estadística de la aleatoriedad.

E = entropyfilt(I);

Se usa para volver a escalar la imagen de textura para que sus valores estén en el rango predeterminado para una imagen doble.rescaleE

Eim = rescale(E); figure imshow(Eim)

Paso 3: crear máscara aproximada para la textura inferior

Umbral de la imagen reescalado para segmentar las texturas.Eim Se selecciona un valor de umbral de 0,8 porque es aproximadamente el valor de intensidad de los píxeles a lo largo del límite entre las texturas.

BW1 = imbinarize(Eim, .8); imshow(BW1);

figure imshow(I)

Los objetos segmentados de la imagen binaria son de color blanco.BW1 Si se compara con, observará que la textura superior está excesivamente segmentada (varios objetos blancos) y la textura inferior se segmenta casi en su totalidad.BW1I Puede extraer la textura inferior utilizando.bwareaopen

BWao = bwareaopen(BW1,2000); imshow(BWao)

Utilíciese para suavizar los bordes y cerrar cualquier agujero abierto en el objeto.imcloseBWao Un vecindario 9-by-9 es seleccionado porque este vecindario también fue utilizado por.entropyfilt

nhood = true(9); closeBWao = imclose(BWao,nhood); imshow(closeBWao)

Se utiliza para rellenar agujeros en el objeto.imfillcloseBWao

roughMask = imfill(closeBWao,'holes');

Paso 4: Utilice la máscara aproximada para segmentar la textura superior

Compare la imagen binaria con la imagen original.roughMaskI Observe que la máscara de la textura inferior no es perfecta porque la máscara no se extiende a la parte inferior de la imagen. Sin embargo, puede utilizar para segmentar la textura superior.roughMask

imshow(roughMask);

figure imshow(I)

Obtener la imagen cruda de la textura superior utilizando.roughMask

I2 = I; I2(roughMask) = 0; imshow(I2)

Se utiliza para calcular la imagen de textura.entropyfilt

E2 = entropyfilt(I2); E2im = rescale(E2); imshow(E2im)

Umbral mediante un umbral global.E2im

BW2 = imbinarize(E2im); imshow(BW2)

figure, imshow(I);

Si se compara con, observará que hay dos objetos segmentados en.BW2IBW2 Se usa para obtener una máscara para la textura superior.bwareaopen

mask2 = bwareaopen(BW2,1000); imshow(mask2)

Paso 5: mostrar resultados de segmentación

Se usa para extraer la textura superior e inferior de.mask2I

texture1 = I; texture1(~mask2) = 0; texture2 = I; texture2(mask2) = 0;
imshow(texture1)

figure imshow(texture2)

Delinea el límite entre las dos texturas.

boundary = bwperim(mask2); segmentResults = I; segmentResults(boundary) = 255; imshow(segmentResults)

Uso de otros filtros de textura en la segmentación

En lugar de, puede utilizar y con otras funciones morfológicas para lograr resultados de segmentación similares.entropyfiltstdfiltrangefilt

S = stdfilt(I,nhood); imshow(rescale(S))

R = rangefilt(I,ones(5)); imshow(R)

Consulte también

| | | | | |