Come bilanciare i falsi compositi di immagini Landsat nitide in GRASS?


9

Ogni volta che provo a rendere più nitidi i compositi di alcune immagini Landsat in GRASS usando i.pansharpen, i.fusion.broveyo il metodo di nitidezza IHS, l'output avrà alcune o tutte le seguenti caratteristiche:

  • il colore composito ha una tonalità diversa rispetto al composito non nitido
  • il livello di luminosità è incasinato
  • l'intero composito è diventato tutto bianco / tutto nero (quando si utilizzano immagini preelaborate per la riflettanza della parte superiore dell'atmosfera o le correzioni della riflettanza della superficie in i.landsat.toar)

Ho anche provato tutto quanto segue; ma i colori / la luminosità sono rimasti gli stessi o sono peggiorati:

  • Applicato i.landsat.rgbprima e dopo il processo di affilatura
  • Giocato con la bandiera -fo -pdentroi.landsat.rgb
  • r.colorsHo provato a modificare la tabella dei colori in grey / grey255 / grey.eq
  • Ho provato i.pansharpenusando tutti i metodi Brovey / IHS / PCA
  • Giocato con la -lbandiera i.pansharpenper riequilibrare il canale blu

Il manuale di GRASS GIS ha spiegato come eseguire la nitidezza e il bilanciamento del colore, ma non riesco a capire come combinare entrambi i processi in un flusso di lavoro simultaneo. Sospettavo che ciò fosse dovuto alla mia scarsa comprensione delle tabelle dei colori, dell'istogramma dei colori, ecc. In GRASS ..

Quindi, qualcuno può spiegarmi: come affrontare i problemi di bilanciamento del colore quando si tratta di immagini Landsat dopo l'elaborazione delle immagini in GRASS? Puoi condividere con me il tuo flusso di lavoro / metodi preferiti?

Mille grazie per qualsiasi feedback!

Risposte:


6

Panoramica

Un approccio di lavoro all'interno di GRASS-GIS versione 7 per ottenere un'immagine composita con bilanciamento del colore accettabile dopo il Pan-sharpening è

  1. controlla se i dati di input sono a 8 bit all'interno di [0, 255]
  2. se i dati sono all'interno di [0, 255] procedere quindi al pan-sharpening ( i.pansharpen)
  3. se i dati non sono all'interno di [0, 255], ridimensionali in questo intervallo ( r.rescale)
  4. migliorare la nitidezza con uno dei metodi descritti (Brovey, IHS, PCA)
  5. bilanciamento del colore automaticamente utilizzando il i.landsat.rgbmodulo o regolando manualmente le tabelle dei colori delle bande di interesse

Dettagli e istruzioni di esempio

Pan-Sharpening / Fusion

GRASS 7 è i.pansharpendotato di un modulo di affilatura per pan dedicato, che presenta tre tecniche di affilatura, ovvero la trasformazione di Brovey , il metodo IHS classico e uno basato su PCA .

i.pansharpenfunziona bene con le mappe raster a 8 bit come input. Se i dati da elaborare sono al di fuori di questo intervallo, cioè fuori [0, 255], possono essere riscalati per adattarsi a questo intervallo utilizzando il r.rescalemodulo GRASS ' .

Dato un insieme di bande spettrali a 11 bit (ad esempio Blu, Verde, Rosso, NIR e Pan) che vanno tra [0, 2047], la query della banda Blu ad esempio restituirebbe

r.info Blue_DNs -r
min=0
max=2047

Rescaling la banda blu per variare tra [0, 255]

r.rescale in=Blue_DNs out=Blue_DNs_255 from=0,2047 to=0,255

Lo stesso passo si applica sia al resto delle bande multispettrali sia alla banda pancromatica di interesse.

Come al solito quando si lavora con GRASS, è necessario impostare la regione di interesse, ovvero corrispondere all'estensione della (e) banda (e) o altro. La risoluzione stessa è curata in questo caso particolare dal modulo e le risultanti mappe raster nitide avranno la stessa (alta) risoluzione della banda Panchromatic.g.regionrast=Blue_DNs_255

Potrebbe apparire un comando di esempio per un'azione di Pan-Sharpening basata su IHS

