Comment équilibrer les couleurs des faux composites d'images Landsat à netteté panoramique dans GRASS?


9

Chaque fois que j'essaie de composites de quelques images Landsat pan affûter à l' aide GRASS i.pansharpen, i.fusion.broveyou la méthode d' affûtage IHS, la sortie aura une partie ou toutes les caractéristiques suivantes:

  • la couleur du composite est d'une teinte différente de celle du composite non affilé
  • le niveau de luminosité est foiré
  • l'ensemble du composite est devenu tout blanc / tout noir (lors de l'utilisation d'images prétraitées à des corrections de réflectance du haut de l'atmosphère ou de réflectance de surface dans i.landsat.toar)

J'ai également essayé toutes les solutions suivantes; mais les couleurs / luminosité sont restées les mêmes ou ont empiré:

  • Appliqué i.landsat.rgb, avant et après le processus d'affûtage panoramique
  • Joué avec le drapeau -fou -pdansi.landsat.rgb
  • J'ai essayé r.colorsde modifier la table des couleurs en gris / gris255 / gris.eq
  • Essayé en i.pansharpenutilisant toutes les méthodes Brovey / IHS / PCA
  • Joué avec le -ldrapeau i.pansharpenpour rééquilibrer le canal bleu

Le manuel GRASS GIS a expliqué comment effectuer une netteté panoramique et un équilibrage des couleurs, mais je ne peux pas comprendre comment combiner les deux processus dans un flux de travail simultané. Je soupçonne que cela est dû à ma mauvaise compréhension des tables de couleurs, de l'histogramme des couleurs, etc. dans GRASS ..

Alors, quelqu'un peut-il m'expliquer - comment pouvez-vous résoudre les problèmes d'équilibrage des couleurs lorsque vous traitez des images Landsat après le traitement d'images dans GRASS? Pouvez-vous partager avec moi votre flux de travail / méthodes préférés?

Merci beaucoup pour tout commentaire!

Réponses:


6

Aperçu

Une approche de travail dans GRASS-GIS version 7 pour obtenir une image composite équilibrée des couleurs acceptable après

  1. vérifier si les données d'entrée ont une plage de 8 bits à l'intérieur [0, 255]
  2. si les données sont à l'intérieur [0, 255], passez à la netteté panoramique ( i.pansharpen)
  3. si les données ne sont pas à l'intérieur de [0, 255], redimensionnez-les dans cette plage ( r.rescale)
  4. affiner avec l'une des méthodes décrites (Brovey, IHS, PCA)
  5. équilibre des couleurs automatiquement en utilisant le i.landsat.rgbmodule ou en ajustant manuellement les tables de couleurs des bandes d'intérêt

Détails et exemples d'instructions

Pan-Sharpening / Fusion

GRASS 7 possède un module d'affûtage dédié, i.pansharpenqui propose trois techniques d'affûtage, à savoir la transformation de Brovey , la méthode IHS classique et une qui est basée sur PCA .

i.pansharpenfonctionne très bien avec des cartes raster 8 bits en entrée. Si les données à traiter sont hors de cette plage, c'est-à-dire hors [0, 255], elles peuvent être redimensionnées pour s'inscrire dans cette plage en utilisant le r.rescalemodule GRASS .

Étant donné un ensemble de bandes spectrales de 11 bits (par exemple bleu, vert, rouge, NIR et Pan) compris entre [0, 2047], l'interrogation de la bande bleue par exemple retournerait

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

Redimensionnement de la bande bleue pour varier entre [0, 255]

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

La même étape s'applique à la fois au reste des bandes multispectrales et à la bande panchromatique d'intérêt.

Comme d'habitude lorsque vous travaillez avec GRASS, il est nécessaire de définir la région d'intérêt, c'est- à- dire de faire correspondre l'étendue de la ou des bandes ou autre. La résolution elle-même est prise en charge dans ce cas particulier par le module et les cartes raster pan-sharpened résultantes seront de la même résolution haute (er) que la bande panchromatique.g.regionrast=Blue_DNs_255

