Wie kann man falsche Komposite aus pan-geschärften Landsat-Bildern in GRASS farblich ausgleichen?

9

Jedes Mal , wenn ich versuche, pan-sharpen Komposite einiger Landsatbildern in GRASS mit i.pansharpen, i.fusion.broveyoder das Verfahren IHS schärfen, wird die Ausgabe einige oder alle der folgenden Merkmale aufweisen:

  • Die Farbe des Verbundwerkstoffs hat einen anderen Farbton als der ungeschärfte Verbundwerkstoff
  • Die Helligkeit ist durcheinander
  • Das gesamte Komposit wurde vollständig weiß / vollständig schwarz (bei Verwendung von Bildern, die für Korrekturen des Reflexionsvermögens oder des Oberflächenreflexionsvermögens in der Atmosphäre vorverarbeitet wurden i.landsat.toar).

Ich habe auch alle folgenden versucht ; aber die Farben / Helligkeit blieben gleich oder wurden noch schlechter:

  • Applied i.landsat.rgb, vor-und-nach dem pan-Schärfprozess
  • Spielte mit der Flagge -foder -pini.landsat.rgb
  • Es wurde versucht r.colors, die Farbtabelle in grey / grey255 / grey.eq zu bearbeiten
  • Versucht i.pansharpenmit allen Brovey / IHS / PCA-Methoden
  • Spielte mit der -lFlagge, i.pansharpenum den blauen Kanal wieder ins Gleichgewicht zu bringen

Das GRASS GIS-Handbuch hat zwar erklärt, wie Pan-Sharpening und Color Balancing durchgeführt werden, aber ich kann nicht herausfinden, wie beide Prozesse in einem gleichzeitigen Workflow kombiniert werden können. Ich vermutete, dass dies auf mein schlechtes Verständnis von Farbtabellen, Farbhistogrammen usw. in GRASS zurückzuführen ist.

Kann mir jemand erklären, wie Sie Probleme mit dem Farbausgleich lösen, wenn Sie mit Landsat-Bildern nach der Bildverarbeitung in GRASS arbeiten? Können Sie mir Ihre bevorzugten Arbeitsabläufe / Methoden mitteilen?

Vielen Dank für jedes Feedback!


quelle

Antworten:

6

Überblick

Ein Arbeitsansatz in GRASS-GIS Version 7, um nach dem Pan-Schärfen ein akzeptables zusammengesetztes Farbbild zu erhalten, ist

  1. Überprüfen Sie, ob die Eingabedaten innerhalb von [0, 255] 8-Bit liegen.
  2. Wenn sich die Daten in [0, 255] befinden, fahren Sie mit dem Pan-Sharpening ( i.pansharpen) fort.
  3. Wenn sich die Daten nicht in [0, 255] befinden, skalieren Sie sie erneut in diesen Bereich ( r.rescale)
  4. Pan-Sharpen mit einer der vorgestellten Methoden (Brovey, IHS, PCA)
  5. Farbbalance automatisch mithilfe des i.landsat.rgbModuls oder manuelles Anpassen der Farbtabellen der interessierenden Bänder

Details und Beispielanweisungen

Pan-Sharpening / Fusion

GRASS 7 verfügt über ein spezielles Pan-Sharpening-Modul, i.pansharpendas drei Techniken zum Schärfen enthält, nämlich die Brovey-Transformation , die klassische IHS-Methode und eine auf PCA basierende .

i.pansharpenfunktioniert gut mit 8-Bit-Rasterkarten als Eingabe. Wenn die zu verarbeitenden Daten außerhalb dieses Bereichs liegen, [0, 255]dh außerhalb des Bereichs, können sie mithilfe des GRASS- r.rescaleModuls neu skaliert werden, um in diesen Bereich zu passen .

Bei einem Satz von 11-Bit-Spektralbändern (z. B. Blau, Grün, Rot, NIR und Pan), die zwischen diesen liegen [0, 2047], würde beispielsweise die Abfrage des blauen Bandes zurückkehren

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

Skalieren Sie das blaue Band neu, um zwischen zu liegen [0, 255]

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

Der gleiche Schritt gilt sowohl für die übrigen multispektralen Bänder als auch für das interessierende panchromatische Band.

Wie bei der Arbeit mit GRASS üblich, muss der interessierende Bereich eingestellt werden, dh der Ausdehnung der Band (en) oder sonst. Die Auflösung selbst wird in diesem speziellen Fall vom Modul berücksichtigt, und die resultierenden pan-geschärften Rasterkarten haben dieselbe hohe (er) Auflösung wie das panchromatische Band.g.regionrast=Blue_DNs_255

