UNIVERSITE François Rabelais TOURS Polytech Tours-Département Informatique 64, Avenue Jean Portalis 37200 TOURS Projet Matlab : Segmentation d images selon la Dimension Fractale Encadré par : Présenté par : Mme. Djedjiga Ait Aouit Florian AGEN M. Pascal Makris Julien MICHOT Promotion 2004-2007
Projet Matlab : Segmentation d images selon la Dimension Fractale Florian AGEN - Julien MICHOT Mai 2006
Table des matières 1 La Dimension Fractale 3 1.1 Présentation................................... 3 1.1.1 Distance de Hausdorff......................... 3 1.1.2 La dimension fractale.......................... 4 1.2 Algorithme BoxCounting............................ 5 1.3 Remarques.................................... 8 2 Segmentation selon la dimension fractale 9 2.1 Méthodologie.................................. 9 2.1.1 Algorithme général........................... 9 2.1.2 Elimination du texte.......................... 9 2.1.3 Gradient et seuillage.......................... 10 2.2 Le logiciel.................................... 10 2.2.1 Les fonctions.............................. 11 2.2.2 La version avec interface........................ 13 3 Tests et résultats 15 3.1 Résultats sur une image en 2 dimensions................... 15 3.2 Discutions.................................... 18 3.2.1 Limites de la méthode......................... 18 3.2.2 Application aux images 3D....................... 18 1
Introduction La dimension fractale est une donnée statistique révélant la nature fractale d un objet. Cette dimension est aujourd hui beaucoup utilisée dans de nombreux domaines variés (finance, traitement d informations, etc...). Afin de caractériser des zones de rupture sur différents matériaux, nous avons été amené à employer cette caractéristique fractale sur des images 2D. Nous allons décrire dans ce document les différents procédés entrepris lors de l élaboration de la segmentation des images selon les dimensions fractales locales des images. Nous présenterons dans une première partie la dimension fractale, les propriétés et algorithmes de calcul, puis nous aborderons la segmentation selon les dimensions fractales locales. Enfin, la dernière partie sera consacrée à la présentation et à l évaluation de notre logiciel. 2
Chapitre 1 La Dimension Fractale 1.1 Présentation Avant d aborder la dimension fractale, il nous faut définir la notion de distance de Hausdorff. 1.1.1 Distance de Hausdorff En topologie mathématique, la distance de Hausdorff mesure l éloignement de deux sous-ensembles d un espace métrique. L application de cette distance en informatique (en reconaissance des formes notamment) est généralement notée ainsi : Soient S et T deux ensembles de points. La distance de Hausdorff est définie par DH(S, T ) = maxfd(s, T ), fd(t, S), (1.1) où fd est appelée la distance de Hausdorff relative (ou semi-distance de Hausdorff). Elle est définie par fd(s, T ) = max p S d(p, T ). (1.2) Habituellement, la distance d utilisée est la distance euclidienne. Mais la distance de Hausdorff peut aussi être exprimée de la manière suivante : comme le montre la figure suivante : N = r D (1.3) 3
Fig. 1.1 Distance de Hausdorff, dans Z Les 3 cas particuliers précédents où la distance de Hausdorff est entière, permettent d illustrer ce que la distance de Hausdorff mesure. Il s agit d une équation liant cette même distance à un rapport de segmentation r, qui découpe une forme topologique en sous-formes isométriques, et à une quantité N, représentant le nombre de sous-formes ainsi générées. Si l on prend l exemple d une dimension de Hausdorff de 2 et d un rapport de découpe de 3 alors le nombre de sous ensembles formés est de 3 2 = 9. A l inverse, nous pouvons déterminer la distance de Hausdorff par la relation : D = log N log r (1.4) Pour calculer la dimension de Hausdorff d un objet présent dans une image 2D, il suffit donc de segmenter l image en carrés, avec un pas r déterminé, et de compter le nombre de carré dont au moins un pixel appartient à l objet. La distance de Hausdorff peut ainsi être vue comme le taux de recouvrement d un objet dans un espace caractéristique. 1.1.2 La dimension fractale On appelle dimension fractale d une image, la distance de hausdorff aux alentours de 0. Ou plus précisément, la limite du nombre de cases contenant l objet, lorsque le ratio 4
de segmentation tend vers 0. D où la relation suivante : D = lim s 0 log N(s) log s (1.5) Cette caractéristique est une propriété intéressante d un objet. En effet, elle mesure le degré d autosimilarité de celui-ci et peut quelques fois expliquer des phénomènes physiques comme par exemple une optimisation naturelle (dispersion thermique, surface de contact, etc..). La figure suivante montre une règle de production du type L-système, en 3 stades, avec un paramètre d angle différent. Fig. 1.2 Exemple de dimensions fractales Sur une image 2D la dimension fractale se situe dans un intervalle de valeurs réelles, entre 1 et 2, comme le montre la figure précédente. Sur des objets de dimension D, la dimension fractale sera alors comprise entre 1 et D. Mais il est aussi possible de rencontrer des valeurs inférieures à 1 (mais positives) sur des images réelles, puisque celles-ci peuvent ne pas être connexes. Sur ces images, il est de plus possible de mesurer le degré d autosimilarité en utilisant des algorithmes appropriés. Nous allons détailler dans ce document la méthode dite du BoxCounting. 1.2 Algorithme BoxCounting L algorithme de calcul de la dimension fractale d une image le plus répendu est certainement la méthode appelée BoxCounting. 5
Cet algorithme, itératif, détermine la distance de Hausdorff de l image selon différents pas (s) de segmentation. Le calcul de la distance de Hausdorff est effectué à l aide d un simple comptage. En effet, l algorithme commence par réaliser un pavage uniforme de l image en carrés d un pas s fixe, puis il compte simplement le nombre de carrés possèdant un ou plusieurs pixels noirs (appartenant à l objet étudié), comme le montre la figure suivante. Fig. 1.3 Principe du BoxCounting La distance ainsi obtenue est fournie par la relation de Hausdorff : D H = log Nombre De Carrés Comptés log s (1.6) L algorithme de BoxCounting réitère ensuite la procédure avec un pas de segmentation plus restreint, et augmente ainsi la définition du pavage. 6
Fig. 1.4 Augmentation du détail des boîtes Enfin, l agorithme aborde le calcul de la dimension fractale en elle-même. Après avoir calculer différentes coordonnées (log s,log N(s)), l algorithme opère une régression linéaire sur la courbe, comme le montre la figure suivante. Fig. 1.5 Courbe caractéristique du BoxCountig Le coefficient directeur de la droite obtenue par la régression linéaire représente la dimension fractale de l image, au signe près. Pour des raisons d efficacité, l algorithme présenté livre une dimension fractale négative. Cela vient du fait que la courbe représentative des distances de Hausdorff a comme abscisse log s et non log ɛ, avec s = 1. Suivant les ɛ notations, les s et ɛ sont utilisés, mais seul le signe du coefficient directeur change. Démonstration de la convergence : 7
D = lim s 0 log N(s) log s Régression linéaire : y = D.x + e, avec y = log N(s) et x = log s, log N(s) or = D + e, et (s 0 log s ), log s log s donc lim s 0 log N(s) log s = D, D est bien la dimension fractale de l image. 1.3 Remarques Un inconvénient connu de l algorithme de BoxCounting est la qualité de la régression linéaire employée. En effet, la courbe des distances de Hausdorff tend à se courber lorsque le pas de la segmentation s approche de la définition de l image. Cette courbure ajoute une certaine erreur lors de la régression, comme nous pouvons l observer dans la figure précédente. Il serait en théorie préférable de ne réaliser la régression que seulement sur la partie linéaire de la courbe. La difficulté réside dans le fait que la détermination de cette sous partie ne peut être automatisée rapidement et, puisque nous appliquons l algorithme de BoxCounting sur plusieurs zones de l image, nous ne pouvons nous permettre de régler manuellement ce paramètre. Il existe différents algorithmes de calcul de la dimension fractale. Nous avons choisi le BoxCounting car il a l avantage d être simple et relativement efficace. D autres méthodes sont plus précises, mais nécessitent généralement une réflexion plus importante, tant au niveau de l implémentation en Matlab, que dans les limites imposées par les images à traiter. Nous avons néanmoins testé un autre algorithme basé sur la transformation de Fourier. Bien que l efficacité de celui-ci soit plus importante, il s est en revanche montré fort décevant sur des images réduites (lors de la segmentation). Cet algorithme a besoin d une quantité d informations plus importante pour fonctionner correctement. Nous sommes donc restés au BoxCounting, plus avantageux. La dimension fractale peut aussi être approximée. Il s agit ici de ne s intéresser qu aux distances de Hausdorff, sur une segmentation d un pas de 1 pixel. Cette valeur a l avantage d être rapide à déterminer, et est relativement proche de la dimension fractale de l image traitée. 8
Chapitre 2 Segmentation selon la dimension fractale 2.1 Méthodologie Afin de caractériser les régions dont le dimension fractale est importante, nous avons opté pour une segmentation en régions carrées. Cette méthode a l avantage d être économique en temps de calcul et assez efficace, avec un pas relativement restreint. 2.1.1 Algorithme général L algorithme principal de notre projet est simple. Il s agit simplement d une de segmentation en régions carrées, et de l application de l algorithme de calcul de dimension fractale BoxCounting sur chaque région. Voici les étapes composant l algorithme général. 1. Ouvrir l image 2. Convertir l image en niveau de gris (si l image est en couleur) 3. Eliminer le texte situé en bas de l image 4. Appliquer un filtre gradient 5. Binariser l image (seuillage) 6. Calculer la segmentation en carrés selon le pas mentionné 7. Appliquer l algorithme de BoxCounting sur chaque région 8. Construire la matrice des dimensions fractales associée 9. Dessiner le contour des régions dont la dimension fractale est relativement importante. Si certaines étapes de l algorithme sont simples à réaliser (grâce aux nombreuses méthodes présentes dans Matlab), d autres demandent plus de réflexions. 2.1.2 Elimination du texte Afin d exprimenter notre logiciel, un jeu de quelques images en niveaux de gris nous a été fourni. Ces images proviennent d un microscope électronique, et ciblent une zone 9
particulière d une surface. Afin de conserver des informations d échelle notamment, le microscope ajoute sur l image des données alpha-numériques que nous devons éliminer avant de traiter l image. Etant donnée la localisation du texte, nous avons opté pour une simple découpe de l image (méthode crop). 2.1.3 Gradient et seuillage Comme nous l avons vu précédemment, l algorithme BoxCounting nécessite en entrée une image binaire. Il s agit donc de transformer les images 2D de notre jeu d images (en niveaux de gris), en images en noir et blanc. Or, une simple binarisation de l image est contre indiquée, car nous avons besoin de conserver simplement les contours présents dans l image. Nous avons par conséquent réalisé un gradient puis un seuillage de l image (méthode edge), comme le montre la figure suivante. Fig. 2.1 Gradient (Laplacien du Gaussien) et seuillage de l image Sur des images réelles comme celles présentent dans notre jeu d images, le gradient de Sobel est peut révélateur, alors que le Laplacien du Gaussien de l image est beaucoup plus intéressant. 2.2 Le logiciel Nous avons donc implémenté la segmentation suivant les dimensions fractales locales en langage Matlab. Ce langage est particulièrement adapté pour le calcul mathématique. Notre projet est cependant dépourvu de calculs mathématiques complexes, et il aurait été 10
intéressant, du point de vue de la vitesse d execution, de l implémenter en C/C++. 2.2.1 Les fonctions Le projet est constitué de plusieurs fonctions qui peuvent être appelées séparément. Nous allons décrire ces différentes fonctions ainsi que leurs paramètres d entrées et de sorties. Fonction hausdorff Entrée : Image en Noir et Blanc Sortie : Nombre réel (dimension de Hausdorff) Action : calcule la dimension de Hausdorff d une image. Fonction BoxCountingFromImage Entrées : - Image : une image en couleur/niveaux de gris/noir et blanc - MinSize : taille minimale des boîtes (ex 1/512) - MaxSize : taille maximale des boîtes (ex 1/2) - NbBox : nombre de calculs de Hausdorff à réaliser - ShowInfos : booléen, afficher le diagramme - DejaEdge : l image est déjà en noir et blanc Sortie : Nombre réel (dimension fractale de l image) Action : calcule la dimension fractale d une image, par la méthode du BoxCounting, à partir d une image ouverte. Appel : - Fonction BoxCountingFromFile Entrées : - File : le chemin d une image - MinSize : taille minimale des boîtes (ex 1/512) - MaxSize : taille maximale des boîtes (ex 1/2) - NbBox : nombre de calculs de Hausdorff à réaliser - ShowInfos : booléen, afficher le diagramme Sortie : Nombre réel (dimension fractale de l image) Action : calcule la dimension fractale d une image, par la méthode du BoxCounting, à partir d un chemin. Appel : BoxCountingFromImage Fonction BoxCountingFromMatrix Entrées : - Matrix : une matrice 2D - MinSize : taille minimale des boîtes (ex 1/512) - MaxSize : taille maximale des boîtes (ex 1/2) 11
- NbBox : nombre de calculs de Hausdorff à réaliser - ShowInfos : booléen, afficher le diagramme Sortie : Nombre réel (dimension fractale de la matrice) Action : calcule la dimension fractale d une matrice 2D, par la méthode du Box- Counting. Appel : BoxCountingFromImage Fonction SegmentMatrice Entrées : - Matrice : matrice 2D - pas : taille de la segmentation en carrés de pas pixels - DrawSquares : Booléen, afficher la segmentation et les zones dont la dimension fractale est supérieure à Threshold - Threshold : Dimension fractale de référence - Algo : Type d algorithme à utiliser (0 = BoxCounting, 1 = simple estimation par Hausdorff) Sortie : Matrice 2D des dimensions fractales locales de l image. Action : Calcule et segmente selon les dimensions fractales locales d une matrice, et retourne la matrice 2D des dimensions fractales locales. Appel : BoxCountingFromImage ou Hausdorff Fonction SegmentImage Entrées : - FileName : chemin d accès d une image - pas : taille de la segmentation en carrés de pas pixels - DrawSquares : Booléen, afficher la segmentation et les zones dont la dimension fractale est supérieure à Threshold - Threshold : Dimension fractale de référence - Algo : Type d algorithme à utiliser (0 = BoxCounting, 1 = simple estimation par Hausdorff) Sortie : Matrice 2D des dimensions fractales locales de l image. Action : Calcule et segmente selon les dimensions fractales locales d une image, et retourne la matrice 2D des dimensions fractales locales. Appel : SegmentMatrice Enfin, pour lancer le calcul de la segmentation selon les dimensions fractales locales, il suffit d écrire dans le shell de Matlab : M = SegmentImage( NomImage.png,20,true,1.3) ; M sera la matrice des dimensions fractales locales 20 est le nombre de pixels de la segmentation 12
true signifie que l image segmentée sera affichée à la fin 1.3 est le seuil de la dimension fractale Remarques L ensemble de ces fonctions peuvent être lancées à partir d un interpréteur Matlab. Nous avons affecté des valeurs par défaut sur les entrées facultatives, afin de limiter le nombre de paramètres des fonctions. Au regard du temps de calcul de notre segmentation, nous avons choisis de développer une version allégée. Cette version, basée sur le calcul de la simple dimension de Hausdorff, remplace ainsi le coûteux BoxCounting. La version Hausdorff est beaucoup plus rapide que la version précédente, mais reste moins précise, car la dimension de Hausdorff n est qu une estimation de la dimension fractale. 2.2.2 La version avec interface Après avoir implémenté l ensemble des fonctions utiles pour la segmentation selon les dimensions fractales locales, nous avons réalisé une interface sous matlab, afin de donner un peu d esthétisme à notre logiciel. Fig. 2.2 Interface du logiciel Nous retrouvons dans cette interface (accessible en tapant UISegmentFractal sous 13
matlab), les différents paramètres vus précédemment. De plus le logiciel permet de sélectionner et traiter plusieurs images à la suite, ce qui évite des lancements succéssifs. 14
Chapitre 3 Tests et re sultats 3.1 Re sultats sur une image en 2 dimensions Tout au long du de veloppement de nos algorithmes, nous avons lance plusieurs campagnes de tests afin de ve rifier la conformite des re sultats, notamment avec le calcul de la dimension fractale. Une fois l ensemble du projet re alise, nous avons applique nos fonctions sur diffe rentes images. La figure de test suivante fait partie d un jeu de facie s obtenus a l aide d un microscope e lectronique. Fig. 3.1 Image de test facies1 CR0291er rupture.tif Elimination automatique du texte, parasitant le calcul de la dimension fractale : 15
Fig. 3.2 Image dépourvue de texte Cette dernière image devient donc notre support de calcul des dimensions fractales locales. L application d une segmentation en carrés de 40 pixels de coté, sur cette image, donne lieu à une matrice de dimensions fractales locales, dont les valeurs varient de 0 à 1,4. Afin de mieux caractériser ces valeurs, nous avons colorisé la matrice sur la figure suivante. 16
Fig. 3.3 Matrice des dimensions fractales locales de l image Fig. 3.4 Graphe des dimensions fractales locales de l image Remarques : Certaines valeurs de la matrice (les plus sombres), possèdent des dimensions fractales inférieures à 1. Il s agit en fait d une particularité fréquente des images réelles, discontinues. 17
Enfin, la figure suivante symbolise par des carrés blanc les zones locales de l image, dont la dimension fractale est relativement imporante (supérieure à une certaine valeur). Fig. 3.5 Image segmentée avec un seuil de 1,2 Comme le soulignent la figure précédente ainsi que les différents tests effectués sur plusieurs images, notre logiciel détecte bien les zones de l image dont la dimension fractale est importante. L objectif du projet est donc atteint. 3.2 Discutions 3.2.1 Limites de la méthode Le logiciel que nous avons réalisé est efficace et réalise bien le travail demandé, mais il est nécessaire de prendre quelques précautions lors de son utilisation. En effet, l algorithme BoxCounting nécessite une quantité minimale d information pour le calcul de la dimension fractale, et une segmentation trop détaillée impliquerait des résultats erronés. Un pas de segmentation minimal de 20 pixels est dès lors conseillé. De plus, notre algorithme BoxCounting s avère relativement lent. Il existe d autres algorithmes plus précis et/ou plus rapides, mais leur implémentation en Matlab demande beaucoup plus de temps. 3.2.2 Application aux images 3D Nous avons enfin envisagé le calcul sur des images en trois dimensions. Il existe plusieurs possibilités pour entreprendre ce calcul. 18
- Soit on utilise la segmentation précédente, en calculant les dimensions fractales locales sur une image 2D, et en ne considèrant plus les niveaux de gris de l image mais bien la troisième dimension. - Soit on utilise l extension 3D de notre logiciel. La première solution a l avantage d être rapide et représentative des caractéristiques fractales de l objet. Les valeurs des dimensions fractales ne sont que l adaptation 2D des dimensions fractales 3D réelles de l objet scanné. Nous pouvons dès lors approximer les dimensions fractales et ainsi appliquer une segmentation sur l image 3D. Nous avons cependant porté notre algorithme sur des objets en 3 dimensions. La fonction BoxCountingFromImage3D effectue le BoxCounting sur une image 3D, fournie en entrée (matrice 2D de valeurs de z), exactement comme le ferait le BoxCountingFromImage sur une image 2D. Cette fonction fournit cependant des dimensions fractales locales comprisent entre 0 et 3, et calcule les dimensions fractales réelles de l objet 3D. Néanmoins, l inconvénient de cette méthode est sa lenteur, en effet une dimension supplémentaire a été ajoutée dans le calcul du BoxCounting, et il est parfois préférable d approximer un calcul plutôt que d attendre de longues minutes pour voir un résultat quasi-similaire. 19
Conclusion Le projet de segmentation suivant la dimension fractale répond pleinement aux attentes précisées lors de l élaboration du cahier des charges. Le logiciel, d une grande simplicité, calcule et définit les régions de l image où la dimension fractale dépasse une valeur, définie au préalable. Les résultats obtenus par notre logiciel semblent cohérents, notamment en ce qui concerne l algorithme de BoxCounting. En effet, celui-ci fournit des dimensions fractales correctes sur une multitudes d images. Enfin, ce projet nous a permis d apprendre à utiliser la puissance et l efficacité du langage et de l interpréteur Matlab. Ce logiciel est relativement simple à manipuler et implémente de nombreuses fonctions, généralement non définies dans les langages objets comme le C++. 20
Table des figures 1.1 Distance de Hausdorff, dans Z......................... 4 1.2 Exemple de dimensions fractales........................ 5 1.3 Principe du BoxCounting............................ 6 1.4 Augmentation du détail des boîtes....................... 7 1.5 Courbe caractéristique du BoxCountig.................... 7 2.1 Gradient (Laplacien du Gaussien) et seuillage de l image.......... 10 2.2 Interface du logiciel............................... 13 3.1 Image de test facies1 CR0291er rupture.tif.................. 15 3.2 Image dépourvue de texte........................... 16 3.3 Matrice des dimensions fractales locales de l image.............. 17 3.4 Graphe des dimensions fractales locales de l image.............. 17 3.5 Image segmentée avec un seuil de 1,2..................... 18 21
Résumé La dimension fractale est une caractéristique représentant la nature fractale d un objet. Cette dimension est aujourd hui beaucoup utilisée dans de nombreux domaines. Ce projet a pour but de réaliser une segmentation sur des images 2D (puis 3D), à partir des dimensions fractales locales. Mots clés Dimension fractale, Hausdorff, algorithme Box-counting, Matlab, segmentation d image. Abstract The fractal dimension represents the fractal nature of any objects. This dimension is very used in a lot of domains. The aim of this project is the segmentation of a 2D (and next 3D) images, according to locals fractals dimensions. Keywords Fractal dimension, Hausdorff, Box-counting algorithm, Matlab, segmentation.