Finding locations of images clusters centroids using imsegkmeans
6 views (last 30 days)
Show older comments
I use imsegkmeans to cluster images and I need to know the centroid of each cluster. So I write this line:
[Labels,centers] = imsegkmeans(div_img,4);
My image is an RGB 250-250 pixels and I am clustering it into 4 clusters, so I got a 4-3 matrix which matches the explaination in the documentation.
centers
centers =
4×3 uint8 matrix
25 25 29
15 9 13
64 58 54
34 13 14
My understading is that the first row [25,25,29] contains the centroid for the first cluster and it has 3 values for R, G and B channels. However, I don't understand how this is a location? I need indices for row and column for the centroid of each cluster
0 Comments
Answers (1)
Shubham Rawat
on 2 Feb 2021
Hi Hassan,
In the imsegkmeans function you will have centroid values of the colors not the positions.
I have created a custom code which will generate Centroid positions of each cluster with the help of Label matrix:
% input Image(RGB) and number of clusters k
% output clusteIndices k*2 size
function clusterIndices = clusterIndices(I,k)
% L is the Label matrix here
[L,~] = imsegkmeans(I,k);
% initialization
clusterIndices = zeros(k,2);
sumx = zeros(k,2);
sumy = zeros(k,2);
num = zeros(k,1);
for c = 1:k
for i = 1:size(L,1)
for j = 1:size(L,2)
if L(i,j) == c
sumx(c) = sumx(c)+i;
sumy(c) = sumy(c)+j;
num(c) = num(c)+1;
end
end
end
clusterIndices(c,1) = sumx(c)/num(c);
clusterIndices(c,2) = sumy(c)/num(c);
end
end
Hope this Helps!
0 Comments
See Also
Categories
Find more on Cluster Analysis and Anomaly Detection in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!