i.pansharpen pan=Pan_DNs_255 ms1=Blue_DNs_255 ms2=Green_DNs_255 ms3=Red_DNs_255 output=sharptest255 sharpen=ihs

Bilanciamento del colore

Dopo il completamento del processo, il modulo viene emesso

...
The following pan-sharpened output maps have been generated:
sharptest255_red
sharptest255_green
sharptest255_blue

To visualize output, run: g.region -p rast=sharptest255.red
d.rgb r=sharptest255_red g=sharptest255_green b=sharptest255_blue

Normalmente dovrebbe essere sufficiente riequilibrare i colori dopo la nitidezza usando, ad esempio, il modulo i.landsat.rgb o la regolazione manuale di ciascuna delle tre bande che comporrebbero un'immagine RGB.

Screenshots

... da aggiungere


Sapevo che doveva esserci un modo migliore! Ora posso usare liberamente il modulo i.sharpen. Grazie per aver sottolineato il modulo r.rescale. Ottimo lavoro Nikos!

Haziq, non sono sicuro se e quanti dettagli "fini" vadano persi durante la conversione di set di dati a 11 bit in 8 bit. Le immagini di QuickBird, ad esempio, sono un sensore a 11 bit. Sono disponibili in entrambi i formati a 8 e 16 bit. Spetta all'utente decidere cosa fare. Sarebbe sicuramente bello per i.pansharpengestire tutti i tipi di formati. Dai un'occhiata a un "ticket" correlato: Ticket n. 2048: i.pansharpen limitato a immagini a 8 bit . D'altra parte, potrei semplicemente non capire le cose e, quindi, non essere in grado di usare correttamente i.pansharpen ...?
Nikos Alexandris,

7

Ho cercato in alto e in basso e penso di aver scoperto la radice dei miei problemi. Credo di aver trovato la soluzione per loro ora - ma è un po 'disordinato. Sono sicuro che ci sono modi migliori per risolverli. Condividi se conosci un modo più semplice!

RADICI DI PROBLEMI:

  1. L'output di i.landsat.toar è in virgola mobile . Mi sono reso conto che quando uso i raster a virgola mobile in qualsiasi metodo di nitidezza, i colori si incasinano. Quell'algoritmo preferiva in qualche modo i raster nella forma intera originale.
  2. Moduli di nitidezza come i.pansharpen e i.fusion.brovey moduli rovinano i colori . Non ho ben compreso gli algoritmi che hanno usato in quei moduli, ma in qualche modo le tabelle dei colori saranno influenzate e rovinando le immagini risultanti più nitide.

SOLUZIONE:

  1. Converti l'output da i.landsat.toar float a int, usando r.recode .
  2. Utilizzare i raster come input nel metodo IHS di nitidezza ( i.rgb.hise i.his.rgb). Mi tengo lontano dall'uso i.pansharpene i.fusion.brovey.

