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

Segmentación de imágenes basada en clustering K-means

Descripción

ejemplo

L = imsegkmeans(I,k) segmenta la imagen en clústeres realizando la agrupación en clústeres k-means y devuelve la salida segmentada etiquetada en .IkL

ejemplo

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

L = imsegkmeans(I,k,Name,Value) utiliza argumentos nombre-valor para controlar aspectos del algoritmo de agrupación en clústeres k-means.

Ejemplos

contraer todo

Lea una imagen en el espacio de trabajo.

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

Segmente la imagen en tres regiones mediante la agrupación en clústeres k-means.

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

Lea 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)

Segmente la imagen en dos regiones mediante la agrupación en clústeres k-means.

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.

Complementa la imagen con información sobre la textura en la vecindad 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.

Crea un conjunto de 24 filtros Gabor, que cubren 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 con los filtros Gabor. Muestre las 24 imágenes filtradas en un montaje.

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

Suaviza cada imagen filtrada para eliminar las variaciones locales. Muestre 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])

Complemente la información sobre cada píxel con información de ubicación espacial. Esta información adicional permite que el algoritmo de agrupación en clústeres k-means prefiera agrupaciones que estén juntas espacialmente.

Obtenga las coordenadas y 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);

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

En este ejemplo, el conjunto de características incluye la imagen de intensidad en lugar de la imagen de color original, .IRGB La información de color se omite del conjunto de características porque el color amarillo del pelaje del perro es similar al tono 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);

Segmente la imagen en dos regiones utilizando la agrupación en clústeres k-means con el conjunto de características suplementada.

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

Lea una imagen en el espacio de trabajo.

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

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

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

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

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

Muestre la imagen cuantificada.

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

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

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

Argumentos de entrada

contraer todo

Imagen a segmento, especificada como una imagen en escala de grises 2D, una imagen en color 2D o una imagen multiespectral 2D.

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 opcionales separados por comas de argumentos. es el nombre del argumento y es el valor correspondiente. deben aparecer entre comillas.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);

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

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

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

Umbral de precisión, especificado como el par separado por comas que consta de y un número positivo.'Threshold' El algoritmo se detiene cuando cada uno de los centros de clúster se mueve 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 de 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 está 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