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