Skip to content
Introduction to Remote Sensing for M2 Sigma
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
_images
.gitignore
README.md
lesson.pdf

README.md

Introduction à la télédétection

Photographie de Paris par Nadar

[TOC]

Planning prévisionnel

Ordre Date Horaire Thème
1 Mer. 18/09/2019 13h30/17h30 Théorie et découverte à partir de sentinel-hub
2 Ven. 20/09/2019 13h30/16h30 Traitements simples dans Qgis et OTB à partir d’une image Sentinel-2 de taille réduite.
3 Lun. 23/09/2019 13h30/17h30 Connaitre, choisir puis générer un indice spectral
4 Ven. 27/09/2019 8h/12h Apprentissage automatique avec OTB et Dzetsaka
5 Ven. 27/09/2019 13h30/16h30 DHI (Dynamic Habitat Index)
6 Ven. 04/10/2019 13h30/16h30 PARTIEL

Cours 1

Théorie

La théorie [cf fichier lesson.pdf] vous sera directement présentée.

Sentinel-Playground

La télédétection ça se passe de plus en plus en ligne.

Après une partie théorique, vous allez pouvoir maintenant manier un outil et découvrir la télédétection à travers l'application en ligne Sentinel-Hub Playground https://www.sentinel-hub.com/explore/sentinel-playground. Sentinel Playground permet, à la manière de Google Maps/Earth, de voir les images du monde entier mais cette fois-ci en choisissant la date qui vous intéresse grâce aux deux satellites européens Sentinel-2.

Différencier les feuillus des résineux dans cette zone

Pour vous familiariser avec l'outil, je vous propose d'essayer de faire apparaître au mieux les feuillus des résineux dans la forêt de Montech : tiny.cc/jeufeuillusresineux.

Vous pouvez bien entendu changer :

  • de date (printemps, automne, été, hiver ?),
  • de bande spectrale (bleu, vert, rouge, infra-rouge…),
  • d'affichage d'indices/de couleurs (en remplaçant le rouge par l'infra-rouge par exemple)

À noter que l'utilisation avancée de Sentinel-Playground permet de calculer des indices avec plusieurs dates, comme pour calculer la couverture neigeuse mensuelle.

EO Browser

Sentinel-hub permet de consulter facilement des données Sentinel-1 et 2 mais aussi Landsat. Notez qu'un autre outil, EO Browser très proche de Sentinel-hub et développé par la même entreprise permet :

  • de générer des images animées
  • d'avoir l'évolution temporelle des pixels/de polygones sur une période donnée

Aperçu d'une série temporelle au sud de Madagascar

Google Earth Engine

Il ne sera pas étudié pendant ce cours l'outil de Google nommé Google Earth Engine (GEE), cependant, il est important de le connaitre un minimum.

À partir d'une console javascript, vous pouvez directement intérargir avec les images satellites stockées chez Google, plus besoin de télécharger les images, et de puissants processeurs pour calculer des indices, des algorithmes... Cependant, si aujourd'hui GEE est gratuit, il est fort à parier que son coût de fonctionnement devrait être assez élevé.

Un exmeple parlant de synthèse annuel de Bélize avec en prime le code disponible : https://code.earthengine.google.com/a0a9d861025b03e28a82677c3dc305d5

Afin de connaitre le potentiel de GEE sans y passer trop de temps, je vous propose de regarder la liste gérée par Philippe Gärtner qui recense les nombreux scripts GEE.

Pour vous inscrire et essayer GEE, ça se passe sur https://code.earthengine.google.com.


Cours 2

Objectif du cours :

  1. Apprendre à visualiser une image et ses bandes (créer un raster contenant les bandes S2)
  2. Créer des compositions colorées dans QGIS
  3. Générer un indice spectral (NDVI ou NDWI)
  4. Segmenter une image selon un seuil (à partir du NDVI par exemple)

Les logiciels utilisés

  • QGIS pour visualiser et faire des traitements simples,
  • OTB pour des traitements plus complexes ou plus facilement reproductions (en mode cli, c'est-à-dire en ligne de commande, ou gui, c'est-à-dire à travers une interface graphique).

Pré-requis

Comme OTB dorénavant un plugin QGIS depuis la version 3, veuillez suivre la page dédiée à son installation. Si vous utilisez votre propre ordinateur, vous devrez tout d'abord installer OrfeoToolBox avant son plugin.

Pour ajouter le dépôt OTB dans QGIS, ajouter cette adresse dans Extensions / Installer / Paramètres puis cliquer sur ajouter et coller l'adresse suivante : http://orfeo-toolbox.org/qgis/plugins.xml.

Après avoir installé le plugin OTB, cliquez sur la clé Options dans la boite à outils de traitements, puis dans Fournisseurs de traitements> OTB mettez ces informations si vous êtes sous Windows :

  • OTB application folder : C:/OTB-6.6.1-Win64/lib/otb/applications
  • OTB folder : C:/OTB-6.6.1-Win64

Si vous êtes sous Linux :

  • OTB application folder : \usr\local\OTB-6.6.1-Win64\lib\otb\applications
  • OTB folder : \usr\local\OTB-6.6.1-Win64

Image Sentinel-2

Aperçu de l'image Sentinel-2

Comme les images Sentinel-2 sont relativement lourdes (~2go), je vous ai réduis l'emprise de l'acquisiton, compressé l'image, et j'ai supprimé quelques fichiers (la luminance ou les fichiers de reflectance de surface).

L'acquisition est disponible au format zip : http://karasiak.net/data/students/SENTINEL2A_20190516-105902-454_L2A_T31TCJ_C_V2-1.zip.

Répondez aux questions suivantes en vous aidant du fichier des métadonnées contenu dans le dossier de l'image (il s'agit du fichier xml) :

  • Qui a produit cette image ?
  • Quel est le pourcentage de nuages dans l'image ?
  • À quelle heure à été faite la prise de vue ?
  • Quel est le niveau de correction (1A, 1C, 2A) ? Et que cela signifie-t-il ?
  • A-t-on un masque des nuages ?

