La fonction Fmask et la fonction unpack_oli_qa de l’outil de L-LDOPE Toolbelt

Cours images Landsat et nuages , tutoriel & guide de travaux pratiques en pdf.

Tests

Méthode

La fonction Fmask et la fonction unpack_oli_qa de l’outil de L-LDOPE Toolbelt ont été testées en terme de vitesse et de précision et comparées sur une série de 12 scènes aux couvertures nuageuses variables. Pour le téléchargement, les services cloud d’Amazon et de Google ont été utilisés de manière automatique grâce au script LiMES_batcher_v003.py (voir Annexe B). La taille des fichiers et le temps de téléchargement et d’exécution des deux méthodes ont été pris en compte. Deux paramétrages différents ont été testés pour la fonction Fmask (seuil de probabilité de nuage à 22.5% et à 50%, voir section 3.3) et l’intervalle de confiance medium a été choisi pour la fonction unpack_oli_qa. Les output ont été traités dans GRASS (raster calculator) afin de pouvoir normaliser le masquage et comparer les deux méthodes (clear = 0, cloud = 1, cloud shadow = 2). Dans R, la fonction freq du package ‘raster’ a été utilisée pour calculer la fréquence de chaque valeur. Le script bash ayant permis d’automatiser en partie les différents processus liés au test se trouve dans l’Annexe C.1.

Résultats

Les résultats bruts se trouvent sous forme de tableaux, dans l’Annexe C.2.

Téléchargement

Trois scènes sur 12 n’ont pas pu être téléchargées sur Amazon (dates antérieures à mai 2014). De part leur compression LZW, la taille des scènes téléchargées sur Amazon a été environ 2 fois plus petite que celle des scènes téléchargées sur Google et le taux de transfert environ a été 2 fois plus rapide sur Amazon. Le temps de téléchargement a été donc environ 4 fois plus rapide sur Amazon que sur Google. Cependant, la fonction unpack_oli_qa n’a pas fonctionné avec les images compressées téléchargées sur Amazon.

unpack_oli_qa

Cette fonction de L-LDOPE Toolbelt est utilisée afin d’extraire des données codifiées dans la bande d’évaluation de qualité de Landsat 8 (Quality Assessment). En principe, elle permet de différencier les cirrus des autres nuages ainsi que l’ombre des nuages. Lors du test, l’ombre n’a été détectée dans aucun cas. Il est possible d’extraire les données souhaitées sur un seul raster (combinaison) ou séparément. Le temps d’exécution a été très rapide (3 secondes).

Fmask

Cette fonction différencie les nuages et les ombres de nuages (en plus des pixels clairs, de l’eau et de la neige). Il est possible de définir un seuil de détection et la dilatation des pixels de nuages ou de l’ombrage. Le temps de calcul a été relativement élevé et très variable (selon la scène) (médiane 159 sec. ; min. 107 sec. ; max. 1091 sec. ; sd 267 sec.) 2. Des erreurs se sont produites relativement souvent avec des scènes téléchargées sur Amazon (5/12) et parfois avec des scènes téléchargées sur Google (2/12, puis en re-téléchargeant les scènes problématiques 1/12). Ces erreurs ont été dues à un problème lié aux bandes TIRS (voir section 3.2).

Comparaison

