exponenta event banner

imsegkmeans

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

Описание

пример

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

пример

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

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

Примеры

свернуть все

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

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-means кластеризации.

[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-means кластеризации.

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

Фильтрация изображения в оттенках серого с помощью фильтров Габора. Отображение 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-means отдавать предпочтение группировкам, которые близки друг к другу пространственно.

Получение координат 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-means кластеризации с дополненным набором элементов.

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-means. Возврат матрицы меток 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-е изображение оттенков серого, 2-е цветное изображение или 2-е многоспектральное изображение.

Типы данных: 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-означает + +: Преимущества тщательного посева». СОДА '07: Материалы восемнадцатого ежегодного симпозиума ACM-SIAM по дискретным алгоритмам. Новый Орлеан, Лос-Анджелес, январь 2007 года, стр. 1027-1035.

Представлен в R2018b