imsegkmeans

K-средних значений, кластеризирующие базирующуюся сегментацию изображений

Описание

пример

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

пример

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

L = imsegkmeans(I,k,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.

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

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

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

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

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

I = rgb2gray(im2single(RGB));

Отфильтруйте полутоновое изображение с помощью фильтров Габора. Отобразите 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');

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

свернуть все

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

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

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

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

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

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

Нормируйте входные данные, чтобы обнулить среднее значение и модульное отклонение в виде разделенной запятой пары, состоящей из 'NormalizeInput' и числовой или логический 1 TRUE) или 0 ложь).. Если вы задаете 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] Артур, D. и С. Вэссильвитский. "k-средних значений ++: Преимущества Тщательного Отбора". SODA '07: Продолжения Восемнадцатого Ежегодного Симпозиума ACM-SIAM по Дискретным Алгоритмам. Новый Орлеан, LA, январь 2007, стр 1027–1035.

Введенный в R2018b