Agrupación en ráster con QGIS

10

Estoy buscando una manera de convertir un ráster clasificado en polígonos basados ​​en grupos espaciales dentro de cada clase. Para que los grupos se consideren válidos, necesito que consistan en un porcentaje mínimo de celdas de una de las clases.

Por ejemplo: un área compuesta por el 70% (o más) celdas de la clase "1" se considerará como un grupo de la clase "1", aunque el área se mezcle con el 30% de celdas pertenecientes a otras clases. El análisis de agrupamiento, por lo tanto, debe basarse en la distancia entre celdas de la misma clase.

Otra opción podría ser basar la agrupación en un número mínimo de celdas dentro de una determinada clase, junto con una definición de un área de búsqueda máxima.

Por ejemplo: dentro de un área específica debe haber 100 celdas de "clase 1" para que se considere un clúster.  

La mayoría de las herramientas relacionadas con la agrupación parecen funcionar solo para vectores. He analizado el análisis de clúster de la herramienta SAGA, pero realmente no se ajustaba a mi propósito. ¿Alguna idea para resolver esto o qué otras herramientas pueden ser útiles?

Spiran
fuente
Puede convertir el ráster en un vector y usar las herramientas de agrupación de vectores.
csk
Esa es una opción, pero creo que es mucho más fácil hacer el análisis en formato ráster si es posible. La conversión a vector probablemente generaría polígonos donde se pierden muchos detalles en la unión de las celdas ráster, o se manejan demasiados puntos (conjunto de datos grandes).
Spiran
3
Sé que esta no es una solución de QGIS, pero ¿podría usar python o R para crear una función de vecindario para crear un nuevo ráster donde se vea cada celda y si> 70% de las celdas en el vecindario pertenecen a una clase entonces esa celda se reclasifica a esa clase?
Liam G
Eso podría funcionar seguro, ¡gracias! Soy nuevo en Python pero vale la pena intentarlo.
Spiran

Respuestas:

5

Si prefiere abordar este problema en "la lógica de trama", existen algunos filtros que puede considerar. La mejor opción dependerá de la distribución espacial de sus píxeles de cada clase dentro de sus valores de "fondo", pero aquí hay dos posibles soluciones:

si los parches que desea eliminar son relativamente grandes, entonces debe usar "tamiz" (raster> análisis> tamiz en QGIS 3.2, que se basa en gdal_sieve.py).

El script gdal_sieve.py elimina los polígonos ráster más pequeños que un tamaño de umbral proporcionado (en píxeles) y los reemplaza con el valor de píxel del polígono vecino más grande. El resultado puede escribirse en la banda ráster existente o copiarse en un nuevo archivo.

Si tiene algo como un efecto de "sal y pimienta" (muchos píxeles aislados de diferentes clases, pero solo unos pocos píxeles por pequeños trazos, entonces debe usar un filtro mayoritario (por ejemplo, vaya a las herramientas adicionales de GRASS> raster> r). vecinos> seleccione la opción "modo"). Tenga en cuenta que este filtro afectará (ligeramente) sus límites.

r.neighbours: hace que cada valor de categoría de celda sea una función de los valores de categoría asignados a las celdas a su alrededor y almacena nuevos valores de celda en una capa de mapa ráster de salida

Encontrará los mismos archivadores (filtro mayoritario, clases de tamizado) y otros (morfología) en las herramientas SAGA (SAGA> filtro ráster) si lo prefiere

radouxju
fuente
Esto fue realmente más o menos cómo lo resolví. Básicamente mediante el uso de la herramienta de análisis de vecindad de césped junto con algunos cálculos en el lateral. Sin embargo, olvidé publicar la solución, muchas gracias por su aportación radouxju.
Spiran