Центроиды не соответствуют координатам на изображении, а координаты в пространстве объектов. Существует два способа проверить, насколько хорошо выполняются kmeans. В обоих направлениях вы хотите, чтобы кулак связывал точки с их ближайшим кластером. Вы получаете эту информацию из первого выхода kmeans.
(1) Вы можете визуализировать результат кластеризации, уменьшив 6-мерное пространство до 2 или 3-мерного пространства, а затем построив по-разному классифицированные координаты в разных цветах.
Предполагая, что векторы функции собраны в массиве с именем featureArray
, и что вы просили nClusters
кластеров, вы могли бы сделать сюжет следующим использованием mdscale для преобразования данных, скажем, в 3D-пространстве:
%# kmeans clustering
[idx,centroids6D] = kmeans(featureArray,nClusters);
%# find the dissimilarity between features in the array for mdscale.
%# Add the cluster centroids to the points, so that they get transformed by mdscale as well.
%# I assume that you use Euclidean distance.
dissimilarities = pdist([featureArray;centroids6D]);
%# transform onto 3D space
transformedCoords = mdscale(dissimilarities,3);
%# create colormap with nClusters colors
cmap = hsv(nClusters);
%# loop to plot
figure
hold on,
for c = 1:nClusters
%# plot the coordinates
currentIdx = find(idx==c);
plot3(transformedCoords(currentIdx,1),transformedCoords(currentIdx,2),...
transformedCoords(currentIdx,3),'.','Color',cmap(c,:));
%# plot the cluster centroid with a black-edged square
plot3(transformedCoords(1:end-nClusters+c,1),transformedCoords(1:end-nClusters+c,2),...
transformedCoords(1:end-nClusters+c,3),'s','MarkerFaceColor',cmap(c,:),...
MarkerEdgeColor','k');
end
(2) вы можете, в качестве альтернативы, создать псевдо-цветное изображение, которое показывает, какую часть изображения принадлежит к какому кластеру
Если предположить, что у вас есть nRows
от nCols
блоков, вы пишете
%# kmeans clustering
[idx,centroids6D] = kmeans(featureArray,nClusters);
%# create image
img = reshape(idx,nRows,nCols);
%# create colormap
cmap = hsv(nClusters);
%# show the image and color according to clusters
figure
imshow(img,[])
colormap(cmap)