В этом примере показано, как выполнить классификацию типов земель на основе цветовых функций с помощью кластеризации K-средних значений и суперпикселей. Суперпиксели могут быть очень полезным методом при выполнении сегментации и классификации, особенно при работе с большими изображениями. Суперпиксели позволяют вам разбить изображение на набор структурно значимых областей, где контуры каждой области учитывают ребро информацию в оригинальное изображение. Если вы разбиваете изображение на суперпиксельные области, то алгоритмы классификации могут использоваться для классификации каждой области, а не для решения задачи классификации по полному оригинальному изображению сетке. Использование суперпикселей может обеспечить большие преимущества эффективности в решении задач классификации изображений, а также обеспечивает высококачественный результат сегментации.
Чтение изображения в рабочую область. Для лучшей эффективности этот пример уменьшает размер изображения вдвое. Визуально существует четыре типа земель, которые различимы в изображении синего мрамора, основанном только на цветовых функциях: лесные области, сухие/пустынные области, покрытые льдом области и вода.
A = imread('http://eoimages.gsfc.nasa.gov/images/imagerecords/74000/74192/world.200411.3x5400x2700.jpg');
A = imresize(A,0.5);
imshow(A)
Преобразуйте изображение в цветовое пространство L * a * b *.
Alab = rgb2lab(A);
Вычислите сверхдегментацию суперпикселя оригинального изображения и отобразите его.
[L,N] = superpixels(Alab,20000,'isInputLab',true); BW = boundarymask(L); imshow(imoverlay(A,BW,'cyan'))
Создайте массив ячеек из набора пикселей в каждой области.
pixelIdxList = label2idx(L);
Определите медианный цвет каждой области суперпикселя в цветовом пространстве L * a * b *.
[m,n] = size(L); meanColor = zeros(m,n,3,'single'); for i = 1:N meanColor(pixelIdxList{i}) = mean(Alab(pixelIdxList{i})); meanColor(pixelIdxList{i}+m*n) = mean(Alab(pixelIdxList{i}+m*n)); meanColor(pixelIdxList{i}+2*m*n) = mean(Alab(pixelIdxList{i}+2*m*n)); end
Кластеризуйте цветовую функцию каждого суперпикселя с помощью imsegkmeans
функция.
numColors = 4;
[Lout,cmap] = imsegkmeans(meanColor,numColors,'numAttempts',2);
cmap = lab2rgb(cmap);
imshow(label2rgb(Lout))
Используйте центры кластеров в качестве палитры для тематической карты. Средние цвета, обнаруженные во время кластеризации K-средних значений, могут использоваться непосредственно в качестве палитры, чтобы дать более естественную визуальную интерпретацию назначения классификации земель для леса, льда, сухой земли и воды.
imshow(double(Lout),cmap)