Calcul du NDVI: partie 2

Cet exercice fait suite à la partie précédente. Dans la première partie de cet exercice, vous avez construit un cahier pour rééchantillonner une année de données Sentinel-2 en pas de temps trimestriels.

Dans cette section, vous continuerez à partir de là où vous avez terminé l’exercice précédent. La plupart du code restera inchangé, mais nous introduirons une nouvelle mesure aux mesures existantes qui nous permettra de calculer et de tracer le NDVI.

Note

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

Ouvrir et exécuter le notebook

Si vous suivez directement à partir de la dernière section, vous pouvez ignorer cette étape. Si vous avez fermé l’onglet de votre navigateur Sandbox ou vous êtes déconnecté d’Internet entre les exercices, suivez ces étapes pour vous assurer que les importations de packages et la connexion au datacube sont correctes.

  1. Accédez au dossier Training.

  2. Double-cliquez sur « Calculate_ndvi.ipynb ». Il s’ouvrira dans le Lanceur.

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

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

Apporter des modifications à la cellule de pesée

Apportez les modifications suivantes ci-dessous pour modifier la cellule de pesée.

Ajout de la mesure nir

Pour calculer NDVI, nous devons charger la bande proche infrarouge de Sentinel-2. Dans le bac à sable, elle est appelée nir. Pour ajouter la bande, modifiez la cellule load_ard en suivant l’étape ci-dessous :

  1. Ajoute nir au tableau des mesures.

    measurements = ['red', 'green', 'blue', 'nir']
    

Si vous avez effectué l’étape ci-dessus, votre cellule load_ard devrait ressembler à ceci :

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', 'nir'],
    resolution=(-10, 10),
    group_by='solar_day')

Lancer le notebook

  1. Sélectionnez Kernel -> Restart Kernel and Run All Cells….

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

L’exécution du notebook peut prendre un peu de temps. Vérifiez que toutes les cellules ont été exécutées avec succès sans message d’erreur.

Avez-vous remarqué des variables de données supplémentaires dans le fichier sentinel_2_ds ?

L'image du tutoriel Jupyterlab de DE Africa Sandbox.

Créer une nouvelle cellule

Après avoir exécuté avec succès le notebook, cette cellule sera la dernière cellule:

résample géométrique

Le jeu de données geomedian_resample avec la bande NIR.

Notez qu’il contient maintenant les données de la bande NIR, qui sont les données que nous venons de charger.

Suivez les étapes ci-dessous pour créer une nouvelle cellule.

  1. Assurez-vous que la dernière cellule est sélectionnée.

  2. Appuyez sur la touche Esc, puis sur la touche B. Une nouvelle cellule sera créée sous la cellule actuelle.

Utilisez la méthode ci-dessus pour créer une nouvelle cellule.

Calculer le NDVI

L’un des indices de télédétection les plus couramment utilisés est l’indice de végétation par différence normalisée ou NDVI. Cet indice utilise le rapport entre les bandes rouge et proche infrarouge (NIR) pour identifier la végétation verte vivante. La formule du NDVI est la suivante :

\[\begin{split}\begin{aligned} \text{NDVI} & = \frac{(\text{NIR} - \text{Red})}{(\text{NIR} + \text{Red})} \\ \end{aligned}\end{split}\]

Lors de l’interprétation de cet indice, les valeurs élevées indiquent la végétation et les valeurs faibles indiquent le sol ou l’eau.

Définir la formule NDVI

Dans une nouvelle cellule, calculez le NDVI pour le jeu de données géomédian rééchantillonné. Pour simplifier les choses, vous pouvez stocker les bandes rouge et proche infrarouge dans de nouvelles variables, puis calculer le NDVI à l’aide de ces variables, comme indiqué ci-dessous:

nir = geomedian_resample.nir
red = geomedian_resample.red

NDVI = (nir - red) / (nir + red)

Exécutez la cellule en utilisant Maj + Entrée.

Tracez le NDVI pour chaque géomédian

