TP de SI241 : segmentation des images Le compte-rendu est à rendre pour le 5 novembre. Pour réaliser le TP depuis votre compte personnel lancez les commandes suivantes : source /tsi/tp/bin/tp-seg L ensemble du TP se déroule via des commandes en ligne à lancer directement de la fenêtre de commande. Vous utiliserez les logiciels gimp ou xv pour visualiser les images. 1 Détection de contours 1.1 Filtre de gradient local par masque Depuis la fenêtre de commande, vous pouvez utiliser la fonction contours pour tester un filtre de gradient local. La commande : contours -h fournit une aide en ligne sur les paramètres de la fonction. Par exemple, la commande : contours cell.tif sobel.tif -sobel permet d obtenir la norme (image sobel N.tif) et la direction (image sobel D.tif) du gradient sur l image cell.tif avec l opérateur de Sobel. Essayez de seuiller l image de la norme avec l outil binaire. Commentez les résultats en terme d épaisseur et de continuité des contours, et de filtrage du bruit? 1.2 Maximum du gradient filtré dans la direction du gradient La commande contours permet également de détecter les maxima locaux du gradient dans la direction du gradient. Il suffit pour cela de rajouter l option -c <seuil>. Par exemple : contours cell.tif sobel.tif -sobel -c 1 fournit une image des contours du filtre de Sobel qui ont une norme au moins égale à 1 (image sobel C.tif). Vous pouvez superposer une image de contours sur l image initiale avec la fonction composition : composition cell.tif sobel C.tif super.tif -t 1 Cherchez à fixer le seuil sur la norme de façon à obtenir un compromis entre élimination du bruit et continuité des contours. Commentez les résultats obtenus en terme de position et de continuité des contours et d élimination du bruit. 1
1.3 Filtre récursif de Deriche Testez une approche analytique avec le filtre de Deriche de réponse impulsionnelle f(x) = cx.exp( a x ), suivi d une recherche du maximum du gradient dans la direction du gradient. Pour cela, placez-vous dans votre fenêtre de commande et tapez : deriche cell.tif deriche.tif -a 1.5 -c 1 Ce programme écrit en sortie les images deriche D.tif, deriche N.tif et deriche C.tif qui sont respectivement les images de la direction du gradient, de la norme du gradient et des contours. Que pensez vous des résultats? Etudiez l influence du paramètre a (le faire varier entre 0.3 et 3) sur la détection des contours (position, continuité, bruit,...). Le temps de calcul dépend-il de la valeur de a? Expliquez pourquoi. 1.4 Passage par zéro du laplacien Testez la détection de contours par passage par zéro du laplacien avec la routine LaplacianOfDeriche. Quel est l effet du paramètre a sur les résultats? Quelles sont les principales différences par rapport aux résultats fournis par les opérateurs vus précédemment (contours, Deriche)? 1.5 Changez d image Quel opérateur choisiriez-vous pour segmenter l image pyra-gauss.tif? Quels seraient les pré-traitements et les post-traitements à effectuer? 2 Seuillage avec hystérésis Dans cette partie, vous allez tester l intérêt du seuillage avec hystérésis sur un exemple de détection de lignes dans une image. Le principe du seuillage avec hystérésis est de sélectionner deux seuils différents de binarisation : l un est suffisamment bas pour que les lignes soient continues, mais risque de sélectionner du bruit dans l image, l autre est suffisamment haut pour que les points préservés appartiennent bien à des lignes valides, mais qui ne laissent que des lignes très incomplètes. La deuxième image est utilisée pour sélectionner dans la première les lignes les plus significatives : les objets connexes après le seuillage bas qui comportent au moins un point au dessus du seuil haut. 2
2.1 Application à la détection de lignes Appliquez le filtre du Duda Road Operator à une image SPOT pour effectuer une détection de lignes : duda.sh spot.tif duda.tif Application d un seuil bas binaire duda.tif bin-bas.tif -bas 70 Application d un seuil haut binaire duda.tif bin-haut.tif -bas 100 Seuillage avec hystérésis hysteresis bin-haut.tif bin-bas.tif hyste.tif 2.2 Votre travail Modifiez les valeurs des deux seuils, et examinez comment les lignes sont supprimées ou préservées. Quels sont les seuils qui donnent, à votre avis, le meilleur résultat? Appliquez le seuillage par hysteresis pour améliorer la détection de contours par l opérateur de Deriche sur une image de votre choix. Précisez la mise en oeuvre que vous proposez et commentez les résultats. 3 Segmentation par classification : K-moyennes Depuis une fenêtre de commande, vous pouvez lancer un algorithme de k-moyennes sur des images à niveaux de gris (kmeans1) ou sur des image en couleur (kmeans3). Vous pouvez choisir une initialisation aléatoire des germes ou spécifier les centres initiaux des classes. 3.1 Image à niveaux de gris Calcul de l histogramme de l image cell.tif : histo cell.tif -o histo.tif et visualisation de l image histo.tif avec xv ou gimp. Testez l algorithme des k-moyennes sur l image cell.tif pour une classification en 3 classes (par défaut, les centres des classes initiaux sont équirépartis) : kmeans1 cell.tif kmeans.tif 3 100 -histo histo.tif histokmeans.tif 3
L image histokmeans.tif permet de voir la séparation de l histogramme en différentes classes. Cette classification segmente-t-elle correctement les différents types de cellules? Avec l option -random, testez l algorithme des k-moyennes avec des germes tirés de façon aléatoire. Le résultat est-il stable si vous lancez l algorithme plusieurs fois? Quelles sont les difficultés rencontrées pour la segmentation des différents types de muscle dans l image muscle.tif? Vous pouvez spécifier certains centres initiaux de classes. Par exemple pour initiliser 3 centres à 50, 100 et 200, remplir le fichier classe.dat avec la commande suivante : echo 3 50 100 200 > classe.dat qui crée 3 classes initialisées en 50, 100 et 200, et lancer la commande pour une classification en 5 classes (les centres non spécifiés sont tirés aléatoirement) : kmeans1 muscle.tif kmeans.tif 5 100 -c classe.dat Combien de classes sont nécessaires pour obtenir une segmentation correcte? Avec quelle initialisation? Quels prétraitements proposez-vous pour améliorer les résultats? 3.2 Image en couleur Testez l algorithme sur l image fleur.tif pour une classification en 10 classes (par défaut, les centres des classes initiaux sont tirés aléatoirement) : kmeans3 fleur.tif kmeans.tif 10 100 Si vous voulez spécifier le centre de certaines classes, vous pouvez remplir le fichier classe.dat de la façon suivante : 3 255 100 200 100 200 200 50 50 250 et lancer la commande : kmeans3 fleur.tif kmeans.tif 10 100 -c classe.dat Commentez la dégradation de l image quantifiée par rapport à l image initiale. Quel est le minimum de classe qui donne un rendu visuel similaire à celui de l image codée sur 3 octets? Proposez une solution pour retrouver les planches-mères utilisées pour l impression d une carte IGN : carte.tif. 4
4 Segmentation par régions 4.1 Partage et réunion : algorithme de Suk Dans la fenêtre de commande de votre compte TP, testez l algorithme de split and merge proposé par Suk et Chung sur des images à niveaux de gris et sur des images en couleur. La méthode de Suk fonctionne par trois passages sur l image : Dans une première passe, toutes les cellules de 2x2 pixels sont examinées. On recherche pour chacune la meilleure (qui implique le plus petit nombre de divisions) configuration permettant de partager la cellule en 1, 2 3 ou 4 régions homogènes. La meilleure configuration est retenue si elle garantie que chaque sous-cellule n a pas de contraste supérieur à un seuil T1. Dans une seconde passe, on cherche à réunir tout pixel aux 3 pixels qui le précèdent dans un balayage de type TV. Cette réunion est faite si la dynamique de la zone ainsi formée est inférieure à un second seuil T2. Enfin toutes les zones trop petites (d une taille inférieure à un seuil S) sont aggrégées à leur voisines les plus proches (au sens de la radiométrie). 4.2 Images à niveaux de gris L algorithme de Suk s exécute sur l image cell.tif par la commande : SUK-IMA cell 10 12 200 ce qui signifie que T1 = 10, T2 = 12 et S = 200. Vous obtenez deux images en sortie : - cell-suk.tif est l image des zones où la valeur moyenne de la zone remplace les niveaux de gris. - cell-etiq.tif est une image d étiquettes de régions sur 8 bits. Etudiez l effet des différents paramètres sur le résultat de la segmentation. Cherchez le jeu de paramètres qui vous semble donner la meilleure segmentation. Cherchez également à expliquer l effet d une rotation de 90 degrés de l image initiale (prenez l image cell90.tif). Testez l algorithme de Suk sur l image RADAR ERS1 : hollande.tif. L algorithme est-il adapté à ce type d images? Il existe un algorithme de filtrage de speckle adapté aux images SAR. lee hollande.tif lee.tif -stdn 5 -r 3 Est-ce qu il permet d améliorer le résultat de la segmentation? 5
4.3 Images en couleur Effectuez la segmentation des images couleurs fleur.tif ou brux.tif dans l espace des couleurs RVB et dans l espace Lab. SUK-RVB fleur 8.0 8.0 200 SUK-LAB fleur 8.0 8.0 200 Fixez les paramètres de la segmentation dans l espace RVB, puis ajustez les paramètres de la segmentation dans Lab de façon à obtenir le même nombre de régions. Expliquez les différences de segmentation en fonction de l espace de couleurs utilisé. 5 A vous de jouer Sur l image aérienne vincennes.tif qui se trouve dans votre répertoire, utilisez les différents opérateurs que vous venez d étudier afin d extraire les ombres et les toits des bâtiments. Quels sont les problèmes que vous rencontrez? Que proposez-vous pour y remédier? En particulier, quels sont les filtres qu il est possible d appliquer à l image pour éliminer le bruit dû aux voitures ou aux objets présents sur les toits. 6