Méthodologies de classification d'image sous GRASS : contextes d'utilisation des fonctions i.group, i.cluster, i.gensig, i.class, i.maxlik
Avant toute utilisation des fonctions de classifications, il faut au préalable avoir rassemblé ses images de télédétection dans un groupe (par exemple, images_Landsat) et spécifiquement les bandes sur lesquelles on souhaite procéder à la classification dans un sous-groupe (par exemple, Landsat_2002_infrarouge). La création du groupe et du sous-groupe se fait à travers la fonction i.group.
Par exemple :
i.group name=images_Landsat subgroup=Landsat_2002_infrarouge name=L_MIR, L_PIR
Classification non-supervisée : i.cluster+i.maxlik
Classification supervisée :
- i.gensig+i.maxlik (fourniture d'une carte d'apprentissage pré-classifiée en entrée)
- i.class+i.maxlik (mode interactif : construction des classes d'apprentissage par l'utilisateur)
Classification d'image non-supervisée (non-dirigée) : i.cluster
i.cluster group=images_Landsat subgroup=Landsat_2002_infrarouge sigfile=fichier_cluster_genere1 classes=7
Il convient de choisir le nombre de classes de façon judicieuse par rapport au contenu des images que l'on cherche à classifier :
- trop peu de classes et des éléments très disparates se trouveront réunis (par exemple, prairie et certains types de cultures)
- trop de classes et une même classe d'occupation du sol se verra scindée en plusieurs groupes (prairie exposée au soleil, et prairie en zone ombragée par exemple).
Il existe en outre d'autres paramétrages (optionnels) d'ajustement pour générer au mieux le fichier de signatures spectrales que va utiliser i.maxlike, notamment :
seed=mes_signatures_spectrales au cas où l'on disposerait d'un fichier de signatures spectrales pouvant servir de base au clustering.
En introduisant ce paramètre, la classification devient alors partiellement supervisée (généralement, dans le cas d'une classification partiellement supervisée, l'utilisateur construira ce fichier source lui-même à l'aide de la fonction i.class) : c'est un très bon moyen d'améliorer les résultats de la classification automatique (voir deuxième partie sur la classification supervisée).
convergence=75 qui est le pourcentage de convergence que doit atteindre le cluster, par défaut fixé à 98. Si les classes à séparer sont très distinctes (par exemple rizières et zones boisées), un taux de convergence élevé n'est pas un handicap car les classes vont arriver plus rapidement à se stabiliser ; en revanche, sur des zones notamment urbaines où les classes d'occupation du sol sont difficiles à distinguer, il peut être intéressant de descendre la valeur de ce paramètre auquel cas l'algorithme de clustering aura plus de mal à séparer et à stabiliser les classes et aura par conséquent besoin de davantage d'itérations pour atteindre un résultat optimal (voir ci-dessous).
iterations=50 qui est le nombre d'itérations que va faire l'algorithme de clustering pour trier les classes - par défaut fixé à 30. Le laisser travailler plus longtemps sur un plus grand nombre d'itérations peut se révéler bénéfique. Attention : la convergence n'étant jamais complètement atteinte, même au bout d'un grand nombre d'itérations, point n'est besoin de lui fixer non plus une valeur astronomique ; il prendrait davantage de temps à s'exécuter sans pour autant obtenir aucune amélioration probante.
separation=1.0 par défaut 0.0, correspond à la différenciation entre chaque classe spectrale. De même que précédemment pour la convergence, ou lors du choix du seuillage en x nombre de classes, si l'on souhaite que les classes obtenues soient bien distinctes sur le plan spectrale ; il faut laisser l'algorithme faire davantage d'itérations (voir ci-dessus)
min_size=200 nombre minimal de pixels dans une classe, par défaut fixé à 17. Le fait de porter ce paramètre à un chiffre plus élevé permet d'éviter de trouver des "classes orphelines", c'est-à-dire contenant peu de pixels, mais très distincts sur le plan spectral pour le clustering.
sample=200,200 taille de la fenêtre d'échantillonnage (par défaut, fenêtre de 100 pixels sur 100 pixels). (Attention : le fait d'agrandir la fenêtre d'échantillonnage a également pour effet de ralentir le travail de l'algorithme. Ainsi, si vous dépassez les capacités mémoire de votre PC (ou de votre serveur), GRASS retournera un message d'erreur).
file=rapport_clustering permet d'obtenir un rapport détaillé du résultat, notamment les statistiques de chaque classe, le nombre d'itérations nécessaires pour les distinguer et le taux de convergence atteint. Il est utile de s'appuyer sur les résultats de celui-ci afin de modifier les paramètres utilisés : si une ou plusieurs sont loin d'avoir atteint le taux de convergence, l'algorithme a évidemment besoin de davantage d'itérations, si les classes sont peu distinctes sur le plan spectral, il est peut-être préférable d'en distinguer moins ou d'augmenter la séparation entre elles.
Ne pas hésiter à exécuter à plusieurs reprises i.cluster en modifiant les paramètres mentionnés ci-dessus (en particulier classes, convergence et itérations) dans le but d'affiner le fichier de signatures spectrales (NB : changez le nom du fichier généré de signatures spectrales ainsi que du rapport à chaque nouvelle tentative afin d'avoir un panel de fichiers de signatures spectrales pour le passage de i.maxlik et de pouvoir ainsi comparer les résultats de vos paramétrages successifs sur la qualité de la classification).
Classification d'image supervisée (dirigée) à partir d'un raster d'apprentissage : i.gensig
Dans une classification supervisée, on ne laisse plus le soin à un algorithme de clustering de déterminer les classes et leur composition. On fournira en entrée à i.maxlik, un fichier de signatures spectrales généré soit par la fonction i.gensig soit par la fonction i.class.
L'utilisation d'i.gensig est réservée aux cas où vous disposez d'une image ayant déjà fait l'objet d'une classification, et que vous vouliez prendre celle-ci comme base afin de procéder à une nouvelle classification. C'est en particulier bien indiqué lorsque l'on travaille sur une mosaïque d'images d'une région ou encore sur des séries temporelles issues du même capteur sur la même zone.
Cela donne a minima une base de travail. Il est indispensable de revenir ensuite au cas par cas sur les dissimilarités entre les deux scènes : par exemple, acquisitions faites à deux saisons différentes qui peuvent changer la couverture végétale du tout au tout.
(Attention de ne pas fournir non plus n'importe quoi en entrée pour l'apprentissage, à défaut de la même scène, le fichier de signatures spectrales doit se montrer adapté au contexte de l'image, faute de quoi il prendra des algues pour des plantations de salades (et vice-versa) si les éléments en question possèdent la même signature spectrale).
Voici un exemple de passage de la commande :
Le raster_classifie contient les valeurs des différentes classes, à partir de celui-ci i.gensig va récupérer les valeurs spectrales dans les bandes originales (ici Landsat_2000_infrarouge). Le fichier_signatures_resultat mettra donc en correspondance la valeur spectrale du pixel dans les différentes bandes et la valeur de correspondance souhaitée dans le raster de classification.
Ce raster_classifie peut avoir différentes provenances : par exemple, avoir été généré par un logiciel de traitement d'images autre que GRASS (ou encore avoir été constitué par l'utilisateur au moyen de la fonction r.digit - dans ce cas précis, i.class se montre un peu plus adapté...).
Classification d'image supervisée (dirigée) à partir d'un apprentissage interactif : i.class
Dans le second cas de figure évoqué ci-dessus, l'utilisateur trouvera également pratique de pouvoir désigner les différentes classes de façon interactive à l'aide de la fonction i.class.
Contrairement aux algorithmes de clustering, l'oeil humain travaille généralement mieux à partir d'une image où les différentes bandes ont été fusionnées. Il est donc de bon goût de passer en argument de la fonction i.class sous l'option map le nom de l'image RVB. Comme d'habitude, on passera ensuite en argument le groupe et le sous-groupe d'images à classifier (ce dernier contenant les canaux R, V et B séparés).
La fonction i.class possède une interface graphique dédiée permettant à l'utilisateur de zoomer / dézoomer sur l'image, de tracer le contour d'une région d'apprentissage (zone homogène), d'analyser cette région (calcul d'un histogramme), de supprimer la région dessinée ou de revenir au contour d'une région précédente.
Lorsque l'on trace le contour d'une région d'apprentissage, il est plus spécialement recommandé :
- de choisir des régions d'apprentissage suffisamment étendues (c'est-à-dire pas une poignée de pixels qui se battent en duel...),
- ces régions d'apprentissage comporteront autant que possible des pixels de la même classe donnant des réponses spectrales différentes (par exemple, prairie sèche et prairie humide) afin que l'apprentissage soit aussi utile que possible,
- de se méfier des pixels en limite de deux zones d'occupation du sol, dont la réponse spectrale est mélée et qui ne doivent pas être inclus dans les régions d'apprentissage. Ces pixels mixtes sont d'autant plus nombreux que la résolution des images est faible et que les pixels couvrent une plus grande surface et ont des chances de comprendre des classes très diverses sur le plan spectral.
La valeur ajoutée déterminante de cette méthodologie est dans l'interprétation de l'image par l'opérateur humain. Une classification supervisée à partir de classes d'apprentissage fournies par un humain pourra ainsi donner de bien meilleurs résultats qu'une classification automatique pour autant que l'interprète ait une bonne connaissance de la vérité-terrain étudiée (reconnaître tel ou tel type de couvert végétal), et soit en mesure de bien définir les régions d'apprentissage pour l'algorithme de clustering et/ou l'algorithme de classification.
Algorithme de classification par maximum de ressemblance : i.maxlik
L'utilisation de la fonction suivante i.maxlik est beaucoup plus simple puisqu'elle applique la segmentation en classes sur le lot de bandes radiométriques du sous-groupe. (Par conséquent, si vous souhaitez améliorer votre classification, il faut toujours travailler en amont d'i.maxlik, au niveau du paramétrage d'i.cluster et/ou d'i.class puis passer en argument les différents fichiers de clustering que vous aurez généré dans l'option sigfile).
Ici, ma_classif2 contient le résultat de la classification, l'algorithme ayant attribué une valeur discrète à chaque cellule du raster résultant.
Même si elle n'est qu'optionnelle, il est chaudement conseillé d'utiliser le paramètre reject=confiance_classif2 qui attribue à ces mêmes pixels une valeur de confiance et permet d'évaluer la qualité de la classification des pixels en question.
Michael Shapiro recommande en particulier de réutiliser cette couche raster à l'intérieur de la fonction r.mask afin de mettre en évidence les pixels les plus "douteux" (il s'agira notamment des pixels à réponse spectrale mixte en bordure des régions d'apprentissage) et de masquer ceux qui au contraire ont été classifiés sans ambiguïté.
Site officiel : GRASS GIS
Commentaires
Poster un nouveau commentaire