Quiero segmentar las imágenes RGB para la cobertura del suelo usando k significa agrupar de tal manera que las diferentes regiones de la imagen estén marcadas con diferentes colores y, si es posible, se crean límites que separen las diferentes regiones. Quiero algo como:
de esto :
¿Es posible lograr esto mediante la agrupación de K-means? He estado buscando en todo Internet y muchos tutoriales lo hacen por medio de clusters, pero solo después de convertir la imagen a escala de grises. Quiero hacerlo solo con una imagen RGB. ¿Hay alguna fuente que pueda ayudarme a comenzar con esto? Por favor sugiera algo.
Respuestas:
Hackeé una solución para esto y escribí un artículo de blog hace un tiempo sobre un tema muy similar, que resumiré aquí. El guión está destinado a extraer un río de una imagen NAIP de 4 bandas mediante un enfoque de segmentación y clasificación de imágenes.
Este ejemplo segmenta una imagen usando la agrupación de cambio rápido en el espacio de color (x, y) con 4 bandas (rojo, verde, azul, NIR) en lugar de usar la agrupación K-means. La segmentación de la imagen se realizó utilizando el paquete scikit-image . Más detalles sobre una variedad de algoritmos de segmentación de imágenes en scikit-image aquí . Por conveniencia, solía
arcpy
hacer gran parte del trabajo de SIG, aunque esto debería ser bastante fácil de transferir a GDAL.fuente
Podrías ver la agrupación en scikit-learn . Tendrá que leer los datos en matrices numpy (sugeriría rasterio ) y desde allí puede manipular los datos para que cada banda sea una variable para la clasificación. Por ejemplo, suponiendo que tiene las tres bandas leen en Python como
red
,green
yblue
matrices numpy:Tenga en cuenta que la agrupación de KMeans no tiene en cuenta la conectividad dentro del conjunto de datos.
fuente
rasterio
;)rasterio
.