1

Ich weiß, dass die Gaussian mixture model ist eine Verallgemeinerung von K-means, und sollte daher genauer sein.K-bedeutet genauer als Gauß-Mischmodell in bestimmten Bildregionen

Aber ich kann nicht unten auf dem Cluster-Bild sagen, warum die mit K-means erhaltenen Ergebnisse sind genauer in bestimmten Regionen (wie das Rauschen Speckle als hellblaue Punkte dargestellt, in dem Fluss in Gaussian Mixture Model Ergebnisse persistierenden aber nicht in K-means Ergebnisse) .

Unten ist der matlab Code für beide Methoden:

% kmeans 
L1 = kmeans(X, 2, 'Replicates', 5); 
kmeansClusters = reshape(L1, [numRows numCols]); 
figure('name', 'Kmeans clustering') 
imshow(label2rgb(kmeansClusters)) 

% gaussian mixture model 
gmm = fitgmdist(X, 2); 
L2 = cluster(gmm, X); 
gmmClusters = reshape(L2, [numRows numCols]); 
figure('name', 'GMM clustering') 
imshow(label2rgb(gmmClusters)) 

und im folgenden werden das Originalbild gezeigt, sowie die gruppierten Ergebnisse:

Originalbild:

Original image

K-bedeutet:

K-means clusters

Gaussian Mixture Model:

Gaussian Mixture Model

P.S: Ich clustering die Intensitätsinformation allein verwendet wird, und die Anzahl der Cluster ist 2 (d.h. Wasser und Land).

Antwort

4

Ich denke, das ist eine interessante Frage/ein Problem, also habe ich ein bisschen Zeit damit verbracht, herumzuspielen.

Zunächst ist die Annahme, dass das Gauß-Mischmodell genauer sein sollte als k-means, nicht unbedingt wahr. Sie haben unterschiedliche Annahmen und während GMM flexibler ist, gibt es keine Regel, die besagt, dass es immer besser sein sollte, insbesondere bei etwas so Subjektivem wie der Bildklassifizierung.

Mit dem k-Means-Clustering versuchen Sie, die Pixel einem von zwei Buckets zuzuordnen, und zwar ausschließlich basierend auf dem Abstand vom Mittelwert oder Schwerpunkt dieses Buckets. Wenn ich mir das Speckle-Geräusch im Fluss anschaue, fallen die Werte zwischen die beiden Schwerpunkte. Trägt man das Histogramm des Bildes und die Überlagerung der Positionen der Schwerpunkte und der Speckle-Rauschen, ich diese:

K-Means Centroids

Sie können sehen, dass das Speckle-Rauschen ist näher an den Schwerpunkt des dunkleren Material (Wasser) , also ist es dem Wassereimer zugeordnet. Dies ist im Grunde dasselbe wie ein Gauß-Mischmodell mit gleicher Varianz und gleichem Gewicht.

Einer der Vorteile eines GMM ist die Möglichkeit, die Varianz der beiden Kategorien zu berücksichtigen. Anstatt einfach zwei Zentroide zu finden und eine Linie zwischen ihnen zu ziehen, um Ihre Kategorien zu trennen, findet der GMM zwei Gauß-Werte, die am besten zu Ihren Daten passen. Dies ist ein wirklich gutes Beispielbild, weil Sie zwei dominante Formen deutlich sehen können: eine, die groß und dünn ist und eine, die kurz und breit ist.Der GMM-Algorithmus sieht die Daten als dies:

Gaussian Mixture Model

Hier können Sie sehen, dass das Speckle-Rauschen innerhalb der breiten Varianz des Landes pdf deutlich fällt.

Ein weiterer Unterschied zwischen k-means und GMM besteht darin, wie die Pixel gruppiert sind. In GMM werden die zwei Verteilungen verwendet, um jedem Pixel einen Wahrscheinlichkeitswert zuzuordnen, also ist es unscharf - es sagt nicht, "dieses Pixel ist definitiv Land", sagt es (zB) "Dieses Pixel hat eine 30% ige Chance, Wasser zu sein und eine 70% Chance, Land zu sein ", so weist es es als Land an. In diesem speziellen Beispiel ist das Wasserhistogramm sehr eng, so dass es (fälschlicherweise in diesem Fall) entscheidet, dass es sehr unwahrscheinlich ist, dass das Speckle-Rauschen tatsächlich Wasser ist.

+0

GMM präsentiert genauer die Daten, von denen a priori angenommen wird, dass sie eine bestimmte Form haben, während Kmeans nur ein weiteres Clustering ist. Die unscharfe Zone kommt mit der Genauigkeit; Kombiniert mit einem anständigen Markov-Zufallsfeld ergibt es eine überlegene Clusterbildung. Das ist natürlich, wenn die Annahme gilt. BTW nette Antwort. – mainactual

+0

Ich habe eine kleine technische Frage ('Matlab- oder Wahrscheinlichkeitsbezogen') darüber, wie Sie die extrahierten Gaußschen Verteilungen gezeichnet haben. Ich weiß, dass 'gmm.mu' und' gmm.Sigma' verwendet werden, um die "mittlere" und die "Covarianzmatrix" (die 'Varianzen' jeder Verteilung sind nur Elemente davon) zu erhalten. Die Normalverteilung soll Werte zwischen "[0, 1]" (wie jedes pdf) annehmen, wie haben Sie den Graphen auf der "y-Achse" gestreckt (wird er mit dem Maximalwert des Histogramms multipliziert)? – h4k1m

+0

@Charbucks Eine andere Frage ist, wie haben Sie die genaue Position des Speckle auf dem Histogramm gesagt? Liegt es visuell Pixel für Pixel? – h4k1m

Verwandte Themen