L’accessibilité des drones et des moyens logiciels d’acquisition d’images aériennes permet aujourd’hui d’avoir des couvertures d’images à des échelles extrêmement fines pour appuyer les travaux en environnement littoral. Des pixels de l’ordre du millimètre ne sont plus un rêve. Mais tout ce qu’on a gagné en définition par rapport aux images satellitaires, on l’a un peu perdu en ce qui concerne le multi spectral. Les images photographiques se cantonnent aux trois bandes Rouge-Vert-Bleu. On travaillait avec plus d’une dizaine de bandes spectrales et des pixels de 3 ou 5 mètres, on se retrouve avec des pixels d’un centimètre et seulement trois bandes spectrales. La classification supervisée qui nous permet rapidement de cartographier les différentes biocénoses a gagné en précision et perdu en discrimination.
Nous allons aborder dans une série d’articles un moyen de palier à cette perte de bandes spectrales en analysant la texture des images et en utilisant ces résultats pour affiner la discrimination de la classification supervisée.
Nous utiliserons une mosaïque acquise par drone, QGis et son plugin SCP.
Nous verrons tout d’abord ce qu’est la texture d’image et comment calculer différentes mesures de texture.
En un deuxième temps nous verrons comment augmenter le nombre de bandes disponibles pour une classification supervisée, avec les données de texture et/ou des composantes principales.
Finalement, nous allons suivre les démarches du plugin SCP dans sa dernière version et comment exploiter au mieux cet ensemble de nouvelles informations.
Qu’est-ce que la texture ?
Les termes de texture que nous utilisons au quotidien – rugueuse, soyeuse, bosselée, lisse – se réfèrent au sens du toucher. Si nous essayons de les appliquer à une surface topographique on aura des endroits hauts et des endroits bas, et une surface ou fenêtre d’observation donnée.
Partons de notre expérience au toucher :
Une texture qui est rugueuse aura comme propriétés :
- une grande différence entre les points hauts et bas, par rapport à la taille d’un bout de doigt, et
- un espace entre les hauts et les bas à peu près du même ordre de grandeur que la taille qu’un bout de doigt.
Les textures rugueuses peuvent bien sûr se produire à n’importe quelle échelle spatiale, pas seulement à celles que nous pouvons toucher. Mais l’appréciation de rugueuse ou pas dépendra de la taille de notre « bout de doigt », c’est-à-dire la taille de notre fenêtre d’observation.
Une texture qui est lisse aura comme propriétés :
- peu de différence entre les points hauts et les points bas, et
- les différences seraient très rapprochées par rapport à la taille du bout des doigts.
Une même zone pourra être considérée comme rugueuse ou lisse selon la taille de la fenêtre d’observation.
La texture d’une image fonctionne de la même manière, sauf que les valeurs hautes et basses sont des valeurs de luminosité (également appelées niveaux de gris) et non d’élévation. Pour analyser cette texture de l’image, nous devrons définir la taille de la fenêtre carrée qui sera utilisée.
Ce que l’on pourra quantifier
Avec la luminosité des pixels d’une image et une fenêtre définie, le calcul de la texture de l’image quantifie :
- Les différences de niveaux de gris (contraste)
- La taille de la zone où les changements se produisent (la notion de voisinage, dépendante de la taille de fenêtre)
- La directionnalité ou absence de directionnalité (omnidirectionnalité) des changements de luminosité
Le nombre d’ouvrages traitant de la texture d’image est considérable. De plus, il y a images et images, et on n’aborde pas forcément le sujet de la même manière selon le problème à traiter.
Ici, notre sujet concerne des images RVB aériennes de drone et l’utilisation des analyses de texture comme moyen d’augmenter les possibilités de classification supervisée d’objets géographiques.
Le traitement de l’image
Avec QGis et le plugin SCP, les grandes étapes de traitement sont les suivantes :
- Décomposition de l’image d’origine à traiter en trois bandes séparées : rouge ,vert, bleu
- Utiliser une des bandes comme source pour le calcul de texture de terrain avec le traitement, disponible dans le fournisseur de traitements Grass 7, r.texture
- Intégrer les rasters de texture avec SCP plugin pour la classification supervisée
Traitement r.texture dans QGis avec Grass 7
A ce stade, le premier document disponible avec des explications sur l’analyse de texture c’est la fiche d’aide du traitement r.texture (https://grass.osgeo.org/grass79/manuals/r.texture.html).
Malgré les efforts du rédacteur pour être le plus accessible possible, la réduction de tout un domaine de travail à une page A4 ne peut se faire sans laisser de côté pas mal d’explications.
Je vais essayer ici d’en apporter quelques-unes, mais la même remarque pourra m’être faite : ce n’est pas en quelques pages A4 qu’on peut traiter exhaustivement le sujet de la texture d’image. Le but ici n’est pas de faire de vous un spécialiste de l’analyse de texture, mais de fournir quelques notions indispensables pour bien utiliser l’outil disponible(r.texture). Par bien utiliser, j’entends obtenir un résultat qui vous permette de mieux réaliser la classification supervisée de vos images et de mieux discriminer les objets qui se ressemblent.
Vous pourrez alors, si nécessaire, attaquer des ouvrages spécialisés, en commençant par les références citées dans la fiche d’aide Grass de r.texture.
La matrice de co-occurrence de niveau gris (GLCM)
Cet article porte sur les mesures de texture les plus couramment utilisées, celles qui sont dérivées de la matrice de co-occurrence de niveau gris (GLCM). L’essentiel est de comprendre les calculs et la façon dont ils sont faits. La GLCM et les « mesures de texture » qui en découlent sont des statistiques descriptives, c’est-à-dire des calculs mathématiques simples.
Leurs valeurs, et l’utilisation de ces valeurs pour répondre à vos questions, dépendent des données pour lesquelles elles sont calculées. Tout comme une moyenne est un nombre brut, et elle n’est d’aucune utilité à moins que l’utilisateur ne comprenne l’ensemble de données à partir duquel elle est dérivée, les mesures de texture sont peu utiles à moins que l’utilisateur ne comprenne la façon dont elles peuvent être utilisées et les caractéristiques de l’ensemble de données dont elles sont dérivées.
Alors, commençons par le début, qu’est-ce que la GLCM ?
Si on prend sa définition : La GLCM est un tableau indiquant la fréquence à laquelle différentes combinaisons de valeurs de luminosité des pixels (niveaux de gris) se produisent dans une image, on n’est pas bien avancés.
Alors passons à un exemple concret. Voici une image composée de 4 x 4 pixels
Et son équivalent en numérique :
0 | 0 | 1 | 1 |
0 | 0 | 1 | 1 |
0 | 2 | 2 | 2 |
2 | 2 | 3 | 3 |
Pour construire notre matrice GLCM nous allons considérer des paires de pixels et pas les pixels individuels. La texture GLCM considère la relation entre deux pixels à la fois, appelée le pixel de référence et le pixel voisin. Dans notre exemple nous allons choisir comme pixel voisin celui situé à l’est (à droite) de chaque pixel de référence. En commençant par le coin haut-gauche, la première paire est 0-0.
0 | 0 | 1 | 1 |
0 | 0 | 1 | 1 |
0 | 2 | 2 | 2 |
2 | 2 | 3 | 3 |
La deuxième 0-1
0 | 0 | 1 | 1 |
0 | 0 | 1 | 1 |
0 | 2 | 2 | 2 |
2 | 2 | 3 | 3 |
Et ainsi de suite, ligne par ligne. La matrice GLCM aura comme lignes et colonnes les différentes valeurs possibles d’un pixel.
On peut maintenant la remplir avec les occurrences de paires de pixels de notre image exemple : la paire 0-0 apparaît deux fois, la paire 0-1 deux fois, 0-2 une fois, etc.
Assurez-vous de comprendre la différence entre l’image d’origine et ses valeurs de pixels, et les entrées dans le GLCM, qui sont des dénombrements de fréquences des paires voisines de valeurs de pixels d’image.
Si vous avez bien saisi ces deux concepts, vous comprendrez maintenant une notion utilisée dans le domaine de l’analyse des textures, la notion de premier et deuxième ordre.
La différence entre les deux c’est tout simplement le support de calcul : les statistiques de premier ordre sont faites à partir des valeurs individuelles des pixels (l’image d’origine) et les statistiques de deuxième ordre sont celles réalisées à partir de la GLCM (les fréquences de paires de pixels).
Angle ou direction de calcul
L’autre notion qui peut être plus simple à appréhender et celle de la direction (angle), le paramètre -s
-s
Separate output for each angle (0, 45, 90, 135)
Angles are counterclockwise from east: 0 is East to West, 45 is North-East to South-West
Nous avons pris comme exemple pour évaluer le pixel voisin, celui situé à droite. Un souci qu’on n’a pas abordé c’est le fait que quand on arrive au bord de notre image, notre dernière colonne de pixels n’a pas de voisin à droite. Si au lieu de prendre le voisin de droite on avait pris le voisin de gauche les paires trouvées par ligne de notre image ne seraient pas les mêmes.
Pour que notre matrice GLCM soit symétrique, on compte chaque paire horizontale dans les deux sens : quand on a la paire 0-1 on ajoute 1 à sa fréquence et aussi 1 à la fréquence de la paire 1-0.
Mais chaque pixel a, en réalité, huit voisins dans quatre directions: horizontale, verticale , et deux diagonales.
Par défaut, r.texture calcule les quatre matrices, calcule la valeur de texture souhaitée, puis retient comme valeur de sortie la moyenne des quatre résultats.
On dit donc que le calcul est omnidirectionnel. Mais si vous pensez qu’il peut y avoir une texture différente selon une ou l’autre direction, vous pouvez demander des sorties séparées pour chacune des quatre directions (E-W, NS , NW-SE,NE-SW).
Distance entre échantillons
C’est un de ces concepts obscurs qu’on finit par laisser avec sa valeur par défaut, en se disant que tout compte fait il est optionnel…
Mais avec ce qu’on vient d’avoir, il devient simple. Nous avons pris comme voisin le pixel adjacent de notre pixel de référence. C’est-à-dire, le pixel situé à une distance de 1 pixel. C’est la valeur par défaut qu’on observe dans l’interface. On peut demander de prendre comme voisin le deuxième pixel dans la direction choisie, et dans ce cas on rentre la valeur 2, ou bien le troisième et ce sera la valeur 3. Les pixels intermédiaires sont ignorés dans la génération des fréquences de paires.
Taille de la fenêtre mobile
Tout d’abord, nous devons définir la petite zone à utiliser pour remplir le GLCM et faire le calcul de la mesure de texture. De façon générale, on peut appeler cela le « voisinage» pour le calcul. Habituellement, nous utilisons le terme « fenêtre », qui désigne un type particulier de voisinage. Il est carré et comporte un nombre impair de pixels sur un côté.
Les textures sont calculées dans une fenêtre, une petite région de l’image. L’image de test utilisée plus haut dans cet article considère l’image entière comme la zone contribuant à la texture. Pour les images plus grandes, une fenêtre est choisie pour définir cette zone. Cette fenêtre est, en pratique, carrée et avec des longueurs latérales impaires.
En théorie, une fenêtre peut être de n’importe quelle dimension, mais encore une fois, des problèmes de calcul pratiques se produisent pour des tailles paires et des formes non carrées de fenêtres.
La taille relative de la fenêtre et des objets recherchés dans l’image déterminera l’utilité de la mesure de texture pour la classification.
On s’attend à ce que différents objets aient des mesures de texture caractéristiques différentes. Pour mettre cela en évidence, la fenêtre doit être plus petite que l’objet, mais assez grande pour couvrir la variabilité caractéristique de l’objet.
Exemple : La texture d’une forêt est déterminée par la lumière et l’ombre parmi les couronnes des arbres. Une fenêtre recouvrant un arbre ne mesurera pas la texture de la forêt. Une fenêtre recouvrant toute la forêt et les champs adjacents ne mesurera pas non plus la texture de la forêt.
Les fenêtres utilisées pour la texture, comme celles utilisées avec les filtres, ont toujours un « effet de bord » où la fenêtre chevauche la limite entre les différents objets de l’image. Les « bords » des objets apparaissent blancs ou pâles. En effet, une fenêtre située en partie au-dessus d’une texture et en partie au-dessus d’une autre – le long du bord entre les deux – sera très probablement moins ordonnée qu’une fenêtre située entièrement à l’intérieur d’un seul type de texture. Les fenêtres moins ordonnées produisent un résultat d’entropie plus élevé, et lorsqu’elles sont visualisées sur un écran, les valeurs plus élevées sont d’un ton plus clair.
Dans le prochain article nous verrons les différents calculs de texture disponibles.