Постройте классификацию земель с цветными функциями и суперпикселями

В этом примере показано, как выполнить классификацию типа земли на основе цветных функций с помощью кластеризации 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)