Kann mir bitte jemand helfen, zu verstehen, wie die Mean-Shift-Segmentierung tatsächlich funktioniert?
Hier ist eine 8x8-Matrix, die ich gerade erstellt habe
103 103 103 103 103 103 106 104
103 147 147 153 147 156 153 104
107 153 153 153 153 153 153 107
103 153 147 96 98 153 153 104
107 156 153 97 96 147 153 107
103 153 153 147 156 153 153 101
103 156 153 147 147 153 153 104
103 103 107 104 103 106 103 107
Kann anhand der obigen Matrix erklärt werden, wie die Segmentierung der mittleren Verschiebung die drei verschiedenen Zahlenebenen trennen würde?
Die Grundlagen zuerst:
Die Mean-Shift-Segmentierung ist eine lokale Homogenisierungstechnik, die sehr nützlich ist, um Schattierungs- oder Tonwertunterschiede in lokalisierten Objekten zu dämpfen. Ein Beispiel ist besser als viele Wörter:
Aktion: Ersetzt jedes Pixel durch den Mittelwert der Pixel in einer Entfernung -r-Nachbarschaft, deren Wert innerhalb eines Abstands d liegt.
Die mittlere Verschiebung nimmt normalerweise 3 Eingaben an:
Bitte beachten Sie, dass der Algorithmus an den Rändern nicht gut definiert ist, sodass verschiedene Implementierungen dort unterschiedliche Ergebnisse liefern.
Ich werde hier NICHT auf die wichtigsten mathematischen Details eingehen, da sie ohne die richtige mathematische Notation, die in StackOverflow nicht verfügbar ist, nicht dargestellt werden können und auch, weil sie aus guten Quellen anderswo zu finden sind .
Schauen wir uns die Mitte Ihrer Matrix an:
153 153 153 153
147 96 98 153
153 97 96 147
153 153 147 156
Bei angemessenen Auswahlmöglichkeiten für Radius und Abstand erhalten die vier mittleren Pixel den Wert 97 (ihren Mittelwert) und unterscheiden sich von den benachbarten Pixeln.
Berechnen wir es in Mathematica . Anstatt die tatsächlichen Zahlen anzuzeigen, wird eine Farbcodierung angezeigt, damit Sie besser verstehen, was passiert:
Die Farbcodierung für Ihre Matrix lautet:
Dann nehmen wir eine vernünftige mittlere Verschiebung:
MeanShiftFilter[a, 3, 3]
Und wir bekommen:
Wobei alle Mittelelemente gleich sind (bis 97, Übrigens).
Sie können mit Mean Shift mehrmals iterieren, um eine homogenere Färbung zu erzielen. Nach einigen Iterationen gelangen Sie zu einer stabilen nicht-isotropen Konfiguration:
Zu diesem Zeitpunkt sollte klar sein, dass Sie nicht auswählen können, wie viele "Farben" Sie nach der Anwendung von Mean Shift erhalten. Lassen Sie uns also zeigen, wie es geht, denn das ist der zweite Teil Ihrer Frage.
Um die Anzahl der Ausgangscluster im Voraus festlegen zu können, müssen Sie etwa Kmeans clustering eingeben.
Es läuft für Ihre Matrix folgendermaßen ab:
b = ClusteringComponents[a, 3]
{{1, 1, 1, 1, 1, 1, 1, 1},
{1, 2, 2, 3, 2, 3, 3, 1},
{1, 3, 3, 3, 3, 3, 3, 1},
{1, 3, 2, 1, 1, 3, 3, 1},
{1, 3, 3, 1, 1, 2, 3, 1},
{1, 3, 3, 2, 3, 3, 3, 1},
{1, 3, 3, 2, 2, 3, 3, 1},
{1, 1, 1, 1, 1, 1, 1, 1}}
Oder:
Das ist unserem vorherigen Ergebnis sehr ähnlich, aber wie Sie sehen können, haben wir jetzt nur drei Ausgangspegel.
HTH!
Eine Mean-Shift-Segmentierung funktioniert ungefähr so:
Die Bilddaten werden in den Objektbereich konvertiert
In Ihrem Fall haben Sie lediglich Intensitätswerte, sodass der Merkmalsraum nur eindimensional ist. (Sie könnten zum Beispiel einige Texturmerkmale berechnen und dann wäre Ihr Merkmalsraum zweidimensional - und Sie würden anhand der Intensität segmentieren und Textur)
Suchfenster sind über den Funktionsbereich verteilt
Die Anzahl der Fenster, die Fenstergröße und die Anfangspositionen sind in diesem Beispiel beliebig. Diese Einstellung kann in Abhängigkeit von bestimmten Anwendungen optimiert werden
Mean-Shift-Iterationen:
1.) Die MEANs der Datenproben in jedem Fenster werden berechnet
2.) Die Fenster werden an die Positionen verschoben, die ihren zuvor berechneten Mittelwerten entsprechen.
Die Schritte 1.) und 2.) werden bis zur Konvergenz wiederholt, d. H. Alle Fenster haben sich an den endgültigen Positionen niedergelassen
Die Fenster, die sich am selben Ort befinden, werden zusammengeführt
Die Daten werden nach Fensterdurchläufen gruppiert
... z.B. Alle Daten, die von Fenstern durchlaufen wurden, die beispielsweise an Position "2" endeten, bilden einen mit dieser Position verknüpften Cluster.
Diese Segmentierung erzeugt also (zufällig) drei Gruppen. Das Betrachten dieser Gruppen im Originalbildformat könnte ungefähr so aussehen wie das letzte Bild in der Antwort von belisarius . Die Auswahl unterschiedlicher Fenstergrößen und Anfangsorte kann zu unterschiedlichen Ergebnissen führen.