Vous êtes sur la page 1sur 90

COPERNICUS et agriculture

TD: Cartographie de l’occupation du


sol à partir d’images Sentinel-2 par
apprentissage automatique
1. Introduction
Objectif du TP

L’objectif de ce TP est de développer la maîtrise des outils permettant de


mettre en œuvre une stratégie de classification automatique de séries
temporelles Sentinel-2 pour la cartographie de l’occupation du sol (OcSol),
et qui sont à la base des chaines de traitements pour la cartographie de
l’usage des sols à vocation agricole (cartographie des cultures).
Introduction
 La cartographie de l’usage des sols agricoles est un processus qui se
montre de plus en plus important dans l’implémentation de stratégies
de suivi des surfaces cultivés, car elle fournit une information
primordiale pour des actions à plusieurs niveaux, entre autres :

 Répertorier les activités agricoles sur un territoire (statistiques agricoles) et


estimer la production des cultures principales (en couplage avec les
modèles d’estimation de rendement)

 Raffiner les stratégies de suivi de l’état des cultures en les adaptant aux
différents types de pratiques agricoles, pour alimenter des systèmes
d’alerte précoce pour la sécurité alimentaire

 Etudier l’impact des activités agricoles sur les territoires d’un point de vue
écologique (ex. biodiversité, ressources naturelles) et/ou socio-
économique (ex. réponse aux besoins des populations)
Introduction

 Historiquement, le suivi des activités agricoles était réalisé


principalement sur une base d’enquêtes statistiques, ne fournissant pas
une information spatialisée sur les pratiques agricoles et généralement
susceptibles de fournir des informations décalées par rapport aux réel.

 Plus récemment, le système sur base déclarative de la Politique Agricole


Commune en Europe a montré le potentiel de l’information spatiale
dans le suivi des surfaces cultivés. Cependant la production de ces
bases de données spatiales (comme le Registre Parcellaire Graphique –
RPG – en France) est longue et très couteuse, ce qui limite leur usage à
des finalités qui ne nécessitent pas un suivi « en temps utile ».
Introduction
 Avec la monté en puissance de la télédétection, des nouveaux scénarios
s’ouvrent pour la mise en place de stratégies de suivi des cultures.
 Des séries temporelles d’images de plus en denses et résolues
 Des algorithmes de traitement d’images de plus en plus performants

 La mission Sentinel-2 de l’ESA fournit des images particulièrement


adaptées aux besoins du suivi des surfaces cultivées :
 Des images issues de capteurs optiques multi-spectraux, fournissant un
signal approprié pour l’étude de la végétation
 Une résolution spatiale de 10m, garantissant un nombre significatif de
mesures de réflectances même sur du parcellaire de taille réduite
 Une répétitivité de 5 jours, permettant un suivi (relativement) fin de la
croissance des cultures dans le temps
Introduction
 On en revient donc à l’objectif de ce TP, qui est de fournir une première
vue sur les outils pouvant être mobilisés pour la cartographie
automatique des surfaces cultivées.

 En particulier, l’attention portera sur les points suivants:


 Utilisation de logiciels libres et ouverts, comme QGIS et l’Orfeo Toolbox

 Traitements de base des images Sentinel-2 pour produire des séries


temporelles adaptées à l’analyse par des méthodes automatiques

 Mise en place d’une stratégie simple de classification de l’occupation du


sol basée sur la mobilisation d’algorithmes d’apprentissage automatique
1.1 Introduction à l’Orfeo Toolbox
Introduction à l’Orfeo Toolbox (OTB)

 Développé par le CNES (Centre National d’Etudes Spatiales) en 2006 en


appui au programme Pléiades Orfeo

 Suite logicielle libre, open-source écrit en langage C++

 À l’origine, plusieurs objectifs:


 Faciliter l’utilisation d’imagerie THRS (calculs performants)
 Capitaliser la R&D autour du traitement d’images satellitaires
 Fournir un ensemble riche d’outils génériques aux utilisateurs
Que permet l’Orfeo Toolbox ?

 Ecrire son propre code en C++ via l’API  nécessite une maitrise
importante en développements informatiques
 Utiliser les applications  pour un grand nombre de traitements de
base, l’OTB met à disposition des fonctions pouvant être appelé par ligne
de commande ou par des interfaces graphiques dédiées (ex. dans QGIS)
 Utiliser Monteverdi2  l’OTB fournit également un environnement
graphique pour l’utilisation des applications permettant également la
visualisation et la gestion des données
Que font les applications de l’OTB ?
 Accès aux données : lecture des métadonnées, calcul de statistiques

 Manipulations de base : corrections radiométriques/géométriques,


découpage, extraction et concaténation de bandes, calculs pixel-à-pixel,
indices radiométriques, …

 Filtrages : suppression du bruit, filtres morphologiques, …

 Extraction d’attributs : détection de contours, lignes, point d’intérêt,


calcul d’indices de textures (Haralick), …

 Segmentation d’images pour l’analyse par approches à objet

 Apprentissage automatique : méthodes de classification supervisée et


non supervisée, indicateurs de précision

  Calcul performants : streaming (permet de traiter des images de taille


arbitraire), multi-threading (accélère les traitements via une
parallélisation automatique des calculs)
1.2 Installation de l’OTB et interfaçage dans QGIS
Téléchargement de l’OTB
 Rendez-vous sur https://www.orfeo-toolbox.org/download et
téléchargez le paquet correspondant à votre système d’exploitation. Dans
ce TP, on travaillera sous Windows (Win 64 bits), mais vous pouvez suivre
les instructions d’installation pour les autres systèmes.
 https://www.orfeo-toolbox.org/CookBook/Installation.html

 Décompresser le paquet zip dans un dossier de votre choix, dont le


chemin ne contienne pas d’espaces ou caractères spéciaux :
Mapla : lanceur d’applications OTB
 La façon la plus simple d’accéder aux traitements de l’OTB est de passer
