2016-03-29 1 views
0

Ich verwende K-Means, um die Farbe im Bild zu segmentieren und jetzt möchte ich RGB-Werte von jeder Farbe erhalten, die bereits Cluster waren. Und noch eine Sache, kann mir jemand erklären, warum Cluster-Center zwei Werte haben (6 x 2 Doppel)? Ist es das Spektrum des Clusterzentrums? Etwas?Wie kann man RGB-Werte vom Cluster-Zentrum mit K-Mitteln bestimmen?

cform = makecform('srgb2lab'); 
lab = applycform(a,cform); 

ab = double(lab(:,:,2:3)); 
nrows = size(ab,1); 
ncols = size(ab,2); 
ab = reshape(ab,nrows*ncols,2); 

nColors = 6; 
[cluster_idx, cluster_center] = kmeans(ab, nColors, 
             'distance','sqEuclidean', 'Replicates', 3); 
pixel_labels = reshape(cluster_idx, nrows, ncols); 
segmented_images = cell(1,3); 
rgb_label = repmat(pixel_labels,[1 1 3]); 
+0

Ofc Cluster-Center haben 2 Werte, wenn es nur 1 Wert war - sagen 16, wie würdest du das interpretieren? der 16. Pixel? die 16. Reihe? Um den RGB-Wert zu lesen, wenden Sie Ihren Cluster auf das Originalbild (vor dem LAB-Schritt) und lesen Sie die RGB-Werte – GameOfThrows

+0

Ich nehme an, dass Ihr Bild 2D ist (ohne die Farbdimension)? In diesem Fall benötigen die Zentren zwei Werte, eine Zeilen- und eine Spaltenkoordinate. – Dan

+0

Bedeutet es, dass das Cluster-Zentrum eine Koordinate ist, die den RGB-Wert repräsentiert? – userstack

Antwort

0

Ihre cluster_center 6-by-2, da Sie kmeans gebeten, zu berechnen nColors=6 (das heißt k=6) -Zentren in einem Farbraum von nur a und b Komponenten des Lab Farbraum.

Um RGB-Werte aus diesen sechs Zentren Sie

  1. Fix einige Standardwert, L' für die L Komponente zu bekommen, und die L'ab Werte Zentren in RGB zurückwandeln.
  2. Verwenden Sie die cluster_idx Masken, um die durchschnittliche Farbe jedes Segments im ursprünglichen RGB-Bild zu berechnen.
Verwandte Themen