Lab'OT

Laboratoire Observation de la Terre

Rastertools

Rastertools fournit des fonctions simples de traitement d'images satellitaires codées en python et s'appuyant sur les librairies rasterio et geopandas.

Cette collection d'outils provient de la capitalisation des travaux régulièrement effectués par le Lab'OT du CNES et vise à faire gagner du temps à ses utilisateurs : éviter d'appeler des fonctions de pré-traitement pour extraire les bandes d'une archive, concaténer les bandes d'intérêt pour le traitement, extraire une région d'intérêt.

Rastertools supporte en standard les produits suivants :
  • Sentinel-2 L1C PEPS ( disponible ici )
  • Sentinel-2 L2A PEPS ( disponible ici )
  • Sentinel-2 L2A THEIA ( disponible ici )
  • Sentinel-2 L3A THEIA ( disponible ici )
  • SPOT 6/7 Ortho GEOSUD ( disponible ici )
Rastertools peut aussi être étendus de manière très simple pour supporter d’autres types de produits. Il suffit de lui fournir une description au format Json des caractéristiques du produit (quelles sont les bandes, les masques, comment les identifier dans le produit, etc.)
Rastertools comprend les outils suivants:

Calcul d'indices radiométriques

Plusieurs indices sont disponibles en standard : les plus répandus : ndvi, ndwi, ndbi, etc. Il est également possible d'ajouter sa propre définition d'indices via l'API python de rastertools

Calcul de la dérivée temporelle de la radiométrie de séries d'images

Pour un couple d'images du même type, cet outil extrait la date des images et génère une nouvelle image représentant la dérivée temporelle de la radiométrie des deux images

Création d'une série temporelle d'images à intervalle de temps régulier et sans trou

C'est à dire que les trous liés aux nuages sont "rebouchés".
Cet outil prend en entrée une série temporelle d'images:

  • par exemple des images Sentinel2 L2A MAJA sur une tuile donnée
  • génère la série temporelle complète tous les x jours
  • typiquement x = 10.

Pour ce faire, l'outil interpole les données entre les dates auxquelles on dispose d'observation.

Tuilage d'une image

Cet outil découpe une image en suivant les géométries définies dans un fichier vecteur (e.g. GeoJSON, shp, ...).
En sortie on obtient autant d'images que de géométries, chaque image contient les pixels incluent dans la géométrie.

Calcul de statistiques zonales

L'outil consiste en un calcul des statistiques sur la radiométrie du raster sur différentes zones telles que fournies par un fichier vecteur, par exemple un fichier GeoJSON.
Les statistiques que l'on peut calculer sont : min, max, range (=max-min), mean, std, percentile_x (x compris entre 0 et 100), median, mad (median absolute deviation), count, valid, nodata, sum, majority, minority, unique.

 Carte représentant une classification rasters
Il est également possible de calculer des statistiques pour des rasters qui représentent une classification (ou d'une manière générale des catégories). Dans ce cas, il s'agit de dénombrer les pixels de chaque catégorie.
Enfin, on peut mélanger un découpage géométrique et une classification pour calculer les statistiques d'un raster sur chaque zone en distinguant chaque classe de la zone.
Par exemple, imaginons que l'on dispose d'un raster représentant un modèle numérique de surface.
On peut calculer la hauteur moyenne des différentes classes OSO pour chaque commune couverte par le raster.
Raster représentant un modèle numérique de surface

Application de filtres sur une image

Rastertools permet d'appliquer 4 filtres sur une image :
median, sum, mean et adaptive gaussian.
Ces filtres sont calculés sur des kernels de taille configurable.
Par exemple, on peut ainsi calculer sur une image la moyenne locale avec un kernel de 9 pixels de large et hauteur. On obtient ainsi une nouvelle image dont chaque pixel représente cette valeur de moyenne locale.

Sky View Factor

L'outil SVF (sky view factor) prend en entrée une image représentant un modèle numérique (MNS, MNT, MNE) et calcule la portion de ciel visible en chaque point soit en se plaçant à l'altitude du point (résultat à gauche), soit en se plaçant au sol (résultat à droite).
Image résultat de l'outil SVF
Image résultat de l'outil SVF

Hillshade

L'outil hillshade prend en entrée une image représentant un modèle numérique (MNS, MNT ou MNE), la position du soleil et calcule l'ombre portée par les différents points de l'image sur les points adjacents d'altitude plus basse.
Exemple : ombres calculées à 3 horaires différents (8:00, 12:00 et 18:00) le 21 Juin, correspondant donc à 3 positions du soleil :
Exemple d'une image avec l'outil hillshade
Exemple d'une image avec l'outil hillshade
Exemple d'une image avec l'outil hillshade
L'API python de rastertools se décompose en deux niveaux:
L'API de haut niveau permet d'activer chacun des outils et d'étendre leurs fonctionnalités (par exemple, ajouter la définition d'un nouvel indice radiométrique à calculer).

Module code rastertools

from eolab.rastertools import Radioindice
proc = Radioindice(Radioindice.ndvi)
outputs = proc.with_output(".", merge=False)
              .with_roi("./roi.geojson")
              .process_file("./SENTINEL2B_20181023-105107-455_L2A_T30TYP_D.zip")
print(outputs)
L'API de bas niveau est utile pour accéder à des produits images de manière assez transparente pour l'utilisateur. En effet, nul besoin d'extraire une archive, assembler les bandes, extraire la zone d'intérêt. Tout cela se fait avec des commandes simples en utilisant les capacités gdal suivantes :
le format virtuel gdal VRT, et les virtual file systems GDAL (vsimem, vsizip et vsitar).

Module code rastertools 2

from eolab.rastertools.product import RasterProduct
import rasterio

with RasterProduct("./SENTINEL2B_20181023-105107-455_L2A_T30TYP_D.zip") as rp:
    with rasterio.Env(GDAL_VRT_ENABLE_PYTHON=True):
        with rp.open(roi="COMMUNE_32001.shp") as dataset:
            data = dataset.read([1, 2, 3], masked=True)
            

Envie de travailler avec nous ?

Envie de travailler avec nous ?