par son lanceur d’applications, Mapla (Monteverdi Application Launcher).

 Afin de tester le fonctionnement de l’OTB, lancez Mapla en double-


cliquant sur le fichier mapla.bat dans le dossier de l’OTB (et en acceptant
l’alerte de sécurité de Windows) :

 Si la fenêtre de droite s’affiche avec la liste des applications, tout est prêt.
Configuration de QGIS (>= 3.8)
 Lors que possible, nous allons utiliser l’OTB directement via QGIS, si
vous disposez d’une version à partir de la 3.8, celles-ci étant déjà
équipées avec les éléments permettant l’interfaçage de l’OTB.

 Aller dans Préférences  Options, puis (à gauche) sur Traitement

 Supposant l’OTB décompressé dans le dossier C:\Work\OTB-7.1.0-Win64


effectuer les réglages comme dans l’image ci-dessous à gauche :

 Cliquer sur OK en bas. Activer la boîte à outils dans Traitement  Boîte à


Outils, l’OTB doit y figurer (comme dans l’image à droite)
2. Occupation du Sol à partir d’images Sentinel-2
par apprentissage automatique
Zone d’étude
Le site d’étude est une zone agricole (20 km x 20 km) située en Occitanie,
France, proche de la ville de Nîmes dans le département du GARD

Site d'étude situé près de la ville de Nîmes, dans le sud de la France. Le fond de la carte est une image optique acquise par le satellite Sentinel-2 en
Juillet 2016. Les coordonnées géographiques sont en WGS84 (décimaux).
Zone d’étude
Pour ce TP, nous disposons de données de référence pour l’occupation des
sols constitués par l’intégration par photo-interprétation de bases de
données SIG existantes1. Elle comporte 7 classes d’OcSol, listées dans la
légende ci-dessous.

1 Principalement la BD Topo et la BD Forêt (IGN) et Registre Parcellaire Graphique pour le cadastre agricole.
Résumé de la démarche
 Cet exercice vous permettra de réaliser « manuellement » les
différentes étapes de traitement des images qui mèneront à la
production d’une carte d’occupation du sol à partir d’une série
temporelle d’images Sentinel-2.

 Ces étapes reprennent en grande partie celles mises en place dans la


chaîne de traitement automatique iota2, développée dans le cadre du
CES Occupation des Sols du Pôle THEIA1, utilisée depuis 2016 pour
produire des cartes d’OcSol annuelles sur l’ensemble de la France
Métropolitaine.

Schéma simplifié de la chaîne iota2

1 Pour plus d’informations, visiter https://www.theia-land.fr/ceslist/ces-occupation-des-sols/ et http://osr-cesbio.ups-tlse.fr/~oso/


Résumé de la démarche
 En particulier, à l’aide de l’OTB sous QGIS (sauf exceptions!) vous allez
réaliser les exercices suivants :
 Extraction d’une ROI à partir d’une tuile Sentinel-2 (S2)
 Production d’un stack monodate à 10m de résolution spatiale à partir des
bandes S2 à différentes résolutions spatiales (10m et 20m)
 Réalisation d’une interpolation temporelle (gapfilling) pour la production
d’un stack multidate dénuagé
 Extraction d’indices radiométriques et création du stack de classification
 Traitement de la donnée de référence : création des jeux de données
d’apprentissage et validation
 Apprentissage d’un modèle de classification automatique
 Génération de la carte d’occupation du sol et évaluation du résultat
 Post-traitements de la carte (« lissages » et codes couleurs)
2.1 Extraction d’une ROI
 Dans le jeu de données fourni, accédez au dossier 2.1_ExtractROI et
ouvrez l’image suivante dans QGIS :
 SENTINEL2A_20161231-103428-460_L2A_T31TFJ_D_V1-4_FRE_B4.tif

 Cette image correspond à la bande du rouge (B4) d’une tuile entière S2,
en réflectance de surface (L2A), telle que mise à disposition par le CES
Réflectance du Pôle THEIA via le portail https://theia.cnes.fr.

 Ouvrez également le fichier qui définit l’emprise de la zone d’étude :


 gard_site.shp

 À l’aide de l’OTB, nous allons réaliser un simple découpage de cette


image suivant les contours de la zone d’étude.

 Pour cela, dans Mapla, recherchez l’application OTB nommée ExtractROI


et lancez-la avec un double-clic.
2.1 Extraction d’une ROI
2.1 Extraction d’une ROI
 Saisissez les réglages de l’application ExtractROI comme ci-dessous (les
fichiers peuvent être glissés dans les cases correspondantes) :

 Le paramètre int16 permet


de définir le codage des
pixel pour l’image de sortie.
Dans ce cas, comme pour
l’image à découper, ce sera
un codage entier à 16 bits.

 Le mode fit permet de


réaliser un découpage à
partir d’une référence
(image ou vecteur). Dans
notre cas, ce sera une
référence vecteur qui
contient l’emprise de la
zone d’étude.

 Lors que la mention Ready to run apparaît en bas de fenêtre,


l’application peut être lancée en cliquant sur Execute.
2.1 Extraction d’une ROI
 Chargez donc le résultat du découpage dans QGIS et vérifiez qu’il se
superpose correctement à votre référence vecteur.
2.1 Extraction d’une ROI

 L’extraction de la zone d’étude est une opération à faire en amont, en


particulier si l’échelle de travail est réduite (portion d’une tuile) comme
dans notre cas.

 Ceci permet en effet de réduire sensiblement le volume de données à


traiter dans les étapes successives de la démarche.

 L’ExtractROI doit être répété, en principe, sur toutes les bandes S2 qui
seront utilisées par la suite (toutes les 10 bandes dans notre cas) ainsi
que sur le masque de nuage à la résolution spatiale appropriée.

 Ici, le résultat du découpage sur la scène entière est fourni comme


donnée d’entrée pour l’exercice suivant, dans ce dossier :

 2.2_Resample10m\S2-L2A-THEIA_0_20161231_31TFJ
