Sort clusters using K-means by intensity
    5 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
Hello everyone. I am using K-means to segment some grayscale images. Unfortunately, the values of the generated clusters are not repeatable, i.e. every time I run the code the clusters have a different value. For example, if I use k=2 sometimes the darker areas of the original image have a cluster value of 1 and sometimes 2 (before normalisation). How to sort/order the generated clusters to have a value corresponding to the actual grayscale intensities, i.e. darkest = 1, less dark = 2,... brightest = k ? Thanks. Here is the code:
      % Clustering.
      clustered = reshape(kmeans(inputimage(:), k), size(inputimage)); 
      % Normalise intensities from 0 to 1.
      clustered = clustered - min(clustered(:));
      clustered = clustered / max(clustered(:));
Réponse acceptée
  Walter Roberson
      
      
 le 29 Mai 2015
        You are normalizing the indices, not by cluster intensities.
kidx = kmeans(inputimage(:), k);
clustermeans = accumarray(kidx, inputimage(kidx),[], @mean);
[sortedmeans, sortidx] = sort(clustermeans);
kidxmapped = sortidx(kidx);
clustered = reshape(kidxmapped, size(inputImage));
9 commentaires
Plus de réponses (0)
Voir également
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

