imsegkmeans

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

Синтаксис

L = imsegkmeans(I,k)
[L,centers] = imsegkmeans(I,k)
L = imsegkmeans(I,k,Name,Value)

Описание

пример

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

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

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

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

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

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

L = imsegkmeans(RGB,2);
B = labeloverlay(RGB,L);
imshow(B)
title('Labeled 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])

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

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

Добавьте информацию о каждом пикселе с пространственной информацией о местоположении. Эта дополнительная информация позволяет 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')

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

I = imread('peppers.png');
imshow(I)
title('Original 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')

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

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

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

свернуть все

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

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

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

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

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

Пример: L = imsegkmeans(I,5,'NumAttempts',5);

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

Введенный в R2018b