2.2 Stack S2 monodate à 10m
 Comme vous le savez certainement, les images S2 sont fournies à
plusieurs résolutions spatiales selon la longueur d’onde (bande) :

 B1, B9, B10 à 60m


 B2, B3, B4, B8 à 10m
 B5, B6, B7, B8A, B11, B12 à 20m

 Les bandes à 60m sont typiquement utilisées uniquement pour les


corrections atmosphériques (passage au niveau L2A), qui sont déjà
réalisées sur les produits S2 mis à disposition par le Pôle THEIA.

 Pour faciliter la mise en place du processus de classification, il convient


produire un stack des 10 autres bandes, mais il est tout d’abord
nécessaire de les rendre « superposables », par un procédé de
rééchantillonage spatial.
2.2 Stack S2 monodate à 10m
 Un choix typique est de « sur-échantillonner » les bandes à 20m pour les
projeter sur la grille correspondante à celle des bandes à 10m.

 Pour cette opération, vous allez utiliser l’application « Superimpose » de


l’OTB, qui est prévue à cet effet (rendre deux images « empilables »).
Lancez-la via Mapla :
2.2 Stack S2 monodate à 10m
 Remarque : en allant dans l’onglet Help  Documentation via
l’interface des applications OTB, vous serez dirigés sur la page web de
documentation de l’application, où une documentation exhaustive des
paramètres de chaque application est disponible.
2.2 Stack S2 monodate à 10m
 Commençons donc cet exercice par l’affichage de deux bandes à résolution
différente dans QGIS, par ex. le bandes B4 et B5 pour en apprécier la
différente résolution spatiale (n’oubliez pas de régler l’affichage). Dans le
dossier 2.2_Resample10m\S2-L2A-THEIA_0_20161231_31TFJ :

 SENTINEL2A_20161231-103428-460_L2A_T31TFJ_D_V1-4_FRE_B5_gard_site.tif
 SENTINEL2A_20161231-103428-460_L2A_T31TFJ_D_V1-4_FRE_B4_gard_site.tif
2.2 Stack S2 monodate à 10m
 Avec l’application Superimpose, nous allons produire une version à 10m de
résolution de la bande B5. Effectuez les réglages suivants et exécutez :

 Le Reference Input est fixé à une


bande à 10m (ici, notre B4)

 Le Image to reproject est l’image


à reprojeter (ici, notre B5)

 Output Image est le fichier de


sortie à produire, dont le codage
pixel est fixé à int 16, comme pour
les sources

 L’encadré Interpolation définit la


méthode d’interpolation spatiale,
ici fixée à l’interpolation bicubique
utilisant un rayon de 2 pixels
2.2 Stack S2 monodate à 10m
 Ouvrons donc le résultat de cette opération dans QGIS pour visualiser l’effet
de cette opération.

 La partie gauche è celle rendue à 10m. On remarque en effet que le


nombre de pixel a augmenté (image moins quadrillée), même si sa
définition, qui est liée à la résolution de l’acquisition, n’a pas changé.
2.2 Stack S2 monodate à 10m
 Ouvrons donc le résultat de cette opération dans QGIS pour visualiser l’effet
de cette opération.

 La partie gauche è celle rendue à 10m. On remarque en effet que le


nombre de pixel a augmenté (image moins quadrillée), même si sa
définition, qui est liée à la résolution de l’acquisition, n’a pas changé.

 Une comparaisons des métadonnées de la nouvelle image avec celles de


l’image B4 permet de vérifier que les grilles de pixels sont alignées.

 Clic droit sur la couche  Propriétés  Information puis défilez.


2.2 Stack S2 monodate à 10m

 Exercice 2.2.1 : pour la constitution du stack à 10m de résolution, il est


nécessaire de réaliser cette opération sur toutes les bandes à 20m d’une
scène. Effectuez donc le suréchantillonnage des autres bandes à 20m en
utilisant toujours une référence à 10m. Prenez soin de vérifier le dossier et le
nom du fichier de sortie, ainsi que le codage des pixels.

 Conseil : une fois les saisies effectuées pour une image dans l’interface OTB,
vous n’avez qu’à modifier le fichier de l’image à reprojeter ainsi que celui de
sortie et relancer.
2.2 Stack S2 monodate à 10m
 La dernière opération à effectuer dans cette étape est l’empilement des
images à 10m de résolution, en prenant garde à respecter l’ordre des
longueurs d’onde originaire de l’image S2.

 L’OTB fournit l’application ConcatenateImages pour cela, que nous allons


lancer directement via la boîte à outils de QGIS. Ouvrez-là via le menu
Traitement  Boîte à Outils, recherchez l’application et lancez-là :
2.2 Stack S2 monodate à 10m
 Une fois les fichiers des bandes sélectionnées, vérifiez l’ordre dans la
fenêtre de sélection multiple et complétez les réglages comme suit :

 Lancez enfin l’application (Executer), ignorer les erreurs éventuelles dans le


journal. Le résultat de l’empilement s’affichera dans QGIS.
2.2 Stack S2 monodate à 10m
 Exercice 2.2.2 : maintenant, vous disposez d’un stack à la même résolution
spatiale pour toute la scène S2. Essayez de réaliser un affichage en fausses
couleurs utilisant le moyen infrarouge (R: B11, V: B8, G: B4), utile pour la
discrimination des différents types de végétation. Vous devriez obtenir un
résultat de ce type :

 Attention : ne pas confondre l’ordre des bandes de votre stack (Bande 1,


Bande 2, etc.) avec la désignation des bandes S2 (B2, B3, etc.)!
2.3 Interpolation multi-temporelle
 L’opération de rééchantillonnage et empilement des images est
normalement effectuée sur toute la série temporelle S2, afin d’automatiser
plus facilement le processus de classification.

 Toutefois, les images à disposition sont souvent affectés par la présence de


