Clustering raster tramite QGIS


10

Sto cercando un modo per convertire un raster classificato in poligoni basato su cluster spaziali all'interno di ogni classe. Perché i cluster siano considerati validi, ho bisogno che siano costituiti da una percentuale minima di celle di una delle classi.

Ad esempio: un'area composta dal 70% (o più) celle della classe "1" verrà considerata come un cluster della classe "1" anche se l'area è confusa con il 30% di celle appartenenti ad altre classi. L'analisi del clustering dovrebbe pertanto basarsi sulla distanza tra le celle della stessa classe.

Un'altra opzione potrebbe essere quella di basare il clustering su un numero minimo di celle all'interno di una determinata classe, insieme a una definizione di un'area di ricerca massima.

Ad esempio: all'interno di un'area specificata dovrebbero essere presenti 100 celle di "classe 1" per essere considerate un cluster.  

La maggior parte degli strumenti relativi al clustering sembrano funzionare solo per i vettori. Ho esaminato l'analisi del cluster dello strumento SAGA ma non si adattava perfettamente al mio scopo. Qualche idea per risolvere questo o quali altri strumenti che potrebbero essere utili?


È possibile convertire il raster in un vettore e utilizzare gli strumenti di raggruppamento dei vettori.
csk

Questa è un'opzione, ma penso che sia molto più semplice fare l'analisi in formato raster, se possibile. La conversione in vettore genererebbe probabilmente poligoni in cui molti dettagli si perdono nell'unione di celle raster, o che troppi punti gestiscono troppo (set di big data).
Spiran,

3
So che questa non è una soluzione QGIS, ma potresti usare Python o R per creare una funzione di vicinato in modo da creare un nuovo raster in cui guardare ogni cella e se> 70% delle celle del vicinato appartengono a una classe allora quella cella viene riclassificata in quella classe?
Liam G

Potrebbe funzionare sicuramente, grazie! Sono nuovo di Python ma vale la pena provarlo.
Spiran,

Risposte:


5

Se si preferisce risolvere questo problema nella "logica raster", è possibile prendere in considerazione alcuni filtri. La scelta migliore dipenderà dalla distribuzione spaziale dei pixel di ciascuna classe all'interno dei valori di "sfondo", ma qui ci sono due potenziali soluzioni:

se le patch che si desidera rimuovere sono relativamente grandi, utilizzare "setaccio" (raster> analisi> setaccio in QGIS 3.2, basato su gdal_sieve.py).

Lo script gdal_sieve.py rimuove i poligoni raster più piccoli di una dimensione di soglia fornita (in pixel) e li sostituisce con il valore in pixel del poligono più vicino adiacente. Il risultato può essere riscritto nella banda raster esistente o copiato in un nuovo file.

Se hai qualcosa di simile a un effetto "salata e pepata" (molti pixel isolati di classi diverse, ma solo pochi pixel per piccoli percorsi, allora dovresti usare un filtro di maggioranza (es. Andando agli strumenti aggiuntivi da GRASS> raster> r. vicini> seleziona l'opzione "mode". Nota che questo filtro influenzerà (leggermente) i tuoi confini.

r.neighbors - Rende ogni valore di categoria di cella una funzione dei valori di categoria assegnati alle celle circostanti e memorizza i nuovi valori di cella in un livello di mappa raster di output

Troverai gli stessi filer (filtro di maggioranza, classi di setacciamento) e altri (morfologia) negli strumenti SAGA (SAGA> filtro raster) se preferisci


Questo è stato praticamente il modo in cui l'ho risolto. Fondamentalmente, usando lo strumento di analisi della vicinanza dell'erba insieme ad alcuni calcoli sul lato. Hai dimenticato di pubblicare la soluzione, grazie per il tuo contributo radouxju.
Spiran,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.