Suivi des changements au fil du temps à l’aide de séquences vidéo d’images satellite
Mots-clés : données utilisées ; landsat 5, données utilisées ; landsat 7, données utilisées ; landsat 8, visualisation ; pellicule, analyse ; surveillance des changements, interactif
Aperçu
Comprendre l’évolution des paysages naturels et humains au fil du temps peut fournir des informations essentielles sur la santé des écosystèmes locaux et l’évolution de l’environnement bâti. Par exemple, les données sur les changements dans la répartition de la végétation dans le paysage peuvent être utilisées pour surveiller l’impact de la déforestation ou suivre la régénération des forêts après la restauration de l’habitat ou des événements naturels extrêmes (par exemple, les feux de brousse). Le suivi des changements dans les zones urbaines peut être utilisé pour surveiller la croissance des infrastructures telles que les ports et les réseaux de transport, tandis que les données sur les changements côtiers peuvent être essentielles pour prévoir et gérer les impacts de l’érosion côtière ou la perte de zones humides côtières (par exemple, les mangroves).
Bien que ces exemples de changement puissent être suivis à l’aide d’une surveillance directe sur le terrain (par exemple, des relevés de la végétation), il peut être extrêmement difficile et coûteux d’obtenir une compréhension globale de ces processus à une échelle plus large du paysage. Pour de nombreuses applications, il peut également être extrêmement utile d’obtenir un enregistrement de l’historique d’un lieu en cours de changement. Cela nécessite généralement des données de surveillance historiques qui ne sont probablement pas disponibles pour tous les lieux, sauf ceux qui sont les plus intensément surveillés.
Cas d’utilisation de Digital Earth Africa
Plus de 30 années d’images satellite du programme NASA/USGS Landsat <https://www.usgs.gov/land-resources/nli/landsat> sont disponibles gratuitement pour l’Afrique, ce qui en fait une ressource puissante pour surveiller les changements naturels et anthropiques sur le continent africain. Étant donné que ces satellites photographient régulièrement chaque endroit de l’Afrique (environ une fois tous les 16 jours), ils fournissent une archive sans précédent de la façon dont de nombreux paysages africains ont changé au fil du temps.
L’analyse des changements à partir d’images satellite individuelles peut être rendue difficile par la présence de nuages, d’ombres de nuages, de reflets du soleil sur l’eau et de processus dynamiques tels que les changements de marées le long du littoral. En combinant des images individuelles bruyantes en images « récapitulatives » plus nettes et sans nuages qui couvrent une période plus longue (par exemple une ou plusieurs années), nous pouvons obtenir une vue claire et cohérente de l’environnement africain qui peut être comparée pour révéler les changements du paysage au fil du temps.
Description
Dans cet exemple, les données Digital Earth Africa Landsat sont extraites pour une plage de temps et un emplacement donnés, puis combinées à l’aide de la statistique médiane géométrique (« géomédiane ») pour révéler l’apparence médiane ou « typique » du paysage pour une série de périodes de temps (pour plus d’informations sur les géomédianes, voir le Notebook des composites géomédians).
Pour les applications côtières, l’analyse peut être personnalisée pour sélectionner uniquement les images satellites obtenues pendant une amplitude de marée spécifique (par exemple, marée basse, moyenne ou haute).
Les résultats pour chaque période sont combinés dans un graphique « pellicule » qui visualise l’évolution de l’apparence du paysage au fil du temps, avec un panneau « carte thermique des changements » mettant en évidence les zones potentielles de plus grand changement :