nuages (et des ombres correspondantes), qui rendent des zones à certaines
dates d’acquisitions pas exploitables pour la classification.

 Pour résoudre ce problème, la chaîne iota2 met en place un prétraitement


ultérieur, l’interpolation multi-temporelle ou gap filling (litt. « remplissage
des trous »), qui a un double objectif :

 à l’aide de masques de nuages comme celles fournies pour le produit S2 de


niveau L2A, remplacer les pixels « nuageux » par une estimation de la
réflectance réelle, réalisée à partir des valeurs valides plus proches en date

 effectuer un rééchantillonnage temporel, en réalisant le même type


d’opération pour produire des séries temporelles couvrant régulièrement la
période de référence.
2.3 Interpolation multi-temporelle
 Pour travailler sur cette étape, vous avez à disposition une partie de la série
temporelle disponible sur la zone d’étude, pas complète mais assez réduite
pour vous permettre de réaliser les manipulations rapidement.
 Dans le dossier 2.3_MultitempStack vous trouverez les stack monodate ainsi
que les masques de nuages à 10m de résolution.
2.3 Interpolation multi-temporelle
 Commençons donc par travailler sur les masques de nuage et sur leur
préparation pour le gap filling.

 Pour l’image du 08/04/2016 (la plus nuageuse), ouvrez le masque de nuage


(fichier contenant la mention CLM_R1) et observez-en les valeurs (à l’aide
par ex. de l’extention Value Tool)

 Ces masques sont issues du processus de correction


atmosphérique (pour les produits THEIA, c’est
l’algorithme MAJA1 développée par le CNES)

 Il s’agit d’un produit permettant d’identifier, entre


autres, les types de nuages et les ombres projetées

 Seul les pixels correspondantes aux valeurs du


masque égales à 0 (transparents dans l’affichage a
gauche) sont considérés comme « clairs ».

 Pour le gap filling, nous avons besoin simplement


d’un masque indiquant les pixels non valides (dont
les réflectances doivent donc être estimées).
1 Pour plus d’information visitez https://www.theia-land.fr/ceslist/ces-reflectance-de-surface .
2.3 Interpolation multi-temporelle
 En résumé, pour chaque date de la série temporelle, il s’agit de construire
une image binaire (à deux valeurs, 0 ou 1), à valeur 1 en correspondance
des pixels qui ne sont pas utilisables.

 En principe, tous les pixels à valeurs différentes de zéro.

 Nous allons réaliser cette opération à l’aide de l’application BandMath de


l’OTB, permettant de effectuer des simples opérations de calcul pixel-à-
pixel, comme des opérations logiques ou arithmétiques.

 Lancez l’application dans Mapla, et observez-en les paramètres :


2.3 Interpolation multi-temporelle

 Le BandMath demande en entrée simplement une liste d’images, le fichier


de sortie et une expression mathématique à calculer.

 L’expression mathématique a comme variables les bandes des images en


entrée, qu’on peut spécifier avec la notation suivante :

 Im<X>b<Y> indique la bande Y de l’image X, (l’ordre des images correspond à


celui dans la liste, l’ordre des bandes à celui du fichier d’image correspondant).

 BandMath supporte un grand nombre d’opérateurs mathématiques :

 Opérateurs de base : somme, différence, multiplication, division, op. logiques


 Opérateurs mathématiques : trigonométrie, log./exp., min/max, etc.
 …

 Pour informations plus exhaustives sur l’application, consultez la doc OTB.


2.3 Interpolation multi-temporelle
 Ici, l’opération à réaliser à partir du masque THEIA est très simple:

 im1b1 != 0  Retourne 1 pour les pixels différent de zéro, et 0 autrement.

 Ceci donne lieu au paramétrage BandMath suivant :

 Remarquez que le codage de sortie a été fixé ici à uint 8 (entiers sans signe
à 8 bit), le format plus « économique », car l’image de sortie n’a que deux
valeurs possibles (0 ou 1). Exécutez donc l’application.
2.3 Interpolation multi-temporelle
 Exercice 2.3.1 : ouvrez le masque binaire généré dans QGIS et vérifiez
qu’effectivement les valeurs égales à 1 correspondent à des pixels nuageux.
Si c’est le cas, répétez ce même procédé pour les autres images de la série.

 Remarque : le masque de nuages issue de la correction atmosphérique est


toujours une estimation, qui peut ne pas être très précise. Il peut donc y
avoir des erreurs, comme des zones de nuage non détectées ou des zones
claires détectées comme nuageuses. On accepte généralement ces erreurs
quand elle sont pas très significatives, surtout si on ne dispose pas d’un
masque plus précis.

 Exercise 2.3.2 : une fois tous les masques produits, générez, à l’aide de
l’application ConcatenateImages, les empilements suivants en prenant
garde à conserver l’ordre temporel (attention au dates) :

 Les différents stack monodate en un seul fichier (ex. S2_REFL.tif – int 16)
 Les différents masques de validités en un seul fichier (ex. S2_GAPS.tif – uint 8)
2.3 Interpolation multi-temporelle
 Si l’exercice a été complété correctement, tout est pour le paramétrage de
l’application OTB qui réalise l’interpolation multi-temporelle, nommée
ImageTimeSeriesGapFilling (ouvrez-la dans Mapla).

 Les images d’entrée demandées sont la


série temporelle de réflectances en un seul
fichier (Input time series), et la série de
masques associée (Mask time series), en
ordre temporel.

 Il faut également indiquer le nombre de


composantes (bandes) par date
d’acquisition (Number of components per
date), 10 dans notre cas, et le type
d’interpolateur (linéaire ou spline).

 Il existe la possibilité d’indiquer les dates


d’acquisition de la série en entrée (Input
date file), ainsi que les dates souhaitées en
sortie permettant de faire, par exemple, un
échantillonnage temporel régulier.
2.3 Interpolation multi-temporelle
 Nous allons utiliser les fichiers de dates en entrée/sortie.

 Leur préparation est simple : il suffit de lister les dates dans un fichier texte