Une date, des images

Comme vous avez pu le voir, pour chaque acquisition vous avez donc de multiples fichiers.

Afin de visualiser les images une par une, il est recommandé de construire un raster virtuel. Vous pourrez ainsi combiner plusieurs images entre elles, et de résolutions différentes ! Pour ce faire, recherchez dans la boite à outils de traitements de Qgis Construire un raster virtuel.

Puis, toujours dans QGIS, visualisez l'image Sentinel-2 fournie avec respectivement :

  • une composition RGB,
  • une composition infra-rouge couleur (c'est-dire que l'infra-rouge sera mis dans le canal du rouge)
  • une composition colorée SWIR (c'est-à-dire, le rouge dans le canal bleu, la bande 8A dans le vert, et la bande 12 dans le canal rouge) qui mélange à la fois des bandes à 10m de résolution spatiale et des bandes à 20m.

Pour savoir à quelle partie du spectre est rattachée chaque bande Sentinel-2, consultez la page dédiée de l'ESA.

Calcul du NDVI

Le NDVI (Normalized Difference Vegetation Ratio) est un indice spectral qui se calcule à partir de la bande rouge et infrarouge. Il caracterise l'activité de la végétation. Sa formule est la suivante :

NDVI = ((NIR - R)/(NIR + R))

Cet indice génère des valeurs entre -1 à 1, où les valeurs supérieures à 0.5 correspondent à la végétation très active et avec un fort taux de couverture (forêt, et agriculture).

Pour économiser de l'espace disque, il est d'usage de multiplier par 100 le NDVI afin d'avoir des valeurs entières situées entre -100 et 100. Dans ce cas, vous devez choisir un format entier pour votre GeoTiff :

Nom Type Valeur min Valeur max
Byte Entier 0 255
Int16 Entier -32768 32767
Uint16 Entier 0 65535
Int32 Entier -2147483648 2147483647
Uint32 Entier 0 4294967295
Float16 Flottant -65504.00 65504.00

Afin de bien vous familiariser avec les outils, je vous conseille d'apprendre à calculer le NDVI à partir :

  • des deux images (l'image de la bande rouge et celle de l'infrarouge) ,
  • du raster virtuel généré précédemment.

À partir d'otb BandMath CLI (mode geek)

Dans le terminal de commandes (Ctrl+T sous ubuntu) ou cherchez terminal dans le barre de recherche, puis tapez : otbcli_BandMath -help

Il vous faudra remplir les arguments suivants :

  • -il avec le nom de votre image
  • -out avec le nom de l'image que vous voulez enregistrer (i.e. ndvi.tif par exemple), suivant du format comme vu ci-dessus.
  • -exp l'expression permettant de calculer le NDVI. im1b1 signifie par exemple la bande 1 dans l'image 1. im1b3 signifie la bande 3 de l'image 1, im2b1 signifie la bande 1 dans l'image 2.

Par exemple la ligne de commande pourra être : otbcli_BandMath -il monImage.vrt -out ndvi.tif int16 -exp '(im1b2-im1b1) / (im1b2 + im1b1) * 100'

À partir d'otb BandMath GUI (mode petit geek)

Une interface OTB est disponible dans QGIS, il vous suffit alors de recherche BandMath dans la boîte à outils de traitements. L'expression sera la même que celle précédemment trouvée.

À partir de la calculatrice raster (mode utilisateur SIG)

La dernière méthode consiste à utiliser la calculatrice raster présente dans QGIS afin de calculer le NDVI.

Comme pour construire un raster virtuel, placez vous dans la boîte à outils de traitements et tapez Raster calculator.

Vous pourrez alors calculez un indice (soit à partir d'une image de plusieurs bandes soit de plusieurs images d'une bande) en tapant la formule du NDVI. Il est très probable que le NDVI soit déjà dans les expressions enregistrés dans l'outil Raster calculator, dans ce cas essayez avec et sans l'expression.

Visualisation du NDVI

Visualiser maintenant les 3 NDVI obtenus et répondez à ces questions :

  • Quelle méthode préférez-vous ? Pourquoi ?
  • Trouvez-vous des différences de résultats selon la méthode ? Si oui, pourquoi ? Si non, pourquoi pas ?
  • Trouvez-vous des différences de taille de fichier ?
  • Selon vous, quel avantage y-a-t-il à utiliser l'interface en ligne de commande ?

Cours 3

Maintenant que vous êtes familiarisé la notion d'indice spectral et comment en calculer, allons plus loin !

Retrouver pour chaque indice spectral la bande Sentinel-2 correspondante puis générer l'indice.

Liste des indices à calculer

Nom Nom détaillé Formule
Vegetation
NDVI Normalised Difference Vegetation Index (NIR - Rouge) / (NIR + Rouge)
EVI Enhanced Vegetation Indices ( 2.5 * ( NIR - Rouge ) ) / ( (NIR + 6 * Rouge - 7.5 * Bleu ) + 1 )
LChloC Leaf Chlorophyll Content B7 / B5*
NDBR Normalized Difference NIR/SWIR Normalized Burn Ratio (NIR - SWIR) / (NIR + SWIR)
Eau
NDWI ND Water Index (NIR - MIR) / (NIR + MIR)
Neige
NDSI Snow Index (Vert - MIR) / (Vert + MIR)

*Pour cet indice, la bande Sentinel-2 vous est directement communiquée.

Segmenter votre image

À partir d'un indice de votre choix, créer un seuil permettant de différencier différentes classes d'occupation de sol (eau/forêt/route/nuage).

Par exemple, à partir du NDVI, créez une nouvelle image avec plusieurs classes (1 = Forêt, 2 = non-forêt, 3 = Eau) par exemple.

Vous pouvez utiliser comme précédemment, soit BandMath, soit la calculatrice raster.

Nommez votre fichier OCS.tif et choisissez bien votre format (entier/flottant...).

Créer un modèle QGIS pour générer les indices

La boîte à outils de traitements vous permet de créer des modèles pour reproduire des traitements. Il est ainsi possible, en fournissant l'image du spectre rouge et celle du spectre infra-rouge de calculer immédiatement l'indice NDVI puis de segmenter votre image avec un seuil défini par vous ou par l'utilisateur du modèle.

Pour créer votre modèle, en haut à gauche de la boite à outils de traitements, cliquez sur le symboles paramètres (les trois roues dentées) et faites Créer un nouveau modèle.

L'objectif de votre modèle est de générer d'un coup les 6 indices listés précédement. À vous de choisir quel fonction vous allez utilisé (Raster calculator ou BandMath) et ce que vous demandez en entrée (un vrt de toutes les bandes, ou chaque bande séparemment).

Vous devez donc définir ce que vous avez besoin en entrée (une image ? un numéro de bande ? un nombre pour le seuil du ndvi ?), et ensuite un algorithme qui viendra utiliser ce que l'utilisateur a saisi en entrée.

Pour résumer :

  • Créer un modèle dans la boîte à outils de traitements QGIS,
  • Générer, à l'aide de votre modèle, les 6 indices spectraux au format geotiff avec un type int16,
  • Sur l'un des indices généré (toujours dans votre modèle), définissez un seuil que l'utilisateur pourra modifier afin de séparer la végétation de la non-végétation et enregistrez ce résultat sous le nom 'vegetation_map'.

Cours 4

L'apprentissage automatique, que vous connaissez peut-être plus sous le nom machine learning, consiste à apprendre à travers les statistiques un modèle qui pourra par la suite prédire des données qu'il n'aura pas utilisé pour l'apprentissage.

Dans notre cas, ce qui nous intéresse est l'utilisation des pixels comme données d'apprentissage pour pouvoir cartographier l'occupation du sol. Cependant, en plus des pixels, nous devons communiquer ce qu'on appelle un label, c'est-à-dire un identifiant unique pour chaque classe (forêt = 1, eau = 2, route = 3, etc...).

Créer des polygones d'entrainement

Pour chaque classe que vous aurez définies (eau, route, forêt, champ, sol nu...), créer au moins 3 polygones pour l'entrainement, et 3 polygones pour la validation (dans deux fichiers distincts), et ajouter un champ qui contiendra un identifiant unique par classe.

Par exemple, pour chaque polygone (une ligne = un polygone) :

Id Nom Classe
1 Forêt 1
2 Forêt 1
3 Eau 2

Pour rappel, pour créer un fichier vectoriel dans QGIS, Couche > Créer une couche > Nouvelle couche Geopackage.

  • Choisissez bien polygone comme type de géométrie

  • Ajouter un champ de type nombre entier qui contiendra les numéros de vos classes

Apprentissage avec Dzetsaka

Installer le plugin dzetsaka (disponible dans le dépôt des extensiosn de QGIS). Vous avez alors deux choix :

  • Apprendre un modèle à partir de la boîte à outils de traitements (Train algorithm). Une fois l'appentissage effectué, il faudra utiliser Predict model (classification map) pour prédire votre modèle.
  • Apprendre et prédire un modèle à partir de l'interface graphique (Extension > Dzetsaka > Classification dock). Le modèle appris via l'interface graphique sera directement prédit sur le raster d'entrainement.

Apprentissage avec OTB

Pour OrfeoToolBox, vous avez comme au cours précédant, le choix d'utiliser soit l'interface graphique dans QGIS, soit pour les plus geeks d'entre vous le terminal en ligne de commande.

Pour entrainer un modèle à partir d'une image, il faudra utiliser la fonction TrainImagesClassifier d'OTB.

Une fois le modèle appris, il faudra le fournir à la fonction ImageClassifier pour prédire une image.

Entrainer un modèle

Différents algorithmes existent, celui fourni par défaut par dzetsaka (voir après) et GMM, un modèle de mélanges gaussiens, codé en python par Mathieu Fauvel (ancien enseignant-chercheur à l'ENSAT et aujourd'hui chercheur au CESBIO).

Comme vu lors de la partie théorique (cours 1), Random Forest est très réputé et très performant, il convient à la plupart des problèmes.

Deux méthodes pour apprendre un modèle depuis QGIS :

  • OTB : avec trainImagesClassifier
  • Dzetsaka : avec Train algorithm ou directement depuis la fenêtre

Puis prédire une image :

  • OTB : Image Classifier
  • Dzetsaka : Predict model

Évaluer le modèle

Pour évaluer le modèle, il convient de garder de côté quelques polygones pour chaque classe. Ainsi, avec votre fichier de validation qui contient 3 polygones par classes on pourra vérifier si nos polygones sont bien prédits par le modèle appris précédemment.

  • Calculer la matrice de confusion à partir de computeConfusionMatrix d'OTB, puis calculer l'accord global (nombre de pixels bien prédits / nombre total de pixels bien et mal prédits)
  • D'autres indices peuvent être calculés à partir de la matrice de confusion comme le kappa ou le F1.

Exemple d'une matrice de confusion. Dans le cas ci-dessous, chaque ligne correspond à la réalité terrain (ligne 1, nombre de pixels donné de la classe 1), et chaque colonne correspond au nombre de pixels prédits de chaque classe (colonne 1, nombre de pixels prédits de la classe 1).

8 0 0
0 1 0
0 1 0

Pour calculer ces valeurs, vous pouvez vous aider de l'outil en ligne de Marco Vanetti.

Chaine de traitement

Il peut être intéressant d'utiliser les indices spectraux pour faire de l'apprentissage automatique.

Votre objectif est de créer une châine de traitement qui prend en entrée :

  • une image Sentinel-2 (et toutes ses bandes)

  • des parcelles d'entrainement

  • des parcelles de validation

La chaine devra ensuite :

  • génèrer les 6 indices vus dans le cours
  • apprendre un modèle pour chaque indice et pour l'image Sentinel-2
  • prédire un modèle pour chaque indice et pour l'image Sentinel-2
  • évaluer la qualité chaque modèle

Vous pouvez également comparer différents algorithmes de prédiction.

Les algortihmes

Quelques exemples interactifs des algorithmes utilisés :

SVM (Support Vecteur Machine)

Random Forest

K-Nearest Neighbors

Gaussian Mixture Models


Cours 6

Partiel

You can’t perform that action at this time.