Contenido principal

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.

Segmentación de textura mediante filtros de Gabor

En este ejemplo se muestra cómo utilizar la segmentación de textura para identificar regiones en función de su textura. El objetivo es segmentar el perro a partir del suelo del baño. La segmentación es visualmente obvia debido a la diferencia de textura entre el patrón regular y periódico del suelo del baño y la textura regular y suave del pelaje del perro.

Los filtros de Gabor son un modelo razonable de células simples en el sistema de visión de los mamíferos. Por este motivo, se cree que los filtros de Gabor son un buen modelo de cómo los humanos distinguen la textura y, por lo tanto, son un modelo útil al diseñar algoritmos para reconocer texturas.

Leer una imagen de entrada

Lea y muestre la imagen de entrada. En este ejemplo se reduce la imagen para que el ejemplo se ejecute más rápidamente.

A = imread("kobi.png");
A = imresize(A,0.25);
imshow(A)

Figure contains an axes object. The hidden axes object contains an object of type image.

Diseñar un arreglo de filtros de Gabor

Diseñe un arreglo de filtros de Gabor ajustados a distintas frecuencias y orientaciones [1]. El conjunto de frecuencias y orientaciones está diseñado para localizar diferentes subconjuntos, aproximadamente ortogonales, de información de frecuencia y orientación en la imagen de entrada. Orientaciones de muestra entre 0 grados y 135 grados en pasos de 45 grados. Longitudes de onda de muestra en potencias de dos crecientes que comienzan en 4/sqrt(2) hasta la longitud de la hipotenusa de la imagen de entrada.

[numRows,numCols,~] = size(A);

wavelengthMin = 4/sqrt(2);
wavelengthMax = hypot(numRows,numCols);
n = floor(log2(wavelengthMax/wavelengthMin));
wavelength = 2.^(0:(n-2)) * wavelengthMin;

deltaTheta = 45;
orientation = 0:deltaTheta:(180-deltaTheta);

g = gabor(wavelength,orientation);

Calcular la respuesta de magnitud de Gabor

Calcule la respuesta de magnitud de los filtros de Gabor a partir de la imagen de origen utilizando la función imgaborfilt. La respuesta de magnitud de Gabor a veces se denomina "Energía de Gabor". Cada respuesta de magnitud de Gabor en gabormag(:,:,ind) es la salida del filtro de Gabor correspondiente g(ind) aplicado a la imagen de origen en escala de grises.

Agray = im2gray(A);
gabormag = imgaborfilt(Agray,g);

Crear un conjunto de características

Posprocese las respuestas de magnitud de Gabor para utilizarlas en la clasificación. Este posprocesamiento incluye suavizado gaussiano y la adición de información espacial adicional al conjunto de características.

Cada respuesta de magnitud de Gabor contiene algunas variaciones locales, incluso dentro de regiones bien segmentadas de textura constante. Estas variaciones locales alterarán la segmentación. Compense estas variaciones suavizando la información de magnitud de Gabor utilizando filtros de paso bajo gaussianos. Aplique un filtro gaussiano diferente a cada respuesta de magnitud de Gabor y haga coincidir la desviación estándar de cada filtro gaussiano con la longitud de onda del filtro de Gabor que produjo la respuesta correspondiente. Controle la cantidad de suavizado que se aplica a las respuestas de magnitud de Gabor utilizando un término de suavizado K.

K = 3;
for i = 1:length(g)
    sigma = 0.5*g(i).Wavelength;
    gabormag(:,:,i) = imgaussfilt(gabormag(:,:,i),K*sigma); 
end

Complemente el conjunto de características de Gabor con un mapa de información de ubicación espacial tanto en X como en Y. Esta información adicional permite al clasificador preferir agrupaciones que estén cercanas entre sí espacialmente.

X = 1:numCols;
Y = 1:numRows;
[X,Y] = meshgrid(X,Y);
featureSet = cat(3,gabormag,X,Y);

En este ejemplo, hay una característica independiente para cada filtro en el banco de filtros de Gabor, más dos características adicionales de la información espacial que se agregó en el paso anterior. En total, hay 24 características de Gabor y 2 características espaciales para cada píxel en la imagen de entrada.

Visualizar el conjunto de características

Normalice las características para que tengan media cero y varianza unitaria. Para simplificar el cálculo, primero transforme el conjunto de características en una matriz 2D con 26 columnas. En este formato, hay una columna para cada característica y se pueden realizar cálculos por columnas de media y desviación estándar. Después de haber normalizado las características, remodele la matriz a su forma 3D original.

X = reshape(featureSet,numRows*numCols,[]);
Xnorm = (X-mean(X))./std(X);
featureSetNorm = reshape(Xnorm,numRows,numCols,[]);

Muestre las características normalizadas como un montaje.

montage(featureSetNorm,[],Size=[5 6],Background="w")

Figure contains an axes object. The hidden axes object contains an object of type image.

Clasificar características

Segmente el conjunto de características en dos grupos utilizando la función imsegkmeans. Normalice cada característica de forma independiente especificando el argumento nombre-valor NormalizeInput como true. Para evitar mínimos locales al minimizar la función objetivo, repita el proceso de agrupación K-medias cinco veces.

featureSet = im2single(featureSet);
L = imsegkmeans(featureSet,2,NormalizeInput=true,NumAttempts=5);

Muestre las etiquetas de segmentación sobre la imagen utilizando labeloverlay.

imshow(labeloverlay(A,L))

Figure contains an axes object. The hidden axes object contains an object of type image.

Examine las imágenes de primer plano y de fondo que sean el resultado de la máscara BW asociada con la matriz de etiquetas L.

Aseg1 = zeros(size(A),"like",A);
Aseg2 = zeros(size(A),"like",A);
BW = L == 2;
BW = repmat(BW,[1 1 3]);
Aseg1(BW) = A(BW);
Aseg2(~BW) = A(~BW);
montage({Aseg1,Aseg2});

Figure contains an axes object. The hidden axes object contains an object of type image.

Referencias

[1] Jain, Anil K., and Farshid Farrokhnia. "Unsupervised Texture Segmentation Using Gabor Filters." Pattern Recognition 24, no. 12 (January 1991): 1167–86. https://doi.org/10.1016/0031-3203(91)90143-S.

Consulte también

|

Temas