L'objectif est d'extraire les zones boisées présentes dans des images aériennes extraites de Google Maps par une simple copie d'écran. Les images données en exemple sont prises dans la région de Creully en Basse-Normandie (France). Dans ce type de paysage normand, les zones boisées correspondent essentiellement aux bois et aux haies.
Le traitement construit ici est adapté aux images ayant la même résolution que l'image donnée en exemple, soit 1 pixel représente 5,932 m sur le terrain. Avec une résolution différente les valeurs des paramètres devront être adaptées.
L'image source. | Les zones boisées détectées. |
La détection proposée est essentiellement basée sur l'analyse des couleurs des pixels de l'image puisque les zones boisées apparaissent dans les images comme des régions de couleur vert sombre. Une mesure supplémentaire d'hétérogénité est utilisée pour distinguer certain champs avec les zones boisées.
La méthode est composée de 6 étapes :
Pour réduire le bruit et l'effet bloc dû à Jpeg, nous allons simplement passer un filtrage passe-bas gaussien sur l'image, qui est suffisant pour le reste des traitements.
pany2pan input.jpg input.pan pgaussianfiltering 0.5 input.pan image1.pan | |
image1.pan : Image prétraitée. |
Pour étudier la couleur, l'image est convertie dans l'espace couleur TSL (Teinte-Saturation-Luminance). Le principe est de sélectionner dans l'image TLS uniquement les pixels dont la valeur de teinte est comprise entre 110° et 200°, qui correspondent à la couleur verte.
prgb2hsl image1.pan tmp1.pan pgetband 0 tmp1.pan tmp2.pan pbinarization 110 200 tmp2.pan tmp3.pan # closing pdilatation 0 1 tmp3.pan tmp4.pan perosion 0 1 tmp4.pan tmp5.pan | |
tmp5.pan : Les régions vertes dans l'image. |
Pour sélectionner les régions sombres, il suffit de ne sélectionner que les pixels ayant une valeur de luminance faible, c'est-à-dire entre 0 et 60.
prgb2hsl image1.pan tmp1.pan pgetband 2 tmp1.pan tmp8.pan pbinarization 0 60 tmp8.pan tmp9.pan # closing pdilatation 0 1 tmp9.pan tmp10.pan perosion 0 1 tmp10.pan tmp11.pan | |
tmp11.pan : Les régions sombres dans l'image. |
En combinant les deux résultats précédents on obtient les régions vertes et sombres.
Une petite fermeture de demi-taille 1 permet de combler les trous de taille ≤ 1 pixel de rayon, puis une ouverture permet de supprimer les trop petites régions isolées (≤ 1 pixel de rayon).
pand tmp5.pan tmp11.pan tmp12.pan plabeling 8 tmp12.pan tmp13.pan # opening perosion 0 1 tmp13.pan tmp14.pan pdilatation 0 1 tmp14pan tmp15.pan | |
tmp15.pan : Les régions vertes et sombres. |
Dans le résultat actuel, il reste encore quelques champs. On va donc utiliser une dernière caractéristique des zones boisées pour éliminer ces champs : l'hétérogénéité de la luminance des zones boisées. Une zone boisée ne présente pas en général une surface uniforme (à cause du feuillage) à la différence des champs. Nous allons utiliser ici une mesure statistique de l'hétérogénéité des régions : la variance. On ne garde des régions précédentes que les régions qui ont une variance supérieure à 50. En sortie, nous aurons les régions vertes sombres ayant une luminance non homogène.
pgetband 2 tmp1.pan tmp16.pan pvarianceselection 1 50 tmp15.pan tmp16.pan tmp17.pan | |
tmp17.pan : Les régions vertes, sombre et hétérogènes. |
Les fausses régions sont écartées sur leur valeur de surface. On ne conserve que les régions de taille ≥ 200 pixels (soit 7000 m2 sur le terrain).
pareaselection 1 200 tmp17.pan tmp18.pan | |
tmp18.pan : Les régions candidates. |
Uniquement pour des raisons de visualisation des résultats, on va superposer les frontières des zones boisées trouvées à l'image initiale.
pboundary 8 tmp18.pan tmp19.pan psuperimposition 7 input.pan tmp19.pan output.pan ppan2jpeg output.pan output.jpg | |
output.pan : L'image résultat. |