Un exemple de commande pour une action Pan-Sharpening basée sur IHS pourrait ressembler à

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

Équilibrage des couleurs

Une fois le processus terminé, le module sort

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

Normalement, il devrait suffire de rééquilibrer les couleurs après la netteté panoramique en utilisant par exemple le module i.landsat.rgb ou le réglage manuel de chacune des trois bandes qui composent une image RVB.

Captures d'écran

... à ajouter


Je savais qu'il devait y avoir une meilleure façon! Maintenant, je peux utiliser librement le module i.sharpen. Merci d'avoir signalé le module r.rescale. Super travail Nikos!

Haziq, je ne sais pas si et combien de détails "fins" sont perdus lors de la conversion des ensembles de données 11 bits en 8 bits. L'imagerie QuickBird, par exemple, est un capteur 11 bits. Ils sont disponibles aux formats 8 bits et 16 bits. C'est à l'utilisateur de décider quoi faire. Ce serait certainement bien pour i.pansharpengérer toutes sortes de formats. Veuillez consulter un "ticket" associé: Ticket # 2048: i.pansharpen limité à l'imagerie 8 bits . D'un autre côté, je pourrais tout simplement ne pas comprendre les choses et, par conséquent, ne pas pouvoir utiliser i.pansharpen correctement ...?
Nikos Alexandris

7

J'ai cherché haut et bas et je pense avoir découvert la racine de mes problèmes. Je pense avoir trouvé la solution pour eux maintenant - mais c'est un peu compliqué. Je suis sûr qu'il existe de meilleures façons de les résoudre. Partagez si vous connaissez un moyen plus simple!

RACINES DE PROBLÈMES:

  1. La sortie de i.landsat.toar est en virgule flottante . J'ai réalisé que lorsque j'utilise des rasters à virgule flottante dans n'importe quelle méthode de netteté panoramique, les couleurs se gâchent. Ces algorithmes préféraient en quelque sorte les rasters sous la forme entière d'origine.
  2. Les modules de netteté panoramique tels que i.pansharpen et les i.fusion.brovey modules gâcheront les couleurs . Je ne saisis pas très bien les algorithmes qu'ils ont utilisés dans ces modules - mais d'une manière ou d'une autre, les tables de couleurs seront affectées et ruineront les images pan-nettoyées résultantes.

SOLUTION:

  1. Convertissez la sortie de i.landsat.toar float en int, en utilisant r.recode .
  2. Utilisez les rasters comme entrées dans la méthode de netteté panoramique IHS ( i.rgb.hiset i.his.rgb). Je m'abstiens d'utiliser i.pansharpenet i.fusion.brovey.

LE FLUX DE TRAVAIL:

  1. À utiliser r.info avec l' -r indicateur pour obtenir les valeurs DN min et max de chaque bande raster qui ont été traitées avec i.landsat.toar. Par exemple:

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

    Comme nous pouvons le voir, les valeurs sont comprises entre 0-1, qui sont assez différentes de celles d'origine (qui sont comprises entre 0-255). Cela explique pourquoi la sortie de la netteté panoramique s'est avérée vierge, car la plage de valeurs utilisée est très faible (inférieure à 1).

  2. Convertissez cette bande raster à l'aide de r.recode . Utilisez les valeurs min et max obtenues à l'étape 1 pour convertir en une nouvelle plage de 0 à 255. Un exemple d'extrait de code:

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

    Nous pouvons vérifier les nouvelles valeurs converties avec r.info:

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

    Les valeurs sont comprises entre 0 et 255: elles sont désormais utilisables pour le processus d'affûtage panoramique.

  3. Appliquez une table de couleurs d'échelle de gris à la bande convertie avec r.colors .

    r.colors NEWBAND1 color=grey
    

    Jusqu'à présent, j'obtiens les meilleurs résultats en utilisant la table des couleurs grises - les composites à netteté panoramique correspondaient étroitement aux composites originaux. Les autres alternatives sont d'égaliser la table des couleurs grises avec color=grey.eqou d'utiliser le -edrapeau avec color=grey. Ou nous pouvons utiliser le i.landsat.rgbmodule au lieu de r.colors..

  4. Répétez les étapes 1 à 3 avec d'autres bandes raster que nous avons l'intention d'utiliser comme composites, y compris le raster panoramique (bande 8). L'utilisation de scripts serait très appréciée ici.

  5. Utilisez ensuite les rasters traités comme entrées dans la méthode d'affinage panoramique IHS . Par exemple, lors de la réalisation du composite de la bande 7,4,2:

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

    Cela produira 3 couches: une couche de teinte HUE, une couche d'intensité INTet également une couche de saturation SAT. Nous remplacerons ensuite la couche d'intensité INTpar la bande de raster pan NEWBAND8dans i.his.rgb:

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

    Les canaux rouges résultants de COMP742_red , COMP742_green , COMP742_blue peuvent ensuite être combinés à l'aide de d.rgbou r.composite..

