K-означает сегментацию изображения на основе кластеризации
использует аргументы «имя-значение» для управления аспектами алгоритма кластеризации k-means.L = imsegkmeans(I,k,Name,Value)
Чтение изображения в рабочую область.
I = imread('cameraman.tif'); imshow(I) title('Original Image')

Сегментируйте изображение на три области с помощью k-means кластеризации.
[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-means кластеризации.
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));
Фильтрация изображения в оттенках серого с помощью фильтров Габора. Отображение 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-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')

Чтение изображения в рабочую область.
I = imread('peppers.png'); imshow(I) title('Original 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')
Запишите исходные и сжатые изображения в файл. Квантованный файл изображения приблизительно равен четверти размера исходного файла изображения.
imwrite(I,'peppersOriginal.png'); imwrite(J,'peppersQuantized.png');
I - Изображение в сегментИзображение, чтобы делиться на сегменты, определенный как 2-е изображение оттенков серого, 2-е цветное изображение или 2-е многоспектральное изображение.
Типы данных: 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-означает + +: Преимущества тщательного посева». СОДА '07: Материалы восемнадцатого ежегодного симпозиума ACM-SIAM по дискретным алгоритмам. Новый Орлеан, Лос-Анджелес, январь 2007 года, стр. 1027-1035.
gabor | imgaborfilt | imsegkmeans3 | label2rgb | labelmatrix | labeloverlay | lazysnapping | superpixels | watershedИмеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.