Commencer
Pour exécuter cette analyse, exécutez toutes les cellules du bloc-notes, en commençant par la cellule « Charger les packages ».
Charger des paquets
Importez les packages Python utilisés pour l’analyse.
[1]:
%matplotlib inline
import os
import datacube
from odc.geo.xr import write_cog
from deafrica_tools.app.changefilmstrips import run_filmstrip_app
Paramètres d’analyse
La cellule suivante définit les paramètres requis importants pour l’analyse :
output_name: un nom qui sera utilisé pour nommer le fichier de tracé de la pellicule de sortietime_range: la plage de dates à analyser (par exemple,time_range = ('1984-01-01', '2019-12-31))time_step: Ce paramètre nous permet de choisir la longueur des périodes de temps que nous voulons comparer (par exemple,time_step = {'years': 5}générera un tracé de pellicule pour chaque cinq ans de données dans l’ensemble de données ;time_step = {'months': 18}générera un tracé pour chaque période de 18 mois, etc. Les périodes de temps sont comptées à partir de la première valeur donnée danstime_range.
Paramètres optionnels :
tide_range: Ce paramètre vous permet de générer des tracés de films en fonction des conditions spécifiques de marée océanique. Cela peut être utile pour analyser les changements de manière cohérente le long de la côte. Par exemple,tide_range = (0.0, 0.2)sélectionnera uniquement les images satellite acquises dans les 20 % de marées les plus basses ;tide_range = (0.8, 1.0)sélectionnera les images des 20 % de marées les plus hautes. La valeur par défaut esttide_range = (0.0, 1.0)qui sélectionnera toutes les images quelle que soit la marée.resolution: La résolution spatiale pour charger les données. La valeur par défaut estresolution = (-30, 30), ce qui chargera les données à une résolution de 30 m pixels. L’augmentation de cette valeur (par exemple àresolution = (-100, 100)) peut être utile pour charger de grandes étendues spatiales.« max_cloud » : ce paramètre vous permet d’exclure les images satellites avec une couverture nuageuse excessive. La valeur par défaut est « 0,5 », ce qui conservera toutes les images avec moins de 50 % de couverture nuageuse.
ls7_slc_off: s’il faut inclure les données postérieures à la panne du SLC de Landsat 7 (c’est-à-dire SLC désactivé). La valeur par défaut est « False », ce qui supprime toutes les observations de Landsat 7 après le 31 mai 2003. La valeur « True » entraînera des données supplémentaires, mais peut également introduire des bandes horizontales dans les tracés de pellicule de sortie.size_limit: un entier facultatif (en kilomètres carrés) spécifiant la taille limite de la requête de données. Les requêtes plus grandes que cette taille recevront un avertissement indiquant que la requête de données est trop grande (et peut donc entraîner des erreurs de mémoire).
Si vous exécutez le bloc-notes pour la première fois, conservez les paramètres par défaut ci-dessous. Cela permettra de démontrer le fonctionnement de l’analyse et de fournir des résultats significatifs.
[2]:
# Required parameters
output_name = 'example'
time_range = ('2013', '2021')
time_step = {'years': 3}
# Optional parameters
tide_range = (0.0, 1.0)
resolution = (-30, 30)
max_cloud = 0.5
ls7_slc_off = False
size_limit = 100
Sélectionnez l’emplacement et générez des bandes de film
Exécutez la cellule suivante pour démarrer l’analyse. Cela tracera une carte interactive qui sera utilisée pour sélectionner la zone pour laquelle charger les données satellite.
Sélectionnez l’outil « Dessiner un rectangle » ou « Dessiner un polygone » sur la gauche de la carte et dessinez une forme autour de la zone qui vous intéresse.
Si vous utilisez ce bloc-notes pour la première fois, dessinez un rectangle autour de l’usine de la West African Cement Company pour voir un exemple de changement induit par le développement urbain. Vous devez dessiner un rectangle similaire à l’image ci-dessous :

Si vous exécutez ce bloc-notes pour une nouvelle zone, effectuez un zoom et un déplacement sur la carte jusqu’à ce que vous trouviez une zone d’intérêt, puis dessinez un rectangle ou un polygone comme décrit ci-dessus. Vous devrez vérifier la disponibilité des données Landsat dans la zone choisie à l’aide de Digital Earth Africa Explorer.
Lorsque vous êtes prêt, appuyez sur le bouton vert « Terminé » en haut à droite de la carte. Cela lancera le chargement des données, puis générera un tracé de bandes de film.
Selon la taille de la zone sélectionnée, cette étape peut prendre plusieurs minutes. Pour que les temps de chargement restent raisonnables, sélectionnez une zone d’une taille inférieure à 10 000 hectares. Lorsque vous utilisez l’outil de dessin de rectangle, la zone en hectares s’affiche pour vous guider. La limite de 10 000 hectares peut être dépassée en fournissant le paramètre « size_limit » dans la section « Paramètres d’analyse » ci-dessus.
Une fois que l’analyse atteint l’étape « Génération de composites géomédians », vous pouvez vérifier l’état du chargement des données en cliquant sur le lien Tableau de bord sous Client ci-dessous.
[3]:
output_data = run_filmstrip_app(output_name,
time_range,
time_step,
tide_range,
resolution,
max_cloud,
ls7_slc_off)
Starting analysis...
Client
Client-5ee85129-d41e-11ef-a29e-1e01ca941b00
| Connection method: Cluster object | Cluster type: distributed.LocalCluster |
| Dashboard: /user/victoria@kartoza.com/proxy/8787/status |
Cluster Info
LocalCluster
90206cfb
| Dashboard: /user/victoria@kartoza.com/proxy/8787/status | Workers: 1 |
| Total threads: 7 | Total memory: 59.21 GiB |
| Status: running | Using processes: True |
Scheduler Info
Scheduler
Scheduler-e49b822a-ab68-4f1b-9e2a-c60042f83a0b
| Comm: tcp://127.0.0.1:33135 | Workers: 1 |
| Dashboard: /user/victoria@kartoza.com/proxy/8787/status | Total threads: 7 |
| Started: Just now | Total memory: 59.21 GiB |
Workers
Worker: 0
| Comm: tcp://127.0.0.1:39651 | Total threads: 7 |
| Dashboard: /user/victoria@kartoza.com/proxy/34817/status | Memory: 59.21 GiB |
| Nanny: tcp://127.0.0.1:34869 | |
| Local directory: /tmp/dask-scratch-space/worker-h67hyx4a | |
Using pixel quality parameters for USGS Collection 2
Finding datasets
ls5_sr
ls7_sr
Ignoring SLC-off observations for ls7
ls8_sr
Counting good quality pixels for each time step
Filtering to 108 out of 312 time steps with at least 50.0% good quality pixels
Applying pixel quality/cloud mask
Re-scaling Landsat C2 data
Returning 108 time steps as a dask array
Generating geomedian composites and plotting filmstrips... (click the Dashboard link above for status)
Utiliser des séquences de films pour identifier le changement
Le graphique de la pellicule ci-dessus contient plusieurs panneaux d’images en couleur qui résument l’apparence médiane ou « typique » du paysage pour les périodes de temps définies à l’aide de « time_range » et de « time_step ». Si vous avez exécuté l’analyse sur l’usine de la West African Cemement Company, inspectez chacun des graphiques d’images. Vous devriez pouvoir voir l’expansion de l’usine au fil du temps.
Changer la carte thermique
Pour faciliter l’identification des zones qui ont changé entre chaque panneau de la pellicule, le dernier panneau fournit une « carte thermique des changements ». Celle-ci met en évidence les pixels dont les valeurs varient considérablement entre les panneaux du tracé de la pellicule. Les couleurs vives indiquent les pixels qui ont changé, tandis que les couleurs foncées indiquent les pixels qui sont restés relativement similaires au fil du temps.
Comparez le panneau « Changer la carte thermique » avec les panneaux d’imagerie couleur. Vous devriez pouvoir voir clairement l’expansion dans les pixels clairs et les bâtiments centraux de l’usine dans les pixels les plus sombres.
Informations techniques : la « carte thermique de changement » est calculée en prenant d’abord une transformation logarithmique des données d’imagerie pour mettre en valeur les pixels sombres, puis en calculant l’écart type sur tous les panneaux de la pellicule pour révéler les pixels qui ont changé au fil du temps.
Téléchargement du plan du film
La version haute résolution du tracé de la pellicule générée ci-dessus sera enregistrée au même emplacement à partir duquel vous exécutez ce bloc-notes (par exemple, généralement « Real_world_examples »). Dans JupyterLab, utilisez le navigateur de fichiers pour localiser le fichier image avec un nom au format suivant :
filmstrip_{output_name}_{date_string}_{time_step}.png
Vous pouvez télécharger l’image sur votre PC en cliquant avec le bouton droit sur le fichier image et en sélectionnant « Télécharger ».
Exporter des données GeoTIFF
Il peut être utile d’exporter chacun des panneaux de pellicule générés ci-dessus sous forme de fichiers raster GeoTIFF afin de pouvoir les charger dans un logiciel de système d’information géographique (SIG) pour une analyse plus approfondie. Étant donné que les panneaux de pellicule ont été générés à l’aide de la statistique « géomédiane » qui préserve les relations entre les bandes spectrales, les données résultantes peuvent être analysées de manière valide de la même manière que nous analyserions une image satellite individuelle.
Pour exporter les GeoTIFF, exécutez la cellule suivante puis faites un clic droit sur les fichiers dans le navigateur de fichiers JupyterLab et sélectionnez « Télécharger ».
[4]:
for i, ds in output_data.groupby('timestep'):
print(f'Exporting {i} data')
write_cog(ds.squeeze(dim="timestep").to_array(),
fname=f'geotiff_{output_name}_{i}.tif',
overwrite=True)
Exporting 2013-01-01 data
Exporting 2016-01-01 data
Exporting 2019-01-01 data
Prochaines étapes
Une fois terminé, revenez à la section Paramètres d’analyse, modifiez certaines valeurs et relancez l’analyse. Par exemple, vous pouvez essayer :
Modifiez « time_range » pour examiner une période de temps spécifique qui vous intéresse.
Définir un « time_step » plus court (par exemple, « time_step = {“years”: 5} ») pour un aperçu plus détaillé de la façon dont le paysage a changé sur des périodes de temps plus courtes.
Déplacez-vous vers une autre zone d’intérêt.
Informations Complémentaires
Licence Le code de ce notebook est sous licence Apache, version 2.0 <https://www.apache.org/licenses/LICENSE-2.0>`__.
Les données de Digital Earth Africa sont sous licence Creative Commons Attribution 4.0 <https://creativecommons.org/licenses/by/4.0/>.
Contact Si vous avez besoin d’aide, veuillez poster une question sur le canal Slack DE Africa <https://digitalearthafrica.slack.com/> ou sur le GIS Stack Exchange <https://gis.stackexchange.com/questions/ask?tags=open-data-cube> en utilisant la balise open-data-cube (vous pouvez consulter les questions posées précédemment `ici <https://gis.stackexchange.com/questions/tagged/open-data-
Si vous souhaitez signaler un problème avec ce notebook, vous pouvez en déposer un sur Github.
Version de Datacube compatible
[5]:
print(datacube.__version__)
1.8.20
Dernier test :
[6]:
from datetime import datetime
datetime.today().strftime('%Y-%m-%d')
[6]:
'2025-01-16'