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 mediante filtros de textura

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

Paso 1: Leer imagen

Leer en .bag.png

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

Paso 2: Crear imagen de textura

Utilícelo 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 utiliza para redimensionar 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 áspera para la textura inferior

Umbral de la imagen redimensionada 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 blancos.BW1 Si comparacon , observará que la textura superior está demasiado segmentada (varios objetos blancos) y la textura inferior se segmenta casi en su totalidad.BW1I Puede extraer la textura inferior usando .bwareaopen

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

Se utiliza para suavizar las aristas y para cerrar los agujeros abiertos en el objeto en .imcloseBWao Un vecindario de 9 por 9 se selecciona 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 en .imfillcloseBWao

roughMask = imfill(closeBWao,'holes');

Paso 4: Use la máscara áspera para segmentar la textura superior

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

imshow(roughMask);

figure imshow(I)

Obtenga una imagen sin procesar de la textura superior usando .roughMask

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

Utilícelo 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 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

Utilícelo 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

| | | | | |