Центроиды соответствуют не координатам на изображении, а координатам в пространстве объектов. Есть два способа проверить, насколько хорошо 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)