au format YYYYMMJJ, en saisissant une date par ligne.

 Dans notre cas, nous allons créer une image tous les deux mois, datant du
1er du mois courant, du 01/03/2016 au 01/11/2016, ce qui va donner :

 …pour les dates d’entrée (input) et sortie (output) respectivement.


2.3 Interpolation multi-temporelle
 Effectuez donc le paramétrage suivant dans ImageTimeSeriesGapFilling.
Lancez ensuite l’application avec Execute :
2.3 Interpolation multi-temporelle
 Allons donc vérifier le résultat du gap filling, en comparant à titre
d’exemple la date du 08/04/2016 « réelle » avec celle du 01/05/2016
obtenue par interpolation temporelle.

 Pour cela, allons régler l’affichage dans QGIS en choisissant, dans le style
des couches, une composition en Couleurs à bandes multiples, utilisant les
bandes 13 (rouge), 12 (vert), et 11 (blue) pour S2_REFL et S2_REFL_GAPF,
qui correspondent aux bandes rouge, vert et bleu de la deuxième date pour
les deux séries temporelles.

Image du 08/04 Composition du 01/05


2.3 Interpolation multi-temporelle

 Exercice 2.3.3 : effectuez également une analyse visuelle des autres dates
de la série temporelle. Vous remarquerez la présence de nuages résidus
(non détectés par la correction atmosphérique) ainsi que des artefacts en
correspondance des pixels « synthétiques ». Ces effets sont normaux dans
cette opération, et sont en général moins marqués lorsqu’on travaille à
partir de séries temporelles plus denses.
2.4 Extraction d’indices radiométriques
 En général, pour la cartographie de l’occupation du sol, l’utilisation
d’indices radiométrique (par ex. de végétation, de sol ou d’eau) en
complément des réflectances S2 d’origine est une pratique commune dans
la plupart des solution faisant l’état de l’art.

 La chaîne iota2, qui peut dans le cas général inclure un nombre arbitraire
d’indices radiométriques (ou autres), préconise comme ligne de base,
l’utilisation des trois indices suivant :

Normalized Difference Normalized Difference Brightness Index


Vegetation Index Water Index

𝑃𝐼𝑅 − 𝑅𝑜𝑢𝑔𝑒 𝑉𝑒𝑟𝑡 − 𝑃𝐼𝑅 𝐵𝑅𝐼 = 𝐵𝑎𝑛𝑑𝑖2


𝑁𝐷𝑉𝐼 = 𝑁𝐷𝑊𝐼 =
𝑃𝐼𝑅 + 𝑅𝑜𝑢𝑔𝑒 𝑉𝑒𝑟𝑡 + 𝑃𝐼𝑅 𝑖

Lié à la densité et santé de Sensible aux surfaces humides Fait ressortir les sols nus et
la végétation et à la quantité d’eau les surfaces artificialisés
dans le bassins
2.4 Extraction d’indices radiométriques
 Comme le calcul de ces indices radiométriques se fait par des expressions
mathématiques à partir des réflectances des images, l’application qu’on
utilisera pour cette étape est une version amélioré de BandMath, appelée
BandMathX, qui permet d’avoir des fichiers multi-bande en sortie.

 Dans BandMathX, plusieurs expressions peuvent être concaténées dont le


résultat sera automatiquement empilé dans l’image de sortie, grâce à la
syntaxe suivante :

 { <exp1> ; <exp2> ; … ; <expN> } , où chaque expression se compose par la


même syntaxe que celle de BandMath.

 Pour rappel, l’ordre des bandes S2 de nos stack monodate est le suivant :

 b1 : Bleu, b2 : Vert, b3 : Rouge


 b4 : Red Edge 1, b5 : Red Edge 2, b6 : Red Edge 3
 b7 : PIR, b8 : PIR alternatif
 b9 : MIR (Moyen Infrarouge) 1, b10 : MIR 2
2.4 Extraction d’indices radiométriques
 Sur cette base, nous pouvons dériver aisément les expressions BandMathX
pour les trois indices radiométriques présentés précédemment. L’indice de
brillance (BRI) est ici simplifié, n’utilisant que les 4 bandes à 10m :

 NDVI : (im1b7 - im1b3) / (im1b7 + im1b3)


 NDWI : (im1b2 - im1b7) / (im1b2 + im1b7)
 BRI : sqrt(pow(im1b1, 2) + pow(im1b2, 2) + pow(im1b3, 2) + pow(im1b7, 2))

 Réalisons donc, à partir de notre stack multidate à l’issue du gap filling, le


calcul des trois indices pour la première image de la série temporelle
(bandes de 1 à 10), en une seule image de sortie, avec BandMathX :
2.4 Extraction d’indices radiométriques
 Visualisons donc en QGIS l’image d’indices radiométriques produite par
cette opération pour la première date de la série, bande par bande :

NDVI 01/03/2016 NDWI 01/03/2016 BRI 01/03/2016

 Remarque : les indices de type « différence normalisée » tels que le NDVI et


NDWI sont à valeurs entre -1 et 1, d’où le codage pixel au type float. Pour
réduire la taille des fichier, un choix typique est de multiplier ces indices
par un large entier (ex. 1000) et utiliser un type entier signé:

 Ex. NDVI : 1000 * (im1b7 – im1b3) / (im1b7 + im1b3)  codage int16


2.4 Extraction d’indices radiométriques
 Exercice 2.4.1 : à l’aide du BandMathX, effectuez le calcul de ces trois
indices radiométriques sur les autres 4 dates de la série issue du gap filling
en utilisant la stratégie de la conversion en entier (conseil : chaque date
étant composé de 10 réflectances, les bandes de la date 2 sont celles qui
commencent à la bande 11, date 3 à la bande 21 etc.). Ensuite, utilisez
ConcatenateImages pour produire le stack final de classification
(réflectances + indices de toutes les dates).

 Exercice 2.4.1 bis (facultatif) : en une seule utilisation du BandMathX,


