Je veux segmenter les images RVB pour la couverture terrestre en utilisant k signifie un regroupement de telle manière que les différentes régions de l'image sont marquées par des couleurs différentes et si possible des limites sont créées séparant les différentes régions. Je veux quelque chose comme:
de cela:
Est-il possible d'y parvenir par le clustering K-means? J'ai cherché partout sur Internet et de nombreux didacticiels le font par k moyens de clustering, mais uniquement après avoir converti l'image en échelle de gris. Je veux le faire avec une image RVB uniquement. Y a-t-il une source qui pourrait m'aider à commencer? Veuillez suggérer quelque chose.
Réponses:
J'ai piraté ensemble une solution pour cela et j'ai écrit un article de blog il y a quelque temps sur un sujet très similaire, que je résumerai ici. Le script est destiné à extraire une rivière d'une image NAIP à 4 bandes en utilisant une approche de segmentation et de classification d'images.
Cet exemple segmente une image en utilisant le clustering quickshift dans l'espace couleur (x, y) avec 4 bandes (rouge, vert, bleu, NIR) plutôt qu'en utilisant le clustering K-means. La segmentation de l'image a été effectuée à l'aide du package scikit-image . Plus de détails sur une variété d'algorithmes de segmentation d'image dans scikit-image ici . Pour des raisons de commodité, je faisais une
arcpy
grande partie du travail SIG, bien que cela devrait être assez facile à transférer vers GDAL.la source
Vous pouvez regarder le clustering dans scikit-learn . Vous devrez lire les données dans des tableaux numpy (je suggérerais rasterio ) et à partir de là, vous pouvez manipuler les données afin que chaque bande soit une variable de classification. Par exemple, en supposant que vous avez les trois bandes lu en python comme
red
,green
et lesblue
tableaux numpy:Notez que le clustering KMeans ne prend pas en compte la connectivité au sein de l'ensemble de données.
la source
rasterio
;)rasterio
.