Ein Beispielbefehl für eine IHS-basierte Pan-Sharpening-Aktion könnte folgendermaßen aussehen

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

Farbausgleich

Nach Abschluss des Prozesses wird das Modul ausgegeben

...
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

Normalerweise sollte es ausreichen, die Farben nach dem Pan-Schärfen neu auszugleichen, indem Sie beispielsweise das Modul i.landsat.rgb oder die manuelle Einstellung jedes der drei Bänder verwenden, aus denen ein RGB-Bild besteht.

Screenshots

... hinzugefügt werden

Nikos Alexandris
quelle
Ich wusste, dass es einen besseren Weg geben muss! Jetzt kann ich das i.sharpen-Modul frei verwenden. Vielen Dank für den Hinweis auf das Modul r.rescale. Tolle Arbeit Nikos!
Haziq, ich bin mir nicht sicher, ob und wie viele der "feinen" Details beim Konvertieren von 11-Bit-Datensätzen in 8-Bit verloren gehen. QuickBird-Bilder sind beispielsweise ein 11-Bit-Sensor. Sie sind sowohl im 8-Bit- als auch im 16-Bit-Format verfügbar. Es ist Sache des Benutzers, zu entscheiden, was zu tun ist. Es wäre sicherlich schön i.pansharpen, mit allen Arten von Formaten umzugehen. Bitte schauen Sie sich ein verwandtes "Ticket" an: Ticket Nr. 2048: i.pansharpen ist auf 8-Bit-Bilder beschränkt . Andererseits verstehe ich Dinge möglicherweise einfach nicht und kann i.pansharpen daher nicht richtig verwenden ...?
Nikos Alexandris
7

Ich habe hoch und niedrig gesucht und ich glaube, ich habe die Wurzel meiner Probleme entdeckt. Ich glaube, ich habe jetzt die Lösung für sie - aber es ist ein bisschen chaotisch. Ich bin sicher, es gibt bessere Möglichkeiten, sie zu lösen. Teilen Sie, wenn Sie einen einfacheren Weg kennen!

WURZELN VON PROBLEMEN:

  1. Die Ausgabe von i.landsat.toar erfolgt in Gleitkomma . Ich habe festgestellt, dass bei Verwendung von Gleitkomma-Rastern bei jeder Pan-Sharpening-Methode die Farben durcheinander geraten. Diese Algorithmen bevorzugten Raster in der ursprünglichen Ganzzahlform.
  2. Pan-Sharpening-Module wie i.pansharpen und i.fusion.brovey Module bringen die Farben durcheinander . Ich habe die Algorithmen, die sie in diesen Modulen verwendet haben, nicht ganz verstanden - aber irgendwie werden die Farbtabellen betroffen sein und die resultierenden pan-geschärften Bilder ruinieren.

LÖSUNG:

  1. Konvertieren Sie die Ausgabe von i.landsat.toar float nach int mit r.recode .
  2. Verwenden Sie die Raster als Eingaben für die IHS-Pan-Sharpening-Methode ( i.rgb.hisund i.his.rgb). Ich halte mich von i.pansharpenund fern i.fusion.brovey.

DER WORKFLOW:

  1. Mit r.info dem -r Flag verwenden, um die DN-Min- und Max-Werte aller Raster-Bänder abzurufen, mit denen verarbeitet wurde i.landsat.toar. Beispielsweise:

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

    Wie wir sehen können, liegen die Werte zwischen 0 und 1, was sich ziemlich von den ursprünglichen Werten unterscheidet (die zwischen 0 und 255 liegen). Dies erklärt, warum die Ausgabe des Pan-Schärfens leer war, da der verwendete Wertebereich sehr niedrig ist (unter 1).

  2. Konvertieren Sie das Rasterband mit r.recode . Verwenden Sie die aus Schritt 1 erhaltenen Min- und Max-Werte, um in einen neuen Bereich von 0 bis 255 zu konvertieren. Ein Beispiel-Code-Snippet:

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

    Wir können die neu konvertierten Werte überprüfen mit r.info:

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

    Die Werte liegen zwischen 0 und 255: Jetzt kann es für den Pan-Sharpening-Prozess verwendet werden.

  3. Wenden Sie die Graustufen-Farbtabelle mit auf das konvertierte Band an r.colors .

    r.colors NEWBAND1 color=grey
    

    Bisher erziele ich die besten Ergebnisse mit der grauen Farbtabelle - die pan-geschärften Verbundwerkstoffe stimmen eng mit den ursprünglichen Verbundwerkstoffen überein. Die anderen Alternativen sind das Ausgleichen der grauen Farbtabelle mit color=grey.eqoder das Verwenden der -eFlagge mit color=grey. Oder wir können das i.landsat.rgbModul anstelle von verwenden r.colors.

  4. Wiederholen Sie Schritt 1-3 mit anderen Rasterbändern, die wir als Verbundwerkstoffe verwenden möchten, einschließlich des Pan-Rasters (Band 8). Die Verwendung von Skripten wäre hier sehr willkommen.

  5. Verwenden Sie dann die verarbeiteten Raster als Eingaben für die IHS-Pan-Sharpening-Methode . Zum Beispiel, wenn der Verbund aus Band 7,4,2 hergestellt wird:

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

    Dadurch werden 3 Ebenen ausgegeben: eine Farbtonschicht HUE, eine Intensitätsschicht INTund auch eine Sättigungsschicht SAT. Wir werden dann die Intensitätsschicht INTdurch das Pan-Raster-Band NEWBAND8in ersetzen i.his.rgb:

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

    Die resultierenden roten Kanäle von COMP742_red , COMP742_green , COMP742_blue können dann mit d.rgboder kombiniert werden r.composite.