essayez de construire une seule (longue!) expression permettant de
concaténer réflectances et indices, dans l’ordre suivant :

 Réflectances date 1 , Indices date 1 , Réflectances date 2 , Indices date 2 , …

 Conseil 1 : une expression BandMathX de type imXbY, sans aucune opération


mathématique, permet de recopier une bande de l’entrée.
Ex. : { im1b1 ; im1b2 ; … ; im1b10 ; 1000 * (im1b7 – im1b3) / (im1b7 + im1b3) ; … }
 Conseil 2 : l’expression étant longue, composez-la dans un éditeur de texte, et
ensuite copiez-la dans le champs « Expression » du BandMathX.
2.5 Traitement données de référence
 À ce point des travaux, nous avons réalisé tous les traitements sur les
images Sentinel-2 pour générer un jeu de données prêt à la classification
par des méthodes d’apprentissage automatique.

 Cette étape sera dédiée donc à la donnée de référence que, comme


présenté auparavant, consiste en une coouche SIG contenant des polygones
attribués avec des classes d’occupation du sol.

 Dans une démarche de classification automatique supervisée comme celle


présentée ici, ces informations sont nécessaires pour :

 Fournir aux modèles de classification des exemples annotés (apprentissage)


 Evaluer le résultat d’une classification automatique (validation)

 Une règle fondamentale dans cette démarche consiste à séparer les


surfaces qui seront utilisées dans ces deux phases en deux jeux de données
disjoints, afin de ne pas biaiser l’évaluation en donnant aux classifieurs des
données à classer qu’ils ont déjà « connus ».
2.5 Traitement données de référence
 Nous allons donc séparer la base de donnée fournie en 2 parties, les jeux
d’apprentissage et validation, en utilisant QGIS et son outil de sélection
aléatoire parmi des sous-ensemble.

 Premièrement, ouvrez dans QGIS la couche vectorielle fournie et affichez sa


table attributaire pour prendre connaissance de ces champs :
 2.5_ReferenceData\BD_GARD_2016.shp (fournie avec fiche de style)
2.5 Traitement données de référence
 Deux champs sont présents dans la base de données :

 Le champ Class, contenant l’identifiant numérique de la classe d’OcSol


 Le champ ClassName, contenant sa désignation en chaîne de caractères

 Grace au plugin Group Stats de QGIS (voir dans les extensions), il est
également possible d’analyser les statistiques de la couche. Ci-dessous, le
nombre de polygones ainsi que la surface couverte par chaque classe.
2.5 Traitement données de référence
 Ouvrons donc l’outil de sélection aléatoire parmi des sous-ensembles de
QGIS (dans Vecteur  Outils de recherche).

 Afin d’effectuer une sélection de 70% des polygones qui seront utilisés
pour l’apprentissage (le restant 30% sera réservé pour la validation),
saisissez le paramétrage suivant :
2.5 Traitement données de référence

 Exécutez la sélection, puis exportez


les entités sélectionnées dans un
nouveau fichier pour extraire le jeu
d’apprentissage (ex. train.shp)

 Assurez vous d’être sur la couche


BD_GARD_2016 et inversez ensuite
la sélection des entités comme
l’illustration ci-contre, et répétez
l’export des entités sélectionnées
pour extraire le jeu de validation
complémentaire (ex. valid.shp)
2.6 Apprentissage d’un classifieur
 Tout est enfin prêt pour lancer notre premier apprentissage automatique à
l’aide des algorithmes de machine learning disponibles dans l’OTB.
 Une première manipulation préconisée est le calcul des statistiques du
stack de classification (moyenne et écart type par canal) issu de l’étape 2.4.

 Ces informations seront utilisés pour effectuer une standardisation des


données en entrée au classifieur, utile pour certaines algorithmes qui sont
sensibles à la dynamique des données.
 L’utilisation de l’application ComputeImagesStatistics prévue à cet effet est
très simple, il suffit d’indiquer le stack de classification et un fichier de
sortie au format xml, comme dans l’image qui suit (à gauche, un aperçu du
fichier xml produit).
2.6 Apprentissage d’un classifieur
 Il est donc possible de réaliser l’apprentissage d’un modèle, pour lequel
l’OTB met à disposition l’application TrainImagesClassifier. Son paramétrage
se divise en trois « rubriques » principale. La première concerne les données.
 Tout d’abord les entrées, Input
Image List (le ou les stack de
classification) et Input Vector
Data List (la liste
correspondante de fichiers
vecteurs pour l’apprentissage)

 Validation Vector Data List


permet de saisir une couche de
validation, mais elle est pas
obligatoire.

 Input XML image statistics file


permet d’utiliser un fichier de
statistiques sur la liste de stack
en entrée.

 Output model contiendra le


modèle de classification.
2.6 Apprentissage d’un classifieur
 La deuxième rubrique concerne l’échantillonnage spatial des couches
vecteur pour l’apprentissage, afin de générer une « liste » de pixels annotés
(valeurs + classes) à partir des polygones d’apprentissage.
 Maximum training (resp. validation) sample size
per class : le nombre de pixels maximal à extraire
du stack de classification pour chaque classe dans
la phase d’apprentissage (resp. validation).

 Bound sample number by minimum : peut être 1


ou 0. S’il est fixé à 1, limite le nombre de pixels par
classe à ceux qui sont disponibles dans la classe
moins représenté dans la BD.

 Training and validation sample ratio : si une


validation « en ligne » est effectuée (par ex. si
l’entrée Validation Vector Data List est fournie),
établit le ratio entre pixels de
validation/apprentissage.

 Field containing the class integer… : le champ de


la table attributaire avec l’identifiant numérique
des classes.
2.6 Apprentissage d’un classifieur
 La troisième rubrique concerne le paramétrage proprement dit de
