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.
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.
Leer en .bag.png
I = imread('bag.png'); figure imshow(I)
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.entropyfilt
I
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.rescale
E
Eim = rescale(E); figure imshow(Eim)
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.BW1
I
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 .imclose
BWao
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 .imfill
closeBWao
roughMask = imfill(closeBWao,'holes');
Compare la imagen binaria con la imagen original.roughMask
I
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 .BW2
I
BW2
Se usa para obtener una máscara para la textura superior.bwareaopen
mask2 = bwareaopen(BW2,1000); imshow(mask2)
Utilícelo para extraer la textura superior e inferior de .mask2
I
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)
En lugar de , puede utilizar y con otras funciones morfológicas para lograr resultados de segmentación similares.entropyfilt
stdfilt
rangefilt
S = stdfilt(I,nhood); imshow(rescale(S))
R = rangefilt(I,ones(5)); imshow(R)
bwareaopen
| bwperim
| entropyfilt
| imbinarize
| imclose
| imfill
| rangefilt