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.

imsegkmeans

K-significa segmentación de imagen basada en clustering

Descripción

ejemplo

L = imsegkmeans(I,k) segmentos de imagen en clústeres mediante la realización de clústeres k-means y devuelve la salida etiquetada segmentada en.IkL

ejemplo

[L,centers] = imsegkmeans(I,k) también devuelve las ubicaciones del centroide del clúster,.centers

L = imsegkmeans(I,k,Name,Value) utiliza argumentos de nombre-valor para controlar los aspectos del algoritmo de clustering k-means.

Ejemplos

contraer todo

Leer una imagen en el espacio de trabajo.

I = imread('cameraman.tif'); imshow(I) title('Original Image')

Segmenta la imagen en tres regiones usando k-means clustering.

[L,Centers] = imsegkmeans(I,3); B = labeloverlay(I,L); imshow(B) title('Labeled Image')

Leer una imagen en el espacio de trabajo. Reduzca el tamaño de la imagen para que el ejemplo se ejecute más rápidamente.

RGB = imread('kobi.png'); RGB = imresize(RGB,0.5); imshow(RGB)

Segmenta la imagen en dos regiones usando k-means clustering.

L = imsegkmeans(RGB,2); B = labeloverlay(RGB,L); imshow(B) title('Labeled Image')

Varios píxeles están mal etiquetados. El resto del ejemplo muestra cómo mejorar la segmentación k-means complementando la información sobre cada píxel.

Complementar la imagen con información sobre la textura en el vecindario de cada píxel. Para obtener la información de textura, filtre una versión en escala de grises de la imagen con un conjunto de filtros Gabor.

Crear un conjunto de 24 filtros Gabor, cubriendo 6 longitudes de onda y 4 orientaciones.

wavelength = 2.^(0:5) * 3; orientation = 0:45:135; g = gabor(wavelength,orientation);

Convierta la imagen a escala de grises.

I = rgb2gray(im2single(RGB));

Filtre la imagen en escala de grises utilizando los filtros Gabor. Visualice las 24 imágenes filtradas en un montaje.

gabormag = imgaborfilt(I,g); montage(gabormag,'Size',[4 6])

Suavizar cada imagen filtrada para eliminar las variaciones locales. Visualice las imágenes suavizadas en un montaje.

for i = 1:length(g)     sigma = 0.5*g(i).Wavelength;     gabormag(:,:,i) = imgaussfilt(gabormag(:,:,i),3*sigma);  end montage(gabormag,'Size',[4 6])

Complementar la información sobre cada píxel con información de ubicación espacial. Esta información adicional permite que el algoritmo de clustering k-means prefiera las agrupaciones que están próximas juntas espacialmente.

Obtenga las coordenadas de todos los píxeles de la imagen de entrada.xy

nrows = size(RGB,1); ncols = size(RGB,2); [X,Y] = meshgrid(1:ncols,1:nrows);

Concatenar la información de intensidad, la información de texturas de vecindad y la información espacial sobre cada píxel.

Para este ejemplo, el conjunto de entidades incluye la imagen de intensidad en lugar de la imagen de color original,.IRGB La información de color se omite en el conjunto de características porque el color amarillo de la piel del perro es similar al matiz amarillo de las baldosas. Los canales de color no proporcionan suficiente información distinta sobre el perro y el fondo para hacer una segmentación limpia.

featureSet = cat(3,I,gabormag,X,Y);

Segmenta la imagen en dos regiones usando k-means clustering con el conjunto de características complementado.

L2 = imsegkmeans(featureSet,2,'NormalizeInput',true); C = labeloverlay(RGB,L2); imshow(C) title('Labeled Image with Additional Pixel Information')

Leer una imagen en el espacio de trabajo.

I = imread('peppers.png'); imshow(I) title('Original Image')

Segmenta la imagen en 50 regiones usando la agrupación en clústeres k-means. Devuelva la matriz de etiquetas y las ubicaciones de centroide del clúster.LC Las ubicaciones de centroide de clúster son los valores RGB de cada uno de los colores 50.

[L,C] = imsegkmeans(I,50);

Convierta la matriz de etiquetas en una imagen RGB. Especifique las ubicaciones del centroide del clúster, como el mapa de colores de la nueva imagen.C

J = label2rgb(L,im2double(C));

Visualice la imagen cuantizada.

imshow(J) title('Color Quantized Image')

Escriba las imágenes originales y comprimidas en el archivo. El archivo de imagen cuantizada es aproximado un cuarto del tamaño del archivo de imagen original.

imwrite(I,'peppersOriginal.png'); imwrite(J,'peppersQuantized.png');

Argumentos de entrada

contraer todo

Imagen para segmentar, especificada como imagen en escala de grises en 2-d, imagen en color 2-D o imagen multiespectral 2-d.

Tipos de datos: single | int8 | int16 | uint8 | uint16

Número de clústeres que se crearán, especificados como un entero positivo.

Argumentos de par nombre-valor

Especifique pares de argumentos separados por comas opcionales. es el nombre del argumento y es el valor correspondiente. deben aparecer dentro de las cotizaciones.Name,ValueNameValueName Puede especificar varios argumentos de par de nombre y valor en cualquier orden como.Name1,Value1,...,NameN,ValueN

Ejemplo: L = imsegkmeans(I,5,'NumAttempts',5);

Normalizar los datos de entrada a la media cero y la varianza de la unidad, especificadas como el par separado por comas que consta de y o.'NormalizeInput'truefalse Si especifica, normaliza cada canal de la entrada individualmente.trueimsegkmeans

Número de veces que se repite el proceso de agrupación en clústeres mediante las nuevas posiciones de centroide de clúster iniciales, especificadas como el par separado por comas que consta de un entero positivo.'NumAttempts'

Número máximo de iteraciones, especificadas como el par separado por comas y que consta de un entero positivo.'MaxIterations'

Umbral de precisión, especificado como el par separado por comas y que consta de un número positivo.'Threshold' El algoritmo se detiene cuando cada uno de los centros del clúster se mueven menos que el valor de umbral en iteraciones consecutivas.

Argumentos de salida

contraer todo

Matriz de etiquetas, especificada como una matriz de enteros positivos. Los píxeles con la etiqueta 1 pertenecen al primer clúster, la etiqueta 2 pertenece al segundo clúster y así sucesivamente para cada uno de los clústeres. tiene las mismas dos primeras dimensiones que la imagen.kLI La clase depende del número de clústeres.L

Clase deLNúmero de clústeres
'uint8'k <= 255
'uint16'256 <= k <= 65535
'uint32'65536 <= k <= 2^32-1
'double'2^32 <= k

Ubicaciones de centroide de clúster, devueltas como una matriz numérica de tamaño por-, donde es el número de clústeres y es el número de canales. es la misma clase que la imagen.kckccentersI

Sugerencias

  • La función produce resultados reproducibles. La salida no variará en varias ejecuciones dados los mismos argumentos de entrada.

Referencias

[1] Arthur, D. and S. Vassilvitskii. "k-means++: The Advantages of Careful Seeding." SODA '07: Proceedings of the Eighteenth Annual ACM-SIAM Symposium on Discrete Algorithms. New Orleans, LA, January 2007, pp. 1027–1035.

Introducido en R2018b