Académique Documents
Professionnel Documents
Culture Documents
Extraction de l’information
à partir des données de télédétection
Raffaele GAETANO
27-28 Novembre 2017
Travaux Pratiques:
Objectifs techniques:
- Effectuer la segmentation d’une image multi-spectrale à THRS
- Extraire les caractéristiques spectrales, de texture et de forme des objets d’une image
- Construire des cartes d’occupation du sol par classification à objet
SOMMAIRE
Dans cette première partie, nous allons tester le fonctionnement de deux techniques de segmentation différentes. Nous
partirons d’une image à très haute résolution spatiale, caractérisée par la présence de détails à l’échelle fine, dans
l’objectif de produire une partition en objets permettant l’extraction d’informations significatives.
Dans QGIS, les algorithmes de segmentation sont disponibles dans la boîte à outils de traitement, et sont fournis par
la librairie logicielle OTB. Néanmoins, l’approche à objet sous OTB étant actuellement en pleine phase de
développement, les techniques actuellement disponibles sont relativement moins performantes que celles mises à
disposition dans des logiciels payants, tels que la suite eCognition Developer. Heureusement, la nature ouverte de
QGIS permet facilement l’intégration de nouveaux algorithmes de traitement, ce qui nous permettra de tester aussi
d’autres techniques que nous avons portées sous QGIS à partir de code source ouvert.
En particulier, nous allons essayer :
la technique de segmentation Mean-Shift, implémentée dans la boîte à outils Orfeo ;
la technique nommée segmentation Baatz-Shaepe basée sur le même algorithme de segmentation multi-
résolution disponible dans eCognition.
Remarque : les données et les démarches présentées dans ce TP font référence aux tutoriels disponibles sur le site du
logiciel Exelis ENVI à l’adresse http://www.exelisvis.com/Learn/Resources/Tutorials.aspx
Charger une couche raster Copier sur votre espace personnel l’image :
Hobart_GeoEye_pansharp.dat
et son fichier d’entête Hobart_GeoEye_pansharp.hdr
QUESTION 1 a) Décrivez la scène capturée par l’image : quel est le milieu ? Quelles sont
ses caractéristiques (artificialisation, végetation, surfaces en eau, etc.) ?
b) Quelles informations peuvent être d’intêret ? Y a-t-il une échelle
d’observation unique à laquelle elle peuvent être extraites ?
Configuration de la Les objets générés par cette étape de segmentation seront ensuite caractérisés par
segmentation Mean-Shift un ensemble hétérogène de descripteurs (spectraux, de texture et de forme).
L’objectif est donc de trouver un compromis sur leur taille, qui doit être ni trop petite
(pour permettre la préservation des formes et le calcul d’indices texturaux) ni trop
grande (pour garder intacts les détails fins de l’image).
La technique Mean-Shift peut être lancée à partir de la boîte à outils de traitement :
La sortie de l’algorithme est une couche vectorielle (une géométrie par objet), ayant
un seul champ (index d’objet, « DN » dans l’exemple).
Laissez pour le moment sans changements les paramètres Spatial et Range radius,
et changez Maximum number of iterations à 10. Choisissez un fichier en sortie et
lancez le traitement. Ça peut être un peu long…
Evaluation de la Vous avez obtenu votre première segmentation. Pour permettre une évaluation
segmentation subjective de la qualité de la segmentation, il convient de changer le style de la
couche pour n’afficher que les contours des objets (remplissage transparent):
Vous pouvez désormais à la fois avoir une vue d’ensemble sur la segmentation et
zoomer pour en apprécier les détails.
QUESTION 2 a) Regardez les objets qui ont été produits. Ont-ils une taille
comparable ? Que se passe-t-il dans les zones avec plus de détails à
l’échelle fine ? et dans les zones homogènes ?
b) Quelle est la cohérence spectrale et texturale de chaque objet ? Les
caractéristiques de forme sont-elles bien préservées ?
c) Essayez de lancer l’algorithme en modifiant (légèrement) les 2
paramètres « radius », ainsi que le minimum region size. Trouvez-vous
une « meilleure » segmentation ?
Scale parameter (paramètre d’échelle) : il permet de fixer une limite « abstraite » (pas d’unité de mesure) qui
détermine l’hétérogénéité maximale permise des objets produits par la segmentation. Les objets résultant d’un
même paramètre d’échelle seront plus petits pour des données hétérogènes et plus grands pour des données
homogènes. Pour la même image la modification de ce paramètre modifie la taille des objets produits par la
segmentation.
Deux paramètres concourant à la définition du critère d’homogénéité auquel le paramètre d’échelle se refère:
o Shape (forme vs. « couleur ») : il est possible de choisir de donner plus ou moins d’importance à la
couleur ou à la forme de l’objet. Une valeur égale à 0 impliquera que les objets seront optimisés ex-
clusivement par leur homogénéité spectrale.
o Compactness (compacité vs. sinuosité) : il est possible de favoriser la création d’objets compacts,
sachant que, à parité de surface entre deux objets, celui avec le plus court périmètre est le plus com-
pact (dans l’idéal, un cercle est la forme plus compacte possible). Une valeur égale à 0 donnera lieu à
des objets de forme plus sinueuse.
Figure 1
Comme précisé auparavant, cette technique de segmentation, pourtant faisant actuellement l’état de l’art dans les appli-
cations d’analyse d’image orientée objet, n’est pas disponible dans la boîte à outils de traitement « de base » de QGIS.
Toutefois, elle est disponible dans l’Orfeo Toolbox en tant que « module à distance » et accessible par ligne de com-
mande ou via l’interface graphique dédiée.
Configuration de la segmentation Il est donc possible de lancer une segmentation par la technique de Baatz et
Baatz-Shaepe Shaepe disponible parmi les applications OTB. Double-cliquez sur le fichier
otbgui_GenericRegionMerging, la fenêtre suivante s’affiche :
Le paramètre d’échelle est ici défini par la variable Threshold for the criterion
(le critère sélectionné doit être Baatz & Schape comme dans la figure). Le
paramètre de forme est ici saisi en jouant sous la variable d’ « homogénéité
spectrale » (weight for spectral homogeneity - CW) qui définit le poids à
donner à la radiométrie contrairement à la syntaxe eCognition. Sa valeur doit
donc être inversée par rapport au paramètre de forme (1 – Shape). Le
paramètre de Compactness est par contre équivalent au poids
d’homogénéité spatiale (weight for spatial homogeneity – SW).
Dans un premier temps, nous allons tester des réglages « extrêmes » pour cette
technique, afin de mieux saisir son comportement vis-à-vis des paramètres.
Essayons tout d’abord de lancer une segmentation à échelle fine prenant en
compte exclusivement les caractéristiques spectrales de l’image :
Comme annoncé précédemment, le fichier de sortie est un raster, qui doit donc
être vectorisé pour les étapes suivantes de l’analyse. Pour cela, chercher dans
la boîte à outils de traitement de QGIS l’outil « Vectorisation » de GDAL :
spectrale des pixels on obtiendrait forcément un objet unique pour toute l’image.
On choisira donc la valeur 0.1. Quant à la Compactness, nous allons essayer
également les 2 valeurs « extrèmes » 0.1 et 0.9.
Des détails sont affiché ensuite :
Calcul de statistiques de zone Un premier élément d’expertise à utiliser concerne le fait que le goudron a une
réponse spectrale très faible dans la bande de proche-infrarouge. En
utilisant les propriétés de la couche raster, affichez donc l’image en niveaux de
gris en utilisant seulement la bande 4 :
En effet on constate que les routes (et les parkings !) sont effectivement très
« sombres » dans cette bande. En suivant l’approche à objet, nous souhaitons
dériver une valeur de cette bande pour caractériser chaque objet de notre
segmentation, de manière à pouvoir effectuer une première discrimination.
L’outil de statistiques de zone de QGIS nous vient en aide :
Seuillage de la couche vectorielle Une fois calculées les moyennes par objet en bande PIR, vous pouvez
appliquer la première règle, sous forme d’un seuillage sur la colonne PIR_mean
de votre segmentation :
…QUESTION 4a… a) À l’aide du Value Tool, explorez l’image (bande PIR) et essayer de
déterminer un seuil minimum qui permet de sélectionner TOUTES les
routes.
Seuillage de la couche vectorielle Une fois le seuil déterminé, vous pouvez sélectionner les objets vérifiant la
condition susmentionnée directement à partir de la table attributaire en cliquant
sur :
Calcul de descripteurs de forme Dans QGIS, le calcul des descripteurs de forme les plus simples (surface,
longueur, périmètre) est possible facilement à partir de la table attributaire. La
calculatrice de champ permet également de construire des colonnes
supplémentaires contenant les valeurs de ces descripteurs.
Dans le cas montré en figure, en cliquant sur OK une nouvelle colonne, intitulé
« Area », sera rajouté à la table, contenant la mesure de la surface de chaque
objet. Le calcul de formules encluant plusiers descripteurs est également
possible : vous pouvez par exemple calculer l’élongation en écrivant
$perimeter / $area
Descripteurs de forme SAGA L’élongation est une mesure facile à calculer, mais peu précise sur des objets
de petite taille car pour ces derniers, même quand ils sont compacts, le rapport
entre le périmètre et la surface se réduit.
Dans QGIS, d’autres fonctions sont disponibles pour le calcul des
caractéristiques de forme. Une fonction plutôt pratique est disponible dans la
boite à outils de traitement, fournie par SAGA :
Les indices texturaux disponibles sous OTB sont ceux de Haralick. Pour les plus curieux, ils se basent sur les matrices
de cooccurrence en niveaux de gris, c’est-à-dire des matrices ayant comme élément g(i,j) le nombre de « couples » de
pixels voisins ayant respectivement valeur i et j. A partir de cette matrice, il est possible de calculer une série
d’indices pixélaires, montrés dans le tableau suivant.
Calcul des indices texturaux de La fonction pour le calcul des indices texturaux de Haralick est disponible
Haralick dans la boite à outils de traitement (Feature Extraction Haralick Texture
Extraction). La fenetre suivante s’affiche :
Lors qu’on calcule les indices avec les paramètres par défaut en utilisant la
bande proche-infrarouge, nous retrouvons une image multibande où chaque
bande correspond à un indice différent. Il convient donc de les afficher un à la
fois. Le contraste (bande 5) est montré dans la figure suivante :
Opérations préliminaires Nous allons donc effectuer la classification de l’image qb_colorado.dat que
vous pouvez récupérer également de notre espace commun. En particulier, il
est demandé de trouver l’occupation du sol par rapport à 4 classes d’intérêt :
bâtiments, routes, végétation et sol nu. Le point de départ de ce procédé est
évidemment la segmentation, que vous êtes invités à réaliser vous-mêmes
avec la méthode que vous considérez plus appropriée.
les objet routes ont une « couleur » uniforme et une forme allongée,
les objets batiments ont une petite taille et une forme compacte,
la végétation présente une texture particulièrement variable,
Création de la vérité terrain Il s’agit pour cela de reconnaitre des objets en tant qu’échantillons des
différentes classes de l’image et les étiqueter. Pour cela, affichez tout d’abord
l’image ainsi que la segmentation (bordures + remplissage transparent).
Ensuite, à l’aide de l’outil de sélection sélectionnez un objet que vous
reconnaissez comme appartenant à l’une des classes, comme pour l’immeuble
de la figure suivante :
Afin de pouvoir indiquer une classe d’appartenance pour chaque objet, créez
une nouvelle colonne de type entier, nommée Class, qui contiendra un
identifiant de classe (1 – bâtiments, 2 – routes, 3 – végétation, 4 – sol nu).
Pour cela, cliquez sur pour rentrer en mode édition, puis sur :
Afin de pouvoir utiliser la vérité terrain pour classifier l’image, vous devez tout
d’abord extraire les lignes labélisées dans une nouvelle couche. Pour cela,
sélectionnez toutes les lignes de la table attributaire avec une valeur non nulle
dans la colonne Class (touche puis insérer l’expression Class > 0 et cliquez
sur ). Revenez sur la table attributaire et vérifiez que les lignes sont
correctement sélectionnées. Vous pouvez désormais sauvegarder la couche
vectorielle dans un nouveau shapefile, en faisant attention à cocher la case
N’enregistrer que les entités sélectionnées :
Classification pixélaire et Pour cette démarche, l’approche à objet est utile car elle permet :
projection à majorité sur la couche
objet de construire la vérité terrain sur base objets (comme l’on a vu)
d’améliorer une classification pixélaire en effectuant une analyse a
posteriori avec la couche objet
Il est temps d’exploiter la couche objet pour améliorer cette classification. L’idée
est de mesurer, pour chaque objet, quelle est l’étiquette la plus présente à
partir de la classification pixélaire. Pour cela, on utilise encore une fois les
statistiques de zone :
Préparation du jeu de données Dans cette dernière partie, nous allons réaliser une classification à objet au sens
propre, c’est-à-dire à partir d’une couche de segmentation au format
vectoriel où chaque objet est caractérisé par des attributs (statistiques de zone,
indices de forme, etc.) pouvant être utilisés pour leur discrimination. Pour cela,
l’OTB met depuis récemment à disposition des applications que nous allons
utiliser par la suite.
Apprentissage à partir d’une Les applications de l’OTB sont mises à disposition des utilisateurs avec une
couche vectorielle interface graphique propre, indépendante de QGIS. Pour les retrouver, il est
nécessaire de se rendre dans le dossier où l’OTB est installé, que vous pouvez
facilement retrouver à partir des options de la boite à outils de traitement :
Cette application effectue le calcul des statistiques (moyenne et écart type) pour
tous les objets de la segmentation et pour chaque attribut d’intérêt pour la
classification (b1mean à b4mean dans notre cas). Ce pas, qu’on aurait du
faire également lors de la classification pixélaire (voir 3.2), permet une meilleur
calibration de l’apprentissage. Lancez en cliquant sur « Executer », une fois
terminé, le fichier .xml contenant les statistiques sera produit et vous pouvez
fermer la fenêtre.
Classification de la couche de Il ne reste qu’à appliquer le modèle de classificateur produit par l’apprentissage
segmentation à l’ensemble des objets de la scène, pour cela démarrez la fonction
otbgui_OGRLayerClassifier :
Encore une fois, comme pour le cas d’une classification pixélaire, il est
demandé de renseigner la couche vectorielle à classer, ses statistiques (les
mêmes que pour l’apprentissage), le modèle SVM produit au pas précédent, les
attributs d’intérêt (toujours les mêmes) et le nom du champ avec le résultat de
la classification (qui sera généré directement dans le shapefile d’entrée).