Calcul du NDVI: partie 1

Cet exercice fait suite à la section précédente. Dans le exercice final de la session précédente, vous avez construit un cahier pour créer une composite géomédienne.

Dans cette section, nous allons créer un nouveau bloc-notes basé sur le bloc-notes de la section précédente. La plupart du code restera inchangé, mais nous changerons la zone d’intérêt et la durée. Nous ajouterons également des étapes pour rééchantillonner le nouvel ensemble de données et créer un géomédian. Dans la section suivante, nous calculerons et tracerons le NDVI.

Note

Nous allons utiliser le notebook que nous avons créé dans la section précédente, Créer un composite géomédien. Si vous n’avez pas encore configuré une copie du notebook appelé Geomedian_composite.ipynb avec les paquets et fonctions nécessaires, suivez les instructions de la section précédente. Assurez-vous d’avoir terminé toutes les étapes, y compris le chargement de l’ensemble de données Sentinel-2.

Configurer le notebook

Créer une copie du cahier

Avant de passer à l’étape suivante,

  1. Connectez-vous à l’Environnement de test et ouvrez le dossier Training.

  2. Faites une copie du carnet de notes Geomedian_composite.ipynb.

  3. Renommez le bloc-notes en Calculate_ndvi.ipynb.

Voir créer une copie d’un carnet de notes et le renommer pour plus de détails.

Effacer le cahier

Nous devrons supprimer toute sortie des exécutions précédentes du notebook.

  1. Sélectionnez Kernel -> Restart Kernel and Clear All Outputs….

  2. Lorsque vous y êtes invité, sélectionnez Restart.

Lancer le notebook

Ce cahier est encore configuré pour exécuter l’exercice de la Session 3, vous devrez donc suivre les instructions ci-dessous pour le modifier. Travaillez cellule par cellule et faites attention à ce qui doit être modifié.

Mise en place

  1. Exécutez la première cellule, qui contient les packages et les fonctions pour l’analyse. Pas besoin de changer quoi que ce soit ici.

  2. Pour la commande dc = datacube.Datacube, changez le nom de l’application en "Calculate_ndvi"". Cela devrait ressembler à cela :

    dc = datacube.Datacube(app="Calculate_ndvi")
    

Chargez les données

  1. Remplacez les valeurs x et y par celles indiquées ci-dessous et exécutez la cellule.

    x=(-6.1495, -6.1380)
    y=(13.9182, 13.9111)
    
  2. Changez l’heure dans la fonction load_ard en ("2019-01", "2019-12").

  3. Supprimez l’option min_gooddata=0.7.

    Si vous avez terminé les étapes 2, 3 et 4, votre cellule de pesée devrait ressembler à

    sentinel_2_ds = load_ard(
        dc=dc,
        products=["s2_l2a"],
        x=x, y=y,
        time=("2019-01", "2019-12"),
        output_crs="EPSG:6933",
        measurements=['red', 'green', 'blue'],
        resolution=(-10, 10),
        group_by='solar_day')
    
  4. Exécutez la cellule. La charge doit renvoyer 71 pas de temps.

Tracer les pas temporels

La cinquième cellule du carnet de notes contient une commande rgb pour tracer les données chargées. Pour correspondre à notre exemple ci-dessous, modifiez cette cellule afin qu’elle corresponde au code ci-dessous :

timesteps = [1, 6, 8]

rgb(sentinel_2_ds, bands=['red', 'green', 'blue'], index=timesteps)

Cela tracera les images pour le 1er, le 6e et le 8e pas de temps des données chargées (rappelez-vous que Python commence à compter à 0). Votre image doit correspondre à celle ci-dessous.

L'image du tutoriel Jupyterlab de DE Africa Sandbox.

Note

Vous pouvez également exécuter cette cellule plusieurs fois, en expérimentant avec différentes valeurs pour le paramètre timesteps. La commande load devrait avoir retourné 71 pas de temps, ce qui signifie que les valeurs dans votre liste timesteps peuvent être n’importe où entre 0 et 70.

Rééchantillonner l’ensemble de données

Le rééchantillonnage est utilisé pour créer un nouvel ensemble d’heures à intervalles réguliers. En utilisant la méthode de rééchantillonnage, les données peuvent être organisées en jours, mois, trimestriellement (trois mois) ou annuel.

Vous trouverez ci-dessous des exemples de la manière dont les données sont regroupées.

  • 'nD' - nombre de jours (par exemple, '7D' pour sept jours)

  • 'nM' - nombre de mois (par exemple, '6M' pour six mois)

  • 'nY' - nombre d’années (par exemple, '2Y' pour deux ans)

Suivez les étapes ci-dessous pour rééchantillonner les pas de temps de l’ensemble de données sur trimestriel.

  1. Supprimez le code pour tracer toutes les images RVB:

    rgb(sentinel_2_ds, bands=['red', 'green', 'blue'],
    col='time', size=4)
    
  2. Dans la cellule effacée, écrivez le code suivant pour rééchantillonner les données et les stocker dans la variable resample_sentinel_2_ds :

resample_sentinel_2_ds = sentinel_2_ds.resample(time='3MS')

resample_sentinel_2_ds décrit comment regrouper les données en segments trimestriels. Nous pouvons maintenant l’utiliser pour calculer le géomédian pour chaque segment trimestriel.

Note

Le S à la fin de ``”3MS”``permet de regrouper les données par début de mois.

Calculer le géomédian

Pour cette session, au lieu d’appeler xr_geomedian(sentinel_2_ds) sur le tableau entier comme nous l’avons fait dans l’exercice précédent, nous passons la fonction xr_geomedian à map et l’appliquons séparément à chaque groupe rééchantillonné (resample_sentinel_2_ds).

Remplacer le code existant xr_geomedian par :

geomedian_resample = resample_sentinel_2_ds.map(xr_geomedian)

Nous pouvons tracer les géomédias de sortie, et voir le changement dans le paysage au cours de l’année. Remplacez le code existant rgb par :

rgb(geomedian_resample, bands=['red', 'green', 'blue'], col="time", col_wrap=4)

L'image du tutoriel Jupyterlab de DE Africa Sandbox.

Comparaison des deux ensembles de données

En comparant les deux ensembles de données, pouvez-vous faire la différence avec les résultats ci-dessous?

sentinel_2_ds

L'image du tutoriel Jupyterlab de DE Africa Sandbox.

résample géométrique

L'image du tutoriel Jupyterlab de DE Africa Sandbox.

Jetez un coup d’oeil aux dimensions. Le jeu de données brut sentinel_2_ds a 71 pas de temps chargés, mais après un rééchantillonnage trimestriel comme dans geomedian_resample, la dimension temporelle est maintenant de 4. Cela est logique car l’année a été divisée en quatre trimestres.

Conclusion

Toutes nos félicitations! Vous avez modifié avec succès un bloc-notes pour créer un composite géomédian trimestriel en rééchantillonnant les données Sentinel-2.

Si vous souhaitez tester davantage, essayez d’exécuter le code avec différentes valeurs de rééchantillonnage. Avez-vous appris quelque chose d’intéressant à partager avec nous?

Dans la section suivante, nous continuerons à travailler avec ce cahier pour calculer les valeurs NDVI pour chacun de nos géomédiens trimestriels.