K-средних значений, кластеризирующие базирующуюся сегментацию изображений
аргументы значения имени использования, чтобы управлять аспектами k-средних значений, кластеризирующих алгоритм.L
= imsegkmeans(I
,k
,Name,Value
)
Считайте изображение в рабочую область.
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');
I
— Отобразите, чтобы сегментироватьсяОтобразите, чтобы сегментироваться в виде 2D полутонового изображения, 2D цветного изображения или 2D многоспектрального изображения.
Типы данных: single
| int8
| int16
| uint8
| uint16
k
— Количество кластеровКоличество кластеров, чтобы создать в виде положительного целого числа.
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
'NumAttempts',5
'NormalizeInput'
— Нормируйте входные данныеtrue
или 1
(значение по умолчанию) | false
или 0
Нормируйте входные данные, чтобы обнулить среднее значение и модульное отклонение в виде разделенной запятой пары, состоящей из 'NormalizeInput'
и числовой или логический 1
TRUE
) или 0
ложь
).. Если вы задаете true
, затем imsegkmeans
нормирует каждый канал входа индивидуально.
'NumAttempts'
— Число раз, чтобы повторить процесс кластеризации
(значение по умолчанию) | положительное целое числоЧисло раз, чтобы повторить процесс кластеризации с помощью новых начальных кластерных центроидных положений в виде разделенной запятой пары, состоящей из 'NumAttempts'
и положительное целое число.
'MaxIterations'
— Максимальное количество итераций
(значение по умолчанию) | положительное целое числоМаксимальное количество итераций в виде разделенной запятой пары, состоящей из 'MaxIterations'
и положительное целое число.
'Threshold'
— Порог точности1e-4
(значение по умолчанию) | положительное числоПорог точности в виде разделенной запятой пары, состоящей из 'Threshold'
и положительное число. Алгоритм останавливается, когда каждый из кластерных центров перемещает меньше, чем пороговое значение в последовательных итерациях.
L
— Матрица меткиМатрица метки в виде матрицы положительных целых чисел. Пиксели с маркируют 1, принадлежат первому кластеру, маркируют 2, принадлежат второму кластеру, и так далее для каждого k
кластеры. L
имеет те же первые две размерности как изображение I
. Класс L
зависит от количества кластеров.
Класс L | Количество кластеров |
---|---|
'uint8' | k <= 255 |
'uint16' | 256 <= k <= 65535 |
'uint32' | 65536 <= k <= 2^32-1 |
'double' | 2^32 <= k |
centers
— Кластерные центроидные местоположенияКластерные центроидные местоположения, возвращенные как числовая матрица размера k-by-c, где k является количеством кластеров и c, являются количеством каналов. centers
тот же класс как изображение I
.
Функция приводит к восстанавливаемым результатам. Выход не будет варьироваться по нескольким запускам, учитывая те же входные параметры.
[1] Артур, D. и С. Вэссильвитский. "k-средних значений ++: Преимущества Тщательного Отбора". SODA '07: Продолжения Восемнадцатого Ежегодного Симпозиума ACM-SIAM по Дискретным Алгоритмам. Новый Орлеан, LA, январь 2007, стр 1027–1035.
gabor
| imgaborfilt
| imsegkmeans3
| label2rgb
| labelmatrix
| labeloverlay
| lazysnapping
| superpixels
| watershed
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.