В этом примере показано, как выполнить классификацию типа земли на основе цветовых признаков с использованием кластеризации и суперпикселей K-means. Суперпиксели могут быть очень полезной техникой при выполнении сегментации и классификации, особенно при работе с большими изображениями. Суперпиксели позволяют разбить изображение на набор структурно значимых областей, где границы каждой области учитывают информацию о краях в исходном изображении. Как только изображение разбивается на суперпиксельные области, алгоритмы классификации можно использовать для классификации каждой области, вместо того, чтобы решать проблему классификации по всей исходной сетке изображения. Использование суперпикселей может обеспечить большие преимущества производительности при решении проблем классификации изображений, в то же время обеспечивая высококачественный результат сегментации.
Чтение изображения в рабочую область. Для повышения производительности в этом примере размер изображения уменьшается вдвое. Визуально существует четыре типа земель, которые различимы на изображении из синего мрамора, основанном только на цветовых особенностях: лесистые области, сухие/пустынные области, покрытые льдом области и вода.
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)
![]()