En terme de temps moyen, télécharger les images sur Google puis utiliser la fonction unpack_oli_qa a représenté la solution la plus rapide (158 secondes en moyenne).
En terme de précision, les résultats ont semblé dépendre du paramétrage et de la scène. Le paramétrage par défaut de Fmask (dilated pixels = 3, threshold probability = 22.5) a donné des couvertures nuageuses (sans prendre en compte l’ombrage) beaucoup plus importantes que celles obtenues par la fonction unpack_oli_qa par défaut (+ 35% en moyenne) avec des variations très importantes aussi (déviation standard = 43%). En diminuant la dilatation des pixels à 2 et en augmentant le seuil de probabilité à 50%, les résultats de Fmask se sont rapprochés de ceux de la fonction unpack_oli_qa (- 0.1% en moyenne), mais la déviation standard est restée élevée (35%).
La Figure 1 représente un exemple où les différences entre les output des deux fonctions ont été relativement importantes même lorsque l’on a diminué la dilatation des pixels à 2 et augmenté le seuil de probabilité à 50% de la fonction Fmask (unpack_oli_qa 10.6% vs 22.4% Fmask).
La Figure 2 représente un exemple où les différences entre les output des deux fonctions ont été moyennes lorsque l’on a diminué la dilatation des pixels à 2 et augmenté le seuil de probabilité à 50% de la fonction Fmask (unpack_oli_qa 26.6% vs 38.9% Fmask).
Finalement, la Figure 3 représente un exemple où les différences entre les output des deux fonctions ont été faibles lorsque l’on a diminué la dilatation des pixels à 2 et augmenté le seuil de probabilité à 50% de la fonction Fmask (unpack_oli_qa 61.4% vs 63.4% Fmask).
Cependant cette faible différence en terme de pourcentage ne signifie pas autant que les output aient été similaires. En effet, il est à noter que la fonction Fmask paramétrée de la manière décrite ci-dessus a sous-estimé la présence nuageuse par rapport à ce qui est observé sur la composite RGB (Figure 3d).
Lorsque la fonction Fmask a été paramétrée avec 0 de dilatation et un seuil de 50% en utilisant la scène LC81960282015249LGN00 (geneva), le résultat s’est rapproché de celui obtenu avec la fonction de unpack_oli_qa (moins grossier) tout en tenant compte de l’ombre des nuages (Figure 4).
(a) unpack_oli_qa (medium) (b) Fmask (seuil = 50%, dilatation = 0)
Figure 4 – Détection de nuages. Masques similaires. Scène LC81960282015249LGN00, Ge-neva, 06.09.2015.

Conclusion

Bien que la fonction unpack_oli_qa soit la solution la plus rapide, elle comporte l’in-convénient de ne pas détecter l’ombre des nuages, lesquelles représentent en moyenne entre 15 et 20% de la couverture totale détectée par la fonction Fmask, selon le paramétrage ef-fectué. Aussi, la dilatation des pixels réalisée par la fonction Fmask assure un masque plus conservateur. Pour ces raisons, il a été décidé de poursuivre les analyses avec cette dernière plutôt qu’avec la fonction unpack_oli_qa. Ceci étant dit, une version C de Fmask sera pro- chainement utilisée comme nouvel algorithme pour l’identification des nuages de la bande QA 3 3 Fmask

Conservation des fichiers de réflectances

Dans le cas où l’on a accès au code original Matlab, il peut être intéressant de conserver les rasters de réflectances calculées par la fonction Fmask et supprimées par défaut pour de possibles analyses ultérieures. Les bandes 1 (aérosols côtiers) et 8 (panchromatique) ne sont pas prises en compte dans la fonction Fmask et ne peuvent donc pas récupérées, à moins d’ajouter des lignes de code associées au calcul de réflectances pour ces bandes en vérifiant que cela n’ait pas d’incidence sur le reste de la fonction. Dans le cas où il est décidé de ne pas utiliser les bandes 1 et 8, il est possible d’exécuter la fonction Fmask sans télécharger ces dernières (uniquement possible via le cloud Amazon) et ainsi gagner du temps.
La fonction Fmask est originalement composée de 8 scripts Matlab. Le calcul des réflec-tances est codé dans le script nd2toarbt.m mais l’exportation des fichiers ENVI se codifie à la fin du script plcloud.m où toutes les variables nécessaires à l’exportation (dimension, résolution, etc.) sont définies (une partie de celles-ci sont extraites du fichier de métadonnées L*MTL.txt grâce au script lndhdrread.m). Il est à noter que la numérotation des différentes bandes exportées est décalée par rapport à la numérotation originale (1=B2 ; 2=B3 ; 3=B4 ; 4=B5 ; 5=B6 ; 6=B7 ; 7=B9).
Le fait que les images originales proviennent d’Amazon (compression LZW) ou de Google (non-compressées) n’affecte pas la taille du fichier ENVI de réflectances (composé de plusieurs bandes) exporté depuis Fmask (environ 800 MB).
Les réflectances calculées dans Fmask sont égales à celles calculées dans GRASS, chaque valeur étant simplement multipliée par 1’000 pour des raisons de codage. Des nuages de point bivarié mettant en relation les réflectances calculées dans GRASS et avec Fmask ont permis de confirmer cela (Figures 5 et 6). Les lignes de point horizontales (y=-9999) tient du fait que la fonction Fmask découpe légèrement l’image et que la valeur de -9’999 est assignée aux pixels situés en dehors de la zone de traitement. Le script R ayant permis de comparer les différents rasters de réflectances se trouve dans l’Annexe D.1.
Figure 5 – Comparaison entre les réflectances calculées dans GRASS et avec la fonction Fmask. Scène utilisée : LC82000342015021LGN00 (sample = 500’000 pixels ; 0.8% des pixels)

