K-означает кластеризацию сегментации изображений на основе
использует аргументы name-value для управления аспектами алгоритма кластеризации 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')
Несколько пикселей имеют неправильную маркировку. Остальная часть примера показывает, как улучшить сегментацию k-средних значений путем дополнения информации о каждом пикселе.
Дополните изображение информацией о текстуре в окрестностях каждого пикселя. Чтобы получить информацию о текстуре, фильтруйте полутоновую версию изображения набором фильтров Габора.
Создайте набор из 24 фильтров Габора, охватывающих 6 длин волн и 4 ориентации.
wavelength = 2.^(0:5) * 3; orientation = 0:45:135; g = gabor(wavelength,orientation);
Преобразуйте изображение в полутоновое.
I = rgb2gray(im2single(RGB));
Фильтрация полутонового изображения с помощью фильтров Gabor. Отобразите 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
- Изображение в сегментИзображение в сегмент, заданное как 2-D полутоновое изображение, 2-D цветное изображение или 2-D мультиспектральное изображение.
Типы данных: 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
(false
).. Если вы задаете true
, затем imsegkmeans
нормализует каждый канал входа индивидуально.
'NumAttempts'
- Количество раз повторить процесс кластеризации3
(по умолчанию) | положительное целое числоКоличество раз, чтобы повторить процесс кластеризации с использованием новых начальных положений центроида кластера, заданных как разделенная разделенными запятой парами, состоящая из 'NumAttempts'
и положительное целое число.
'MaxIterations'
- Максимальное количество итераций100
(по умолчанию) | положительное целое числоМаксимальное количество итераций, заданное как разделенная разделенными запятой парами, состоящая из '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] Артур, Д. и С. Васильвицкий. «k-средних значений + +: Преимущества тщательного посева». SODA '07: Материалы восемнадцатого ежегодного симпозиума ACM-SIAM по дискретным алгоритмам. New Orleans, LA, January 2007, pp. 1027-1035.
gabor
| imgaborfilt
| imsegkmeans3
| label2rgb
| labelmatrix
| labeloverlay
| lazysnapping
| superpixels
| watershed
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.