l’algorithme de classification, et change selon la méthode choisie. Ci-
dessous les paramètres pour le Random Forest (implémentation Shark).

 Maximum number of trees in the forest : définit


le nombre d’arbres maximal de décision qui seront
appris dans le processus. Une valeur élevée donne
plus de capacité de discrimination au modèle mais
augmente la complexité (et donc le temps) de
l’apprentissage.

 Min size of the node for a split : le nombre


d’échantillons devant être atteint pour arrêter la
croissance des arbres de décision. Une valeur
élevée réduit la profondeur des arbres, donc
potentiellement leurs capacité de discrimination,
mais une valeur petite augmente l’incertitude.

 Le fonctionnement du Random Forest étant


plutôt complexe, nous allons limiter le
paramétrage au seul nombre maximal d’arbres, ce
qui permet d’atteindre des performances proches
du maximum pour ce classifieur.
2.6 Apprentissage d’un classifieur
 Pour lancer l’apprentissage, voici le premier paramétrage proposé :

1
Stack de classification 2

XML des statistiques


Pas de validation « en ligne »
ID numérique
de classe
Modèle de sortie

3
4
2.6 Apprentissage d’un classifieur
 Si l’application a tourné correctement, le fichier du modèle de classification
doit avoir être produit.

 Vous pouvez également observer et faire défiler l’onglet « Log » de


l’application, qui montre les sorties à l’écran pendant l’exécution :

 Vous remarquerez également qu’une


évaluation a été faite pendant l’exécution, et
que des indicateurs sont fournis.

 Par rapport à notre paramétrage (le


Validation/Training Ratio égal à 0) Il s’agit du
résultat de l’application du modèle sur les
pixels utilisés pour l’apprentissage, donc ce
n’est pas une évaluation fiable.

 Ceci dit, ces indicateurs permettent au


moins de vérifier que rien d’aberrant s’est
produit pendant l’apprentissage.
2.7 Classification et évaluation
 Le fichier modèle généré par l’apprentissage contient l’ensemble des
paramètres permettant à l’algorithme d’effectuer des prédictions à partir
d’observations non annotées.

 L’application OTB qui permet d’appliquer le modèle appris à l’étape


précédente sur une image s’appelle ImageClassifier. Regardons donc son
interface ainsi que le paramétrage pour générer notre carte :
 Input Image est l’image à classer, dans
notre cas encore le stack de
classification produit à l’étape 2.4. Il
peut être accompagné d’un masque
(Input Mask) si seulement une partie
de l’image doit être classée.

 Model file est le fichier modèle


généré à l’étape 2.6, Statistics file celui
qui contient les statistiques globales du
stack de classification.

 Output Image contiendra le raster


final de classification (codé en uint 8
car le nombre de classes est < 256).
2.7 Classification et évaluation
 Ouvrez donc le résultat dans QGIS, et assignez à la couche le style fourni :
 2.7_Classification/GARD_Classif_Style.qml
2.7 Classification et évaluation
 L’évaluation visuelle de la carte, qui reste tout de même une bonne
pratique, n’est pas suffisante à estimer la précision d’une carte.

 Une évaluation quantitative se fait en général au travers d’indicateurs


issus d’une matrice de confusion (MdC). Un petit rappel :

 Se calcule à partir du jeu de données de validation (valid.shp)


 Pour une classification d’images par pixel, la MdC contiendra, à la position (i,j),
les pixels de la classe i ayant été classé comme appartenant à la classe j
 Une bonne matrice de confusion aura ses plus grandes valeurs sur sa diagonale
(le nombre de pixels de validation « bien classées »).
 Plusieurs indicateurs se calculent à partir de la MdC :

 La précision globale (overall accuracy) : ratio #pixels bien classés / #pixels de validation
 La précision et le rappel : par classe, respectivement le ratio #pixels bien classées / #pixels de
validation pour la classe et le ratio #pixels bien classées / #pixels identifiés dans la classe
 Le F-score : indicateur de précision par classe (moyenne harmonique entre précision et rappel)
 Le Kappa de Cohen : indicateur statistique permettant d’estimer la fiabilité de la classification
2.7 Classification et évaluation
 L’application OTB permettant de calculer la matrice de confusion ainsi que
les indicateurs dérivés s’appelle ComputeConfusionMatrix. Voici les réglages
à effectuer pour évaluer la carte produite avec la référence valid.shp :
 Input Image est la classification (la
sortie de ImageClassifier).

 Matrix output contiendra la MdC en


format csv.

 Il est possible d’utiliser de références


raster ou vecteur. Dans notre cas, il s’agis
d’un fichier vecteur, que l’on fournit en
entrée (Input reference vector file) ainsi
que son champ contenant les identifiants
numériques de classe.

 Seule la matrice de confusion sera


mémorisée à la sortie, mais les
indicateurs par classe (precision, rappel,
F-score) et globaux (précision globale et
Kappa) seront affichés dans le « log ».
2.7 Classification et évaluation
 Exécutez l’application et observez ensuite les sorties dans l’onglet Log :
2.7 Classification et évaluation
 Quelques considérations sur la qualité de la carte produite…

 La précision globale est d’environ 75% (0.75, Kappa de ~0.68). Il s’agit d’un
« score » pas très élevé, mais améliorable si l’on considère que :

 Seulement une partie de la série temporelle a été utilisée pour simplicité


 La BD de référence est peu précise (mélange de sources sans validation par
photo-interprétation, pas de terrain)

 La classe « Surfaces cultivées » (cultures annuelles) est relativement bien


classée, mais beaucoup de confusion existe entre arboriculture, prairies et
vignes (parcelles RPG à vérifier, densité de la série insuffisante, …)

 Les classes non agricoles (fôret, zones urbaines et eau) qui n’ont pas une
temporalité très marquée sont aussi relativement bien classées.

 La configuration de l’apprentissage peut être améliorée, soit par une