ÉCHANTILLON AVANT ET APRÈS:

Avant affûtage panoramique:

Avant

Après affûtage:

Après

Il est peut-être difficile de distinguer les différences de netteté lors de la visualisation à partir de si petites images. Mais ce qui est important, c'est que la couleur de l'image à netteté panoramique correspondait au composite de l'original. Mission accomplie!

AUTRES NOTES:

  • Ne faites pas r.recode les bandes thermiques (bande 6) . i.landsat.toarproduire ces bandes thermiques en valeurs de température Kelvin (rien à voir avec les valeurs DN). Gardez la r.recoderoutine sur les bandes multispectrales et panoramiques normales (bandes 1-5,7,8).
  • Si nous ne l'utilisons jamais i.landsat.toar , mais que les composites résultants semblent vraiment faux , c'est généralement à cause de l'inadéquation des tables de couleurs avant et après le processus d'affûtage panoramique. J'ai appliqué r.colors RASTER color=greyaux bandes de trame d'origine avant la netteté panoramique et aux canaux résultants après la netteté panoramique pour assurer une correspondance parfaite des couleurs.
  • Un cas habituel du problème des composites de mauvaise couleur : les bandes de trame d'origine sont in color=grey255, la sortie de i.landsat.rgbest in color=grey.eq. Pas étonnant qu'ils soient tous les deux différents!
  • Le traitement d'images Landsat pour une utilisation pourrait vraiment être une activité fastidieuse . Mieux vaut avoir quelque chose à faire en attendant que tout se déroule, ou au moins avoir une quantité ridicule de café et de la bonne musique pendant que vous y êtes;)

J'espère que cela profitera à quelqu'un: il m'a fallu des jours pour trouver ce qui ne va pas ..


1
Merci pour vos recherches et vos efforts, j'ai également rencontré ce problème dans le nouveau GRASS 7 de svn. Maintenant, les couleurs de l'image aiguisée sont OK. =)
Vladimir

Oh oui, j'ai oublié de mentionner la version de GRASS que j'utilise - merci @VladimirNaumov de l'avoir rappelé! J'utilise GRASS 7svn; aurait dû se rendre compte que ce problème pourrait être quelque chose qui ne se produit pas dans toutes les versions de GRASS (je n'ai pas essayé d'autres versions) ..

Revenons à ceci: vous pouvez convertir des cartes raster à virgule flottante en cartes raster entières à l'aide r.mapcalcde sa int()fonction intégrée . Je pense que r.recoden'est pas destiné à être utilisé dans le contexte de votre demande.
Nikos Alexandris

1
Je pense que le "problème" global i.pansharpenest qu'il attend des cartes raster 8 bits en entrée, c'est-à-dire que les valeurs d'entrée doivent être comprises entre 0 et 255.
Nikos Alexandris

Notez également que i.pansharpenc'est dans grass7_trunk uniquement. C'est la version de développement ... :-)
Nikos Alexandris
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.