IL FLUSSO DI LAVORO:

  1. Utilizzare r.info con il -r flag per ottenere i valori minimo e massimo di DN di ciascuna banda raster con cui sono stati elaborati i.landsat.toar. Per esempio:

    > r.info -r BAND1
    min=0.01
    max=0.370064120902708
    

    Come possiamo vedere, i valori sono compresi tra 0-1, che sono piuttosto diversi da quelli originali (che sono compresi tra 0-255). Ciò spiega perché l'output del pan-sharpening è risultato vuoto, poiché l'intervallo di valori utilizzato è molto basso (inferiore a 1).

  2. Converti quella banda raster usando r.recode . Utilizzare i valori min e max ottenuti dal passaggio 1 per convertire in un nuovo intervallo di 0-255. Un frammento di codice di esempio:

    r.recode input=BAND1 output=NEWBAND1 rules=- << EOF
    0.01:0.370064120902708:0:255
    EOF
    

    Possiamo verificare i nuovi valori convertiti con r.info:

    > r.info -r NEWBAND1
    min=1
    max=254
    

    I valori sono compresi tra 0 e 255: ora è utilizzabile per il processo di nitidezza.

  3. Applicare la tabella dei colori in scala di grigi alla banda convertita con r.colors .

    r.colors NEWBAND1 color=grey
    

    Finora, ho ottenuto i migliori risultati usando la tabella dei colori grigi: i compositi con nitidezza migliorata si sono abbinati strettamente ai compositi originali. Le altre alternative sono di equalizzare la tabella dei colori grigia con color=grey.eqo usando la -ebandiera con color=grey. Oppure possiamo usare il i.landsat.rgbmodulo invece di r.colors..

  4. Ripeti il ​​passaggio 1-3 con altre bande raster che intendiamo utilizzare come compositi, incluso il pan raster (banda 8). L'uso degli script sarebbe molto apprezzato qui.

  5. Quindi utilizzare i raster elaborati come input nel metodo di affilatura panoramica IHS . Ad esempio, quando si effettua il composito di banda 7,4,2:

    i.rgb.his r=NEWBAND7 g=NEWBAND4 b=NEWBAND2 hue=HUE int=INT sat=SAT
    

    Ciò produrrà 3 livelli: un livello di tonalità HUE, un livello di intensità INTe anche un livello di saturazione SAT. Sostituiremo quindi il livello di intensità INTcon la banda pan raster NEWBAND8in i.his.rgb:

    i.his.rgb hue=HUE sat=SAT int=NEWBAND8 r=COMP742_red g=COMP742_green b=COMP742_blue
    

    I canali rossi risultanti di COMP742_red , COMP742_green , COMP742_blue possono quindi essere combinati usando d.rgbo r.composite..

CAMPIONE PRIMA E DOPO:

Prima della nitidezza:

Prima

Dopo l'affilatura:

Dopo

Forse è difficile distinguere le differenze di nitidezza quando si guardano da immagini così piccole. L'importante è che il colore dell'immagine nitida corrisponda al composito dall'originale. Missione compiuta!

ALTRE NOTE:

  • Non r.recode le bande termiche (banda 6) . i.landsat.toaremette queste bande termiche in valori di temperatura Kelvin (nulla a che fare con i valori DN). Mantenere la r.recoderoutine sulle normali bande multi-spettrali e pan (bande 1-5,7,8).
  • Se non lo usiamo mai i.landsat.toar , ma i compositi risultanti sembrano davvero sbagliati , di solito è a causa della mancata corrispondenza delle tabelle dei colori prima e dopo il processo di nitidezza. Ho applicato r.colors RASTER color=greyalle bande raster originali prima della nitidezza e ai canali risultanti dopo la nitidezza per garantire una perfetta corrispondenza dei colori.
  • Un solito caso del problema composito di colore sbagliato : sono presenti le bande raster originali color=grey255, l'output di i.landsat.rgbè in color=grey.eq. Non c'è da stupirsi che entrambi sembrino diversi!
  • L'elaborazione di immagini Landsat per l'uso potrebbe davvero essere un'attività che richiede tempo . Meglio avere qualcosa da fare quando si aspetta che tutto venga elaborato, o almeno avere una quantità ridicola di caffè e buona musica mentre ci sei;)

Spero che questo possa giovare a qualcuno: mi ci sono voluti giorni per scoprire cosa non va ..


1
Grazie per le vostre ricerche e sforzi, ho riscontrato anche questo problema nel nuovo GRASS 7 di svn. Ora i colori dell'immagine pansharpened sono OK. =)
Vladimir

Oh sì, ho dimenticato di menzionare la versione di GRASS in esecuzione - grazie @VladimirNaumov per avermelo ricordato! Sto usando GRASS 7svn; avrei dovuto capire che questo problema potrebbe essere qualcosa che non si verifica in tutte le versioni di GRASS (non ho provato altre versioni) ..

Di nuovo a questo: è possibile convertire mappe raster in virgola mobile in mappe raster intere utilizzando r.mapcalcinsieme alla sua int()funzione integrata . Penso che r.recodenon sia pensato per essere usato nel contesto della tua applicazione.
Nikos Alexandris,

1
Penso che il "problema" generale i.pansharpensia che si prevede che le mappe raster a 8 bit come input, ovvero che i valori di input debbano variare da 0 a 255.
Nikos Alexandris,

Inoltre, nota che i.pansharpenè solo in grass7_trunk. Questa è la versione di sviluppo ... :-)
Nikos Alexandris,
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.