Notre calcul est maintenant stocké dans la variable NDVI. Pour le visualiser, nous pouvons attacher la méthode .plot(), qui nous donnera une image du NDVI pour chaque géomédien dans notre jeu de données. Nous pouvons ensuite personnaliser le tracé en passant des paramètres à la méthode .plot(), comme indiqué ci-dessous :

NDVI.plot(col='time', vmin=-0.50, vmax=0.8, cmap='RdYlGn')

Exécutez la cellule en utilisant Maj + Entrée

  • col='time' indique au tracé que nous voulons afficher une image pour chaque pas de temps dans notre ensemble de données.

  • vmin=-0.50 indique au tracé d’afficher toutes les valeurs inférieures à -0.50 dans la même couleur. Cela peut aider à garder le contraste dans les images (rappelez-vous que NDVI peut prendre des valeurs de -1 à 1).

  • vmax=0.8 indique au tracé d’afficher toutes les valeurs supérieures à 0.8 dans la même couleur. Cela peut aider à garder le contraste dans les images (rappelez-vous que NDVI peut prendre des valeurs de -1 à 1).

  • cmap='RdYlGn' indique au graphe d’afficher les valeurs NDVI en utilisant une échelle de couleurs qui va du rouge pour les valeurs faibles au vert pour les valeurs élevées. Cela nous aide car la végétation saine apparaît en vert, et la non-végétation en rouge.

Si vous implémentez correctement le code de traçage NDVI, vous devriez voir l’image ci-dessous:

L'image du tutoriel Jupyterlab de DE Africa Sandbox.

Dans l’image ci-dessus, la végétation apparaît en vert (NDVI> 0). Le sable apparaît en jaune (NDVI ~ 0) et l’eau apparaît en rouge (NDVI <0).

Note

La fonction xarray .plot() est brièvement décrite dans Python basics 5 : Xarray.

Tracer des séries chronologiques de la zone NDVI

Bien qu’il soit utile de voir les valeurs NDVI sur toute la zone dans les graphiques ci-dessus, il peut parfois être utile de calculer des statistiques récapitulatives, telles que le NDVI moyen pour chaque géomédian. Cela peut rapidement révéler les tendances de la santé de la végétation au fil du temps.

Pour calculer le NDVI moyen, nous pouvons appliquer la méthode .mean() à notre variable NDVI. Nous pouvons ensuite appliquer la méthode .plot() pour voir le résultat, comme indiqué ci-dessous :

NDVI.mean(dim=['x', 'y']).plot(size=6)

Exécutez la cellule en utilisant Maj + Entrée

  • NDVI.mean(dim=[“x”, “y”])`` calcule la moyenne sur tous les pixels, indiqués par dim=['x', 'y']. Pour calculer la moyenne sur tous les temps, vous écrirez dim=['time'].

  • NDVI.mean(dim=['x', 'y']).plot(size=6) calcule la moyenne sur tous les pixels, puis trace le résultat. L’argument size=6 spécifie la taille du tracé.

Si vous implémentez correctement le calcul et le code de traçage, vous devriez voir l’image ci-dessous:

L'image du tutoriel Jupyterlab de DE Africa Sandbox.

Plutôt qu’une vue spatiale du NDVI à chaque pas de temps, nous voyons une valeur unique (le NDVI moyen) pour chaque fois.

Si vous souhaitez ajouter un titre et une étiquette sur l’axe des y à ce graphique, vous pouvez ajouter le code suivant sous la commande pour calculer et tracer la moyenne:

NDVI.mean(dim=['x', 'y']).plot(size=6)
plt.title('Quarterly Trend in NDVI')
plt.ylabel('Mean NDVI')

L'image du tutoriel Jupyterlab de DE Africa Sandbox.

Exécutez la cellule en utilisant Maj + Entrée.

Conclusion

Toutes nos félicitations! Vous avez calculé et visualisé avec succès le NDVI pour une série d’images composites géomédiennes.

Si vous souhaitez expérimenter davantage, essayez d’exécuter le code avec différentes zones. Avez-vous appris quelque chose d’intéressant à partager avec nous?