BEISPIEL VOR UND NACH:

Vor dem Panschärfen:

Vor

Nach dem Pfannenschärfen:

Nach dem

Vielleicht ist es schwierig, die Unterschiede beim Schärfen zu erkennen , wenn man von so kleinen Bildern aus betrachtet. Wichtig ist jedoch, dass die Farbe des pan-geschärften Bildes mit dem Komposit des Originals übereinstimmt. Mission erfüllt!

WEITERE HINWEISE:

  • Nicht r.recode die Wärmebänder (Band 6) . i.landsat.toarGeben Sie diese Wärmebänder in Kelvin-Temperaturwerten aus (nichts mit DN-Werten zu tun). Halten Sie die r.recodeRoutine auf den normalen Multispektral- und Pan-Bändern (Bänder 1-5,7,8).
  • Wenn wir nicht einmal verwenden i.landsat.toar , aber die resultierenden Verbundwerkstoffe wirklich falsch aussehen , liegt dies normalerweise an der Nichtübereinstimmung der Farbtabellen vor und nach dem Pan-Sharpening-Prozess. Ich habe r.colors RASTER color=greyvor dem Pan-Schärfen auf die ursprünglichen Rasterbänder und nach dem Pan-Schärfen auf die resultierenden Kanäle aufgetragen , um eine enge Farbabstimmung sicherzustellen.
  • Ein normaler Fall des Composite-Problems mit falschen Farben : Die ursprünglichen Rasterbänder sind in color=grey255, die Ausgabe von i.landsat.rgbist in color=grey.eq. Kein Wunder, dass beide unterschiedlich aussehen!
  • Die Verarbeitung von Landsat-Bildern zur Verwendung könnte wirklich eine zeitaufwändige Aktivität sein . Besser etwas zu tun haben, wenn Sie darauf warten, dass alles verarbeitet wird, oder zumindest eine lächerliche Menge Kaffee und gute Musik trinken, während Sie dabei sind;)

Hoffe, das würde jemandem nützen: Ich habe Tage gebraucht, um herauszufinden, was los ist.

Gemeinschaft
quelle
1
Vielen Dank für Ihre Recherchen und Bemühungen, ich hatte dieses Problem auch im neuen GRASS 7 von svn. Jetzt sind die Farben des geschärften Bildes in Ordnung. =)
Vladimir
Oh ja, ich habe vergessen zu erwähnen, welche Version von GRASS ich verwende - danke @VladimirNaumov für die Erinnerung! Ich benutze GRASS 7svn; hätte erkennen müssen, dass dieses Problem möglicherweise nicht in allen Versionen von GRASS
Zurück zu diesem Thema: Sie können Gleitkomma-Rasterkarten in ganzzahlige Rasterkarten konvertieren, indem Sie sie r.mapcalczusammen mit ihrer integrierten int()Funktion verwenden. Ich denke, es r.recodeist nicht dazu gedacht, im Kontext Ihrer Bewerbung verwendet zu werden.
Nikos Alexandris
1
Ich denke, das allgemeine "Problem" i.pansharpenbesteht darin, dass 8-Bit-Rasterkarten als Eingabe erwartet werden, dh die Eingabewerte sollten zwischen 0 und 255 liegen.
Nikos Alexandris
Beachten Sie außerdem, dass i.pansharpendies nur in grass7_trunk der Fall ist. Das ist die Entwicklungsversion ... :-)
Nikos Alexandris