=> Attention, il s'agit du format des données de Niveau 2A Sentinel-2 (et bientôt LANDSAT8) produites par THEIA/MUSCATE. Le format des données produites par l'outil SEN2COR de l'ESA est différent, tout comme le format des données produites par Sen2AGRI.La description officielle du format des données se trouve ici

Niveau 2A : Réflectances de surface et masques de nuages

Le fichier zip distribué par THEIA contient plusieurs répertoires et plusieurs fichiers.

Les fichiers de ce répertoire sont les suivants :
  • les réflectances de surface sont fournies sous la forme d'un fichier GeoTiff par bande, pour les bandes à 10m (B2,B3,B4,B8) et les bandes à 20m (B5, B6, B7, B8A, B11 et B12) de Sentinel-2
  • pour le moment, les fichiers de réflectance de surface sont de deux types :
    • les données se terminant par "FRE_Bx.tif" (FRE pour Flat REflectance) ont, de plus, subi une correction supplémentaire qui prend en compte les effets des pentes
    • A terme, très probablement, seuls les fichiers "FRE" seront fournis, afin de diminuer les volumes à distribuer.
    • Dans les deux cas, les données sont codées sur 16 bits et il faut diviser par 10000 pour obtenir des réflectances de surface.
    • <REFLECTANCE_QUANTIFICATION_VALUE>10000</REFLECTANCE_QUANTIFICATION_VALUE>
    • La valeur No_Data (en dehors de l'image) vaut -10000

Nous fournissons aussi les variables atmosphériques déterminées par MACCS, aux résolutions 10m (ATB_R1.tif) et 20m (ATB_R2.tif).

  • Les fichiers contiennent deux bandes codées sur 8 bits :
    • La bande 1 correspond à la vapeur d'eau, il faut diviser les valeurs par 20 pour obtenir des g/cm2  <WATER_VAPOR_CONTENT_QUANTIFICATION_VALUE>20</WATER_VAPOR_CONTENT_QUANTIFICATION_VALUE>
    • La bande 2 correspond à l'épaisseur optique des aérosols, il faut diviser les valeurs par 200 pour obtenir l'épaisseur optique  <AEROSOL_OPTICAL_THICKNESS_QUANTIFICATION_VALUE>200</AEROSOL_OPTICAL_THICKNESS_QUANTIFICATION_VALUE>

Le répertoire MASK contient les informations suivantes :
  • Un masque de no_data, à résolution 10m (EDG_R1.tif) et 20m (EDG_R2.tif)
  • Un masque de pixels saturés au niveau 1 à résolution 10m (SAT_R1.tif) et 20m (SAT_R2.tif)
    • le premier bit correspond à la bande 1 de la résolution concernée
    • le deuxième bit correspond à la bande 2 de la résolution concernée
    • ...
    • Pour R1, l'ordre des bandes est : B2,B3,B4,B8, et pour R2, l'ordre des bandes est : B5,B6,B7,B8a,B11,B12
  • Un masque de nuages à chaque résolution (CLM_R1.tif ou CLM_R2.tif)
    • bit 0 (1) :Tous nuages (sauf les plus fins), et toutes les ombres
      bit 1 (2) : Tous nuages (sauf les plus fins)
      bit 2 (4) : Nuages détectés par seuil absolu dans le bleu
      bit 3 (8) : Nuages détectés par seuil multi-temporel
      bit 4 (16) : Nuages très fins
      bit 5 (32) : Ombres de nuages correspondant à un nuage
      bit 6 (64) : Ombres de nuages détectées dans la zone où les nuages pourraient être hors image (moins fiable)
      bit 7 (128) : Nuages hauts détectés par la bande 1.38 µm
    • Exemple 1 : la valeur 33 = 32+1 (00100001) indique qu'il s'agit d'une ombre (32), et le bit 1 indique qu'il s'agit soit d'une ombre, soit d'un nuage.
      Exemple 2 : la valeur 43 = 32 + 8 + 2 +1 (00101011)indique qu'il s'agit d'une ombre (32), d'un nuage détecté en multitemporel (8) (l'ombre est probablement sous le nuage) et les bits 0 et 1 sont mis à 1.
  • Un masque géophysique MG2 :
    • bit 0 (1) : Water mask
      bit 1 (2) : Tous nuages (sauf les plus fins)
      bit 2 (4) : Snow Mask
      bit 3 (8) : Shadow Mask ("OU" des bits 5 et 6 du masque de nuages)
      bit 4 (16) : Ombres topographiques
      bit 5 (32) : Zones masquées par le relief
      bit 6 (64) : Soleil trop bas pour une bonne correction des pentes
      bit 7 (128) : Soleil tangent à la surface (mauvaise correction des pentes)
  • IAB : Un masque des pixels pour lesquels la vapeur d'eau (bit1) et l'AOT (bit2) ont été interpolées (à résolution R1 ou R2). Sur la version 3.2 de MAJA? nbous nous sommes aperçus que le bit 2 a été inversé.
Utilisation du masque de nuages :

Si vous souhaitez un masque de nuages strict, testez simplement le fait que le masque de nuages soit supérieur à 0 SI vous souhaitez un masque de nuage un peu moins strict, vérifiez que le bit 0 est égal à 1 (Masque & (00000001) == 1) => This page describes the data format of Sentinel-2   L2A generated by THEIA MUSCATE processing center at CNES.  ESA Sen2Cor format is different.The official description of the data format   is here

Level 2A : Surface reflectances and cloud mask

The ZIP file distributed by Theia contains several files and directories.

The files are as follows :
  • the surface reflectances are provided as a GeoTiff per spectral band, for the 10m bands (B2, B3, B4, B8) and the 20m bands (B5, B6, B7, B8A, B11 et B12) of Sentinel-2.
  • there are two types of surface reflectance files
    • the files which end with "FRE_Bx.tif" (FRE for Flat REflectance) are also corrected for slope effect, which consists in suppressing the apparent reflectances variations. The corrected images look like if the land was flat.
    • After having compiled the user feedback, ity is likely that we will only distribute "FRE" files to reduce the data volume.
    • In any case, the data are coded on 16bits and you have to divide by 10000 to obtain reflectances.
    • <REFLECTANCE_QUANTIFICATION_VALUE>10000</REFLECTANCE_QUANTIFICATION_VALUE>
    • The  No_Data value (outside the image) is -10000

 We also provide the values of the atmospheric variables computed by MACCS/MAJA, with a 10m resolution (ATB_R1.tif) and  20m resolution (ATB_R2.tif).

  • The files contain two bands coded on 8 bits each :
    • Band 1 is water vapour, you have to divide by 20 to obtain g/cm2  <WATER_VAPOR_CONTENT_QUANTIFICATION_VALUE>20</WATER_VAPOR_CONTENT_QUANTIFICATION_VALUE>
    • Band 2 is the Aerosol Optical Thickness, you have to divide by 200 to get the AOT. <AEROSOL_OPTICAL_THICKNESS_QUANTIFICATION_VALUE>200</AEROSOL_OPTICAL_THICKNESS_QUANTIFICATION_VALUE>

   

The mask directory provides :
  • A  no_data mask, at 10m resolution (EDG_R1.tif) and 20m (EDG_R2.tif)
  • A saturated pixel mask that comes from Level 1 with 10m resolution (SAT_R1.tif) and 20m (SAT_R2.tif)
    • first bit corresponds to first band at each resolution
    • second bit corresponds to second band at each resolution
    • ...
    • for R1, the bands appear in this order B2, B3, B4, B8, and for R2 : B5, B6, B7, B8a, B11, B12
  • a cloud mask for each resolution (CLM_R1.tif ou CLM_R2.tif)
    • bit 0 (1) : all clouds except the thinnest and all shadows
      bit 1 (2) : all clouds (except the thinnest)
      bit 2 (4) : clouds detected via mono-temporal thresholds
      bit 3 (8) : clouds detected via multi-temporal thresholds
      bit 4 (16) : thinnest clouds
      bit 5 (32) : cloud shadows cast by a detected cloud
      bit 6 (64) : cloud shadows cast by a cloud outside image
      bit 7 (128) : high clouds detected by 1.38 µm
    • Example 1 : value 33 = 32+1 (00100001) :  bit 1 tells us a shoadow or a cloud has been detected and bit 5 that it is a shadow (32),
    • Example 2 : value 11 =  8 + 2 +1 (00001011) tells us that it is a cloud (bits 1 and 2), detected by multi-temporal threshold (bit 4)
  • A geophysical mask MG2 :
    • bit 0 (1) : Water mask
      bit 1 (2) : All clouds (except the thinnests)
      bit 2 (4) : Snow Mask
      bit 3 (8) : all shadows ("OU" des bits 5 et 6 du masque de nuages)
      bit 4 (16) : Topographic shadows
      bit 5 (32) : Unseen pixels due to topography
      bit 6 (64) : Sun too low for a correct terrain correction
      bit 7 (128) : Sun direction tangent to slope (inaccurate terrain correction)
  • IAB : A mask of pixels for which the WaterVapour (bit 1) and Aerosol Optical Thickness (bit 2) was interpolated  (available at resolutions R1 or R2). However, in MAJA 3.2, there is an inversion of bit 2, which equals zero if interpolated)
How to use the cloud mask

If you want a very strict cloud and shadows mask, just test if cloud mask is greater than 0. This is our advice.If you are working in a region where you think MACCS/MAJA detects too many clouds, check that bit 1 is 1.  (Mask & (00000001) == 1)

7 thoughts on “THEIA's L2A product format

  1. You recommend "If you want a very strict cloud and shadows mask, just test if cloud mask is greater than 0". However if I work with snow data, I will miss all snow pixels. If it is correct I have the following questions:(1) How do you recommend to use "a very strict cloud and shadows mask" not removing snow pixels.(2) Could I browse images without downloading them - preferably in false colors combining three bands?Thank you.

    1. Hi Igor, \nare you a Sentinel-2 user ? Because for Sentinel-2, MAJA is not too bad for telling snow from clouds, so it shoud work.\nMaybe are you a Venµs User ? In that case, without SWIR bands, it is quite hard to tell snow from clouds.\nBut we are working on a snow index based on the NIR bands (10 and 11).\nOlivier

  2. Hi Thomas,This as changed recently, but I forgot to update the description. We have now included everything in the "all clouds" bits.Now I have to find from which product version this was introduced...Best regardsOlivier

  3. Bonjour,
    Sur l'image SENTINEL 2A du 10/02/2016 sur la tuile T30UUU, il y a un chapelet de 3-4 nuages de 4 à 14 km chacun en arc de cercle dans un rayon de 15 km autour de Brest, et un petit (2 km) pile au milieu de Brest (je pourrais vous envoyer l'image...). Or sur le masque CLM_R1 de l'époque, en appliquant le masque strict, les nuages sont masqués mais pas leurs ombres (et le petit nuage n'apparait pas du tout).
    Pensant que c'était peut-être lié à l'état de votre chaîne à l'époque, j'ai utilisé le traitement MAJA à la demande sur peps pour recalculer le masque avec la version en ligne de la chaîne. Le petit nuage "en ville" apparait, et une partie des ombres, mais seulement une partie, du moins par rapport à une image en pseudo-couleurs sommaire que je fais avec les canaux B4 B3 B2 où ces ombres apparaissent très marquées.
    Cela veut-il dire que 1. pour les "vieilles" images de 2016 on a vraiment intérêt à recalculer les masques, 2. les ombres ne sont pas un science aussi exacte que les nuages ? Ou bien est-ce un pb lié aux images de début 2016 ? Ou je ne fais pas comme il faut mon test à la calculette raster de QGIS ("SENTINEL2A_20160210-112214-462_L2A_T30UUU_D_V1-1_CLM_R1@1" > 0) * 255 qui met en blanc les zones pas à 0 ?
    Cordialement,
    AF

    1. Bonjour Alain,

      les données Sentinel-2 disponibles en 2016 lorsque les traitements ont été réalisés avaient des défauts (manque de données auxiliaires de manière aléatoire...) qui faisaient que certains produits ne passaient pas dans MAJA. Il en résultait que la série temporelle devenait moins dense. L'ESA semble avoir fait un retraitement pour ces données, et grâce à des séries temporelles plus denses, les résultats de la méthode multi-temporelle de MAJA s'améliorent. Nous avons aussi fait quelques progrès dans nos algos depuis ce temps là. Il faudrait donc en effet que nous lancions un retraitement, mais c'est quelque chose d'assez lourd, la décision n'a pas encore été prise.

      Quoi qu'il en soit, la détection des ombres reste encore plus difficile que celle des nuages, il nous arrive donc encore d'en manquer.

      Je ne me prononce pas sur la calculette raster de QGIS dont je ne connais pas la syntaxe, mais pour une détection valide/invalide, il faut bien ester si le masque CLM est supérieur à zéro.

      Olivier

  4. Merci !
    Après avoir posé mes questions, j'ai réalisé que je croyais vaguement que vous calculez les ombres comme on calcule un cadran solaire, à partir d'un nuage qui serait une plaque blanche flottant à une altitude connue, tel jour telle heure à telle latitude ... Ma question sur ce point était donc ridicule, mais vos réponses n'en sont pas moins utiles.
    Cordialement,
    AF

Laisser un commentaire

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