Problèmes liés aux bandes TIRS

En utilisant la fonction Fmask sur certaines scènes (le plus souvent téléchargées sur Ama-zon), une erreur peut se produire avec le message suivant :
Error using imfill
Expected input number 1, I1 or BW1, to be non-NaN.
Ceci semble avoir lieu lorsque les bandes thermales (10 et 11) sont vides. Une anomalie au niveau des Thermal Infrared Sensor (TIRS) découverte en décembre 2014 est la cause de ce problème et depuis un traitement supplémentaire des données enregistrées est nécessaire. Lorsque les bandes TIRS téléchargées n’ont pas été recalculées et qu’elles sont vides, une fonction alternative initialement implémentée pour les images Sentinel 2 peut être utilisée. Afin d’estimer l’importance de ces bandes thermales dans le calcul de masques, l’une et l’autre fonction on été exécutées sur 6 scènes ayant toutes des données TIRS valides. Le script associé à ce test figure dans l’Annexe D.2.
Sur les 6 scènes, la fonction Fmask qui ne tient pas compte des bandes TIRS (FmaskS) a sous-estimé le masquage total (nuage + ombres) par rapport à la fonction qui en tient compte (FmaskT) dans 2/3 des cas. Dans le 1/3 restant, elle l’a très légèrement surestimé. La différence maximum a été observée sur la scène LC82000342015021LGN00 (Almeria), avec une différence de 21.24 points de pourcentage (FmaskT 56.59% vs 35.35% FmaskS) par rapport au masquage total (nuage + ombre). Cependant, dans 75% des cas, la différence n’a pas dépassé 10 points.
La Figure 7 reflète la scène LC82000342015021LGN00 (Almeria), là où la différence a été maximum. Le masquage de la neige située au bas de la scène a été plus important lorsque l’on a tenu compte des bandes TIRS, bien que celle-ci ait été considérée comme nuage dans cet exemple (Fmask différencie en principe la neige). Pour le reste, il semblerait que FmaskT ait permis d’obtenir de meilleures résultats (et surtout plus conservateurs).
En revanche, la scène LC81960282015249LGN00 (Geneva) a présenté des résultats très similaires avec les deux fonctions en terme de masquage (FmaskT 49.4% vs 46.25% FmaskS) (Figure 8). On observe néanmoins que le masquage supplémentaire de FmaskT réparti de manière assez homogène sur l’image est compensé par une zone située en bas à gauche de l’image, masquée par FmaskS et non pas par FmaskT. Il semblerait, selon l’impression visuelle obtenue avec la composite, que FmaskT a masqué cette zone avec plus de précision. Néan-moins, on observe à nouveau de la neige classifiée comme nuage (en bas à droite de l’image). Le masque obtenu avec FmaskT y est plus important et l’ombre calculée en conséquence aussi.
La différence obtenue avec la scène LC81680612014098LGN00 (Nairobi) a été de 7.03 points de pourcentage. Les variations observées en bas à gauche de l’image (Figure 9) sont difficiles à évaluer. FmaskS a projeté des ombres de manière plus importante que FmaskT. En revanche le masquage réalisé par FmaskT semble clairement plus juste en ce qui concerne la zone en bas au milieu. Des cirrus sont effet présents et ont été correctement masqués lorsque les bandes TIRS ont été prises en compte (Figure 10).
En se basant sur les quelques exemples mentionnés ci-dessus, il semblerait que la fonction Fmask qui tient compte des bandes TIRS est généralement plus précise. Cependant, les dif-férences ne sont pas excessives et la fonction FmaskS donne des résultats plutôt satisfaisants. Elle pourrait donc être utilisée avec une certaine prudence lorsque les bandes TIRS ne sont pas disponibles.

Cours gratuitTélécharger le cours complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *