Esecuzione della riduzione del rumore raster e del livellamento dei bordi?


22

Ho un'immagine raster come questaImmagine raster

Voglio eliminare il punto di rumore isolato e smussare il bordo (ad esempio i singoli punti bianchi e voglio che i bordi dell'entità appaiano lisci). Come posso farlo in ArcGIS o in R?

La dimensione della cella è 30 * 30.

Risposte:


15

Le operazioni morfologiche Expand e Shrink sono state create per questo tipo di elaborazione. Usa ArcGIS (o GRASS o Mathematica ) perché Rla libreria "raster" è troppo lenta.


Spesso aiuta a sperimentare un po 'con i parametri: devi decidere quanta espansione e riduzione sono necessarie per pulire un'immagine; e di solito vuoi fare il meno possibile, perché ogni operazione tende ad appianare alcuni dettagli nitidi. Ecco una sequenza che funziona bene per eliminare gran parte del "rumore" apparente mantenendo la maggior parte dei dettagli nelle "entità". "Espandi" e "restringimento" sono entrambi con riferimento ai globuli bianchi , in modo che l'espansione li induca a crescere verso l'esterno e la contrazione induca i globuli neri ad invadere le regioni bianche.

Tabella delle immagini

La colonna "differenza" usa il colore per evidenziare le differenze tra l'immagine iniziale e finale ad ogni passaggio: blu per il nero che è diventato bianco e arancione per il bianco che è diventato nero.

Se i pezzi rimanenti più grandi devono essere rimossi, è meglio farlo RegionGroup per identificarli, dopo di che possono essere cancellati attraverso la riclassificazione. All'inizio questa era un'opzione, ma una piccola pulizia iniziale con Expande Shrinkriduce il lavoro e fornisce il livellamento desiderato.


Per inciso, ho scelto di realizzare le otto immagini in questa illustrazione con comandi di Mathematica perché sono così semplici, facili e veloci da eseguire:

i = Import["http://i.stack.imgur.com/umDg7.png"];
l = Dilation[k = Erosion[j = Dilation[i, 2], 3], 1];      (* This does all the work *)
delta = ColorCombine /@ {{i, j}, {j, k}, {k, l}, {i, l}}; (* Compares images *)

Il flusso di lavoro in ArcGIS è lo stesso ma la sintassi sarà più lunga. Se vuoi davvero usarlo R, carica la libreria "raster" e sfrutta focalFilterper creare funzioni per l'espansione e la riduzione. Quindi attendere circa un minuto ciascuno per eseguire le operazioni ....


Ciao! Se non ti dispiace, potresti inviarmi le tue informazioni di contatto? Vorrei riconoscerti nella mia ricerca. Grazie! @whuber
Visto

Conosci i comandi equivalenti in GRASS?
Richard

1
@Richard Sono sicuro che ci sono molti modi creativi per eseguire queste operazioni in GRASS, ma i vicini r. Sembrano ben adatti al compito.
whuber

12

Utilizzando l'estensione Analista spaziale, è possibile utilizzare alcuni degli strumenti di generalizzazione . Alcuni di loro svolgono compiti simili, quindi potresti aver bisogno di giocare con alcuni per ottenere i risultati nel modo in cui li desideri. Ma darei uno sguardo allo strumento Filtro di maggioranza e allo strumento Pulizia contorni.

Ecco una pagina sui concetti di questi due strumenti.

Non sono sicuro di come eseguire queste attività in R, ma ecco un post su come eseguire un filtro di maggioranza utilizzando GRASS GIS.


2

Questa è sostanzialmente una variante della risposta di @ whuber e usa Euclidian Distance per espandere e ridurre i confini del raster per smussare gli angoli acuti del raster, che è esagerato dal processo di espansione-riduzione che utilizza il numero di celle per crescere / invadere. Sebbene Euclidian Distance imiti Espandi, non è possibile introdurre un valore negativo per invadere / ridurre. Il trucco è sviluppare un processo iterativo per prendere il negativo di Euclidian Distance raster e farlo crescere. Di seguito sono riportati i passaggi per le immagini di esempio fornite e le istantanee per chiarimenti.

  1. Riclassifica raster per mantenere solo 1s (globuli bianchi)

  2. Applicare la distanza euclidea per la distanza di due celle (in questo caso 60 metri) al quadro riclassificato

  3. Prendi il negativo del raster espanso usando Ricodifica (le celle con il valore otterranno NODATA e NODATA saranno girate su 1) o gli operatori Con e IsNull del calcolatore raster

  4. Applica ancora una volta Euclidian Distance a questo raster negativo con la stessa distanza (60 m)

  5. Prendi il negativo di questo seguendo lo stesso procedimento sopra indicato

  6. Usa Raster Calculator o Ricodifica per assegnare le celle NODATA a 0 in questo raster per tornare ai valori originali del raster di esempio

Espandi Riduci rispetto a Euclidian Distance

Espandi e riduciDistanza euclidea

Nota: il verde mostra le celle elaborate (globuli bianchi nelle domande)

Il vantaggio di Euclidian Distance è che ci vuole il giusto distanza da ogni cellula attraverso le estensioni ipotenuse che levigano bordi altrimenti taglienti. Il numero di parametro di cella degli strumenti di espansione e riduzione, d'altra parte, elabora lo stesso numero di celle per tutte le direzioni, che produce bordi come bordi, quindi generalizza eccessivamente i bordi / angoli.

Il problema principale, tuttavia, non rimuove il rumore con la stessa efficacia di espansione / riduzione ed è un po 'più lungo della risposta.


Per chiunque stia facendo questo e usando GRASS / QGIS - puoi usare r.grow e crescere di una distanza euclidea positiva, seguita da una distanza euclidea negativa
srha
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.