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 object. The axes object 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 object. The axes object 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 object. The axes object contains an object of type image.

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

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

Figure contains an axes object. The axes object 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 = im2gray(im2single(RGB));

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

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

Figure contains an axes object. The axes object 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 object. The axes object 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 object. The axes object 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 object. The axes object 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 object. The axes object 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 имя аргумента и 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