stratégie d’échantillonnage plus exhaustive, soit par un paramétrage plus
approprié du Random Forest.
2.7 Classification et évaluation
 Exercice 2.7.1 : essayez de répéter la démarche de classification en
changeant la configuration de l’apprentissage. Vouz pouvez par exemple
augmenter le nombre de pixels maximal par classe (passer de 1000 à 2000
ou 5000), et également le nombre d’arbres maximal (de 100 à 200 ou 400)
pour le Random Forest. Les temps de calcul seront plus importants.
Comparez ainsi les résultats de cartographie obtenus (visuellement et par
indicateurs de précision issus de la matrice de confusion).

 Exercice 2.7.2 (facultatif) : observez la carte obtenue au premier pas. Vous


remarquerez probablement que l’autoroute qui traverse la scène (côtoyant
les zones urbaines) a été erronément classé en eau. Ceci est dû au fait que
cette route a une faible réflectance (comme l’eau et différemment des zones
urbaines), et qu’il n’y a pas de zones d’apprentissage spécifiques. Modifiez
la base de données pour en rajouter (par ex. dans la classe Zones Urbaines)
et répétez la démarche de classification.

Autoroute

Eau
2.8 Post-traitement de la carte
 Plusieurs interventions peuvent être effectuées sur la carte produite pour
pallier aux erreurs de classification, en particulier à ceux qui sont dûs à
l’approche de classification par pixels.

 En effet, cette stratégie produit des artefacts à cause de la variabilité


spatiale des classes, comme visible ci-dessous pour les zones urbaines :

 Plusieurs solution existent pour réduire ces effets et améliorer


ultérieurement la précision à partir du résultat de la classification :
 Régulatisation par approche à objet
 Filtrage morphologique de la carte
 …
2.8 Post-traitement de la carte
 Un filtrage morphologique consiste à réduire le bruit sur une image à
valeurs discrètes en supprimant les agglomérés de pixels trop petits et en
leur affectant la valeur de la classe majoritaire environnante.

 L’OTB dispose d’une application prévue réaliser ce type de filtrage sur une
carte thématique, nommée ClassificationMapRegularisation. Essayez donc
les paramétrages suivants pour produire une carte régularisée :
 Input classification image est la carte
à régulariser. La carte de sortie est à
indiquer dans Output regularized
image.

 Structuring element radius (in pixels)


est le rayon du « disque » qui sera
passé sur l’image. Lors qu’un petit
aggloméré de pixels tombera dans le
disque, il sera remplacé par la classe
majoritaire de ses environs.

 Consultez la documentation pour une


explication des autres paramètres.
2.8 Post-traitement de la carte
 Voici donc quelques détails du résultat de ce post-traitement. Vous
remarquerez des cartes plus lisses, mais également que beaucoup de
détails fins de la scène ont été supprimés.
2.8 Post-traitement de la carte

 Exercice 2.8.1 : à partir de la nouvelle carte régularisée, calculez les


indicateurs de précision avec ComputeConfusionMatrix pour en évaluer
quantitativement la qualité. Le résultat est-il meilleur que celui « brute »
issus de la classification? Evaluez l’impact sur la précision de la carte lors que
le rayon de régularisation change.
Fin des Travaux Pratiques

 L’exercice est terminé. Celles qui suivent sont des appendices à consulter
par ceux qui veulent aller plus loin. N’hésitez pas à consulter la
documentation de l’OTB pour avoir des précisions.
Appendice 1 : fichier batch
 Ci-dessous, un exemple de fichier en format batch de Windows (fourni)
permettant de réaliser l’intégralité de la démarche de classification (2.6 à
2.8) en utilisant les applications de l’OTB en ligne de commande.
Appendice 2 : classification à objet
 Composite Blue/Vert/Rouge/PIR sur une date « claire »
Appendice 2 : classification à objet
 Segmentation avec algorithme de Baatz & Schape (GenericRegionMerging)
Appendice 2 : classification à objet
 Vectorisation de la segmentation : Boîte à Outils QGIS  GDAL 
Conversion Raster  Polygoniser (Raster vers Vecteur)
Appendice 2 : classification à objet
 Création des échantillons d’apprentissage

 « Réparation » de la couche vectorielle de segmentation par application d’un


tampon avec distance égale à 0 : Vecteur  Outils de géotraitement  Tampon

 Intersection entre « train.shp » et la segmentation réparée : Vecteur  Outils


de géotraitement  Intersection
Appendice 2 : classification à objet
 Calcul des statistiques zonales avec OTB : ZonalStatistics
Appendice 2 : classification à objet
 Calcul des statistiques zonales avec OTB : ZonalStatistics
Appendice 2 : classification à objet
 Apprentissage à partir d’un vecteur : TrainVectorClassifier

Toutes les variables


« mean_* » sont
sélectionnées
Appendice 2 : classification à objet
 ZonalStatistics sur l’intégralité de la segmentation :
Appendice 2 : classification à objet
 Classification de la couche de segmentation : VectorClassifier

Si désactivé, la colonne « predicted » sera créée


dans le fichier vecteur d’entrée.
Appendice 2 : classification à objet
 Classification de la couche de segmentation : VectorClassifier
Appendice 2 : classification à objet
 Rastérisation du résultat : Rasterization
Appendice 2 : classification à objet
 Evaluation du résultat : matrice de confusion sur le résultat rastérisé.
Auteurs - Crédits
 Contenue élaboré par Raffaele GAETANO (CIRAD – UME TETIS)
 Publié en 2020, sous Licence Creative Commons CC BY SA

Ce module de formation

« COPERNICUS et Agriculture »

a été élaboré au sein de la Maison de la Télédétection (Montpellier)


par les UMR TETIS et Espace-DEV

L’ensemble de la formation est réalisé dans le cadre d’un marché d’AgroParisTech avec le CNES
(n° 5700003548 / DIA095).

L’opération a bénéficié d’un soutien financier de l’Union Européenne dans le cadre du FPA
« Caroline Herschel ».

Vous aimerez peut-être aussi