Ich möchte RGB-Bilder für die Landbedeckung mit k Mitteln segmentieren, indem ich sie so gruppiere, dass die verschiedenen Bereiche des Bildes durch unterschiedliche Farben markiert werden und wenn möglich Grenzen zwischen verschiedenen Bereichen erstellt werden. Ich möchte so etwas wie:
davon :
Ist es möglich, dies durch K-Mittel-Clustering zu erreichen? Ich habe im ganzen Internet gesucht und viele Tutorials tun dies mit k bedeutet Clustering, aber erst nachdem das Bild in Graustufen konvertiert wurde. Ich möchte es nur mit einem RGB-Bild machen. Gibt es eine Quelle, die mir dabei helfen könnte? Bitte schlagen Sie etwas vor.
Antworten:
Ich habe eine Lösung dafür gehackt und vor einiger Zeit einen Blog- Artikel zu einem sehr ähnlichen Thema geschrieben, den ich hier zusammenfassen werde. Das Skript soll einen Fluss aus einem 4-Band-NAIP-Bild unter Verwendung eines Bildsegmentierungs- und Klassifizierungsansatzes extrahieren.
In diesem Beispiel wird ein Bild mithilfe von Quickshift- Clustering im Farbraum (x, y) mit 4 Bändern (rot, grün, blau, NIR) segmentiert, anstatt K-Mittel-Clustering zu verwenden. Die Bildsegmentierung wurde mit dem Scikit-Image- Paket durchgeführt. Weitere Details zu einer Vielzahl von Bildsegmentierungsalgorithmen im Scikit-Bild finden Sie hier . Der Einfachheit halber habe ich einen
arcpy
Großteil der GIS-Arbeit erledigt, obwohl dies ziemlich einfach auf GDAL zu portieren sein sollte.quelle
Sie könnten sich das Clustering in Scikit-Learn ansehen . Sie müssen die Daten in numpy Arrays lesen (ich würde Rasterio vorschlagen ) und von dort aus können Sie die Daten so bearbeiten , dass jedes Band eine Variable für die Klassifizierung ist. Zum Beispiel, vorausgesetzt , Sie haben die drei Bänder in Python zu lesen wie
red
,green
undblue
numpy Arrays:Beachten Sie, dass das KMeans-Clustering die Konnektivität innerhalb des Datasets nicht berücksichtigt.
quelle
rasterio
;)rasterio
.