imsegkmeans

K-означает кластеризацию сегментации изображений на основе

Описание

пример

L = imsegkmeans(I,k) сегменты изображения I в k кластеры путем выполнения k-средних значений кластеризации и возвраты сегментированный маркированный выход в L.

пример

[L,centers] = imsegkmeans(I,k) также возвращает положения центроида кластера, centers.

L = imsegkmeans(I,k,Name,Value) использует аргументы name-value для управления аспектами алгоритма кластеризации k-средних значений.

Примеры

свернуть все

Чтение изображения в рабочую область.

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

Figure contains an axes. The axes with title Original Image contains an object of type image.

Сегментируйте изображение в три области, используя k-средних значений кластеризацию.

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

Figure contains an axes. The axes with title Labeled Image contains an object of type image.

Чтение изображения в рабочую область. Уменьшите размер изображения, чтобы ускорить запуск примера.

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

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

Сегментируйте изображение в две области с помощью кластеризации k-средних значений.

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

Figure contains an axes. The axes with title Labeled Image contains an object of type image.

Несколько пикселей имеют неправильную маркировку. Остальная часть примера показывает, как улучшить сегментацию k-средних значений путем дополнения информации о каждом пикселе.

Дополните изображение информацией о текстуре в окрестностях каждого пикселя. Чтобы получить информацию о текстуре, фильтруйте полутоновую версию изображения набором фильтров Габора.

Создайте набор из 24 фильтров Габора, охватывающих 6 длин волн и 4 ориентации.

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

Преобразуйте изображение в полутоновое.

I = rgb2gray(im2single(RGB));

Фильтрация полутонового изображения с помощью фильтров Gabor. Отобразите 24 отфильтрованных изображения в монтаже.

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

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

Сглаживайте каждое отфильтрованное изображение, чтобы удалить локальные изменения. Отобразите сглаженные изображения в монтаже.

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

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

Дополните информацию о каждом пикселе пространственной информацией о местоположении. Эта дополнительная информация позволяет алгоритму кластеризации k-средних значений предпочитать группировки, которые близки друг к другу пространственно.

Получите координаты x и y всех пикселей на вход изображении.

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

Конкатенируйте информацию о интенсивности, информацию о текстуре окрестностей и пространственную информацию о каждом пикселе.

В этом примере набор функций включает изображение интенсивности I вместо исходного цветного изображения RGB. Информация о цвете опускается из набора функций, потому что желтый цвет меха собаки похож на желтый оттенок плитки. Цветовые каналы не дают достаточно четкой информации о собаке и фоне, чтобы сделать чистую сегментацию.

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

Сегментируйте изображение в две области k-средних значений используя кластеризацию с дополненным набором функции.

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

Figure contains an axes. The axes with title Labeled Image with Additional Pixel Information contains an object of type image.

Чтение изображения в рабочую область.

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

Figure contains an axes. The axes with title Original Image contains an object of type image.

Сегментируйте изображение в 50 областей с помощью кластеризации k-средних значений. Верните матрицу меток L и местоположения центроидов кластеров C. Расположения центроида кластера являются значениями RGB каждого из 50 цветов.

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

Преобразуйте матрицу меток в изображение RGB. Укажите местоположения центроидов кластеров, C, как палитра для нового изображения.

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

Отобразите квантованное изображение.

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

Figure contains an axes. The axes with title Color Quantized Image contains an object of type image.

Запишите оригинальные и сжатые изображения в файл. Квантованный файл изображения приблизительно на четверть превышает размер оригинального изображения файла.

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

Входные параметры

свернуть все

Изображение в сегмент, заданное как 2-D полутоновое изображение, 2-D цветное изображение или 2-D мультиспектральное изображение.

Типы данных: single | int8 | int16 | uint8 | uint16

Количество создаваемых кластеров, заданное как положительное целое число.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'NumAttempts',5

Нормализуйте входные данные до нуля среднего и единичного отклонения, заданной как разделенная разделенными запятой парами, состоящая из 'NormalizeInput' и числовое или логическое 1 (true) или 0 (false).. Если вы задаете true, затем imsegkmeans нормализует каждый канал входа индивидуально.

Количество раз, чтобы повторить процесс кластеризации с использованием новых начальных положений центроида кластера, заданных как разделенная разделенными запятой парами, состоящая из 'NumAttempts' и положительное целое число.

Максимальное количество итераций, заданное как разделенная разделенными запятой парами, состоящая из 'MaxIterations' и положительное целое число.

Порог точности, заданный как разделенная разделенными запятой парами, состоящая из 'Threshold' и положительное число. Алгоритм останавливается, когда каждый из центров кластеров перемещается меньше, чем пороговое значение в последовательных итерациях.

Выходные аргументы

свернуть все

Матрица меток, заданная как матрица положительных целых чисел. Пиксели с меткой 1 относятся к первому кластеру, метка 2 - ко второму кластеру и так далее для каждого из k кластеры. L имеет те же первые две размерности, что и изображение I. Класс L зависит от количества кластеров.

Класс LКоличество кластеров
'uint8'k <= 255
'uint16'256 <= k <= 65535
'uint32'65536 <= k <= 2^32-1
'double'2^32 <= k

Расположения центроида кластера, возвращенные как числовая матрица размера k -by - c, где k - количество кластеров, а c - количество каналов. centers - тот же класс, что и изображение I.

Совет

  • Функция приводит к воспроизводимым результатам. Выходные выходы не изменяются при нескольких запусках, учитывая одни и те же входные параметры.

Ссылки

[1] Артур, Д. и С. Васильвицкий. «k-средних значений + +: Преимущества тщательного посева». SODA '07: Материалы восемнадцатого ежегодного симпозиума ACM-SIAM по дискретным алгоритмам. New Orleans, LA, January 2007, pp. 1027-1035.

Введенный в R2018b