TP Bibliothèque de Traitement d Images en Niveaux de Gris Étudiants : Besnier Alexandre Taforeau Julien Version 1.2 Janvier 2008
2008 Rapport TP - Version 1.2 i
Table des matières Introduction 1 1 Objectif de l application 2 1.1 Présentation du travail......................... 2 1.2 Description des classes......................... 3 1.2.1 La classe de base : TTableau.................. 3 1.2.2 La classe THisto........................ 3 1.2.3 La classe TFiltre........................ 4 1.2.4 La classe TImage........................ 5 1.3 Chaînes de traitement associées.................... 5 1.3.1 La segmentation d une image................. 5 1.3.2 La détermination des contours d une image.......... 5 2 Test et validation de l application 6 2.1 Méthodes de test............................ 6 2.2 Comportement............................. 6 2.2.1 Traitement d une image simple................ 6 2.2.2 Problème d une image complexe................ 8 2.2.3 Amélioration des résultats................... 11 2.3 Qualité de l application......................... 11 Conclusion 14 A La Classe TTableau 15 B La Classe THisto 18 C La Classe TFiltre 19 D La Classe TImage 24 E Chaînes de traitement associées 30 F Diagramme de classe de l application 32 2008 Rapport TP - Version 1.2 ii
Table des figures 1 Principe d une opération de filtrage par convolution pour un pixel. 4 2 Image originale d une pièce....................... 7 3 Pièce filtrée par un filtre GradLig................... 7 4 Pièce filtrée par un filtre GradCol................... 7 5 Contours de la pièce (segmentée à 113)................ 8 6 Contours de la pièce (segmentée à 108)................ 8 7 Contours de la pièce (segmentée à 118)................ 9 8 Image originale de bateaux, considérée comme complexe...... 9 9 Bateaux contourés (segmentée à 122)................. 10 10 Contours des bateaux (segmentée à 135)............... 10 11 Contours des bateaux (segmentée à 105)............... 11 12 Somme des deux contours de la pièce................. 12 13 Somme des deux contours des bateaux................ 12 14 Diagramme de classe de l application................. 32 Liste des tableaux 1 Filtre GradLig.............................. 4 2 Filtre GradCol............................. 4 3 Exemple de tableau utilisé pour les premiers tests........... 6 4 Exemple de tableau créer par la fonction reiniimg.......... 25 2008 Rapport TP - Version 1.2 iii
Introduction Dans de nombreux domaines de la physique, il est nécessaire de recourrir à l utilisation de l outil informatique afin de réaliser du traitement d image. En effet que ce soit dans le domaine de l aerospatial, de la médecine ou de la cartographie, nous avons régulièrement recours à des processus de traitement d image tel que la détection de contours. Dans ce rapport, nous allons donc exposer la création d une bibliothéque de traitement d images qui permet de réaliser plusieurs procédures, notamment la détection de contours et le calcul de la norme d une image. Dans une première partie, nous détaillerons l application dans son ensemble et par la suite, nous examinerons le comportement de notre application. 2008 Rapport TP - Version 1.2 1/32
1 Objectif de l application 1.1 Présentation du travail Lors des procédures de traitement d images il est nécessaire d appliquer aux images différentes chaînes de traitement. Ces chaînes de traitements nécessitent l utilisation de l outil informatique, que ce soit pour l implémentation des procédures ou de la visualisation de l image traitée. Afin de créer une bibliothèque de traitements d images, il est impératif de prévoir plusieurs fonctions qui permettent d effectuer des actions spécifiques sur l image à analyser. L objectif principal de cette bibliothèque est de fournir à l utilisateur trois procédures de traitement d images. Les trois procédures à créer sont : Une procédure de calcul des valeurs des pixels d une image qui fournis également la répartition des valeurs des pixels de l image. Une procédure de seuillage d une image qui permet l obtention d une image binaire suivantla valeur des pixels, si elle est supérieure ou non à un seuil. Une procédure de filtrage par convolution d une image par un filtre. Le but de cette opération est d obtenir une image filtrée à partir d un filtre utilisé en traitement d images. Ces trois procédures vont permettre la réalisation de deux chaînes de traitement distinctes : l une permettant la segmentation d une image, c est-à-dire une image seuillée constituée de deux valeurs de pixels suivant leurs positions par rapport au seuil, et l autre la détermination des points de contours d une image par normalisation de l image filtrée. De plus cette application devra permettre une éventuelle évolution de la bibliothèque, c est-à-dire la réutilisation des différentes classes et méthodes mis en place et leurs compléments. En ce qui concerne la méthode retenue pour la réalisation du projet, nous avons adopté une démarche progressive, c est-à-dire que chaque évolution du programme à été accompagnée d une phase de test, visant à valider l intégralité du code déjà implémenté. L affichage des résultats se fait par une fonction dédiée afin de le rendre plus facilement adaptable lors de l affichage par l intermédiaire de l interface graphique. De plus, nous avons supposé que toutes les images utilisées dans cette application sont constituées de 256 niveaux d intensité. Enfin, chaque classe est constituée de deux fichiers : un fichier header contenant les prototypes des fonctions et un source contenant les définitions des méthodes utilisées dans la classe correspondante. Les phases de test sont effectuées dans un fichier principal et les deux fonctions des chaines de traitement sont regroupées dans un fichier source externe. Nous nous proposons donc, dans ce rapport, de fournir les éléments essentiels nécessaires à la compréhension de la méthode utilisée pour mener à bien ce projet, que ce soit au niveau de la construction des classes et des méthodes, mais aussi lors de la phase de test des classes et du comportement de l application. 2008 Rapport TP - Version 1.2 2/32
1.2 Description des classes Dans cette partie nous nous contenterons de décrire les actions des différentes classes, leurs contenus de manière succincte, leurs rôles dans l application et les liens qui les unissent entre elles. Un listing complet des méthodes des classes avec leurs actions sera fourni en annexes. La bibliothèque de traitement d image est constituée de quatre classes (Annexe F) : une classe de base (TTableau) et trois classes dérivées (THito, TFiltre, et TImage). À ces quatre classes se rajoute trois méthodes particulières : une méthode gérant l affichage de la matrice représentant l image désirée (affichagett ) et deux méthodes gérant les deux chaines de traitement, à savoir la segmentation et la détection des contours d une image (segmentation et contours). Toutes les classes sont constituées d un fichier header contenant les prototypes et un fichier source contenant la définition des méthodes de la classe. 1.2.1 La classe de base : TTableau Cette classe est la classe principale de l application, c est elle qui permet de générer une matrice, représentant les pixels de l image à traiter (Annexe A). C est à partir de cette classe que seront créees toute les autres classes nécessaires au traitement des images, toutes les méthodes de cette classe sont donc accessibles depuis les classes dérivées. Puisque nous ne connaissons pas à priori la nature des éléments constituant la matrice, nous avons crée un patron de classe qui permet une utilisation plus large de la classe TTableau, puisqu elle pourra contenir non seulement des entiers, des réels mais aussi des caractères. D un point de vue pratique cette classe permet : la création de la matrice, l allocation mémoire nécessaire et l initialisation des pixels à une valeur donnée. le dimensionnement la matrice en précisant son nombre de lignes et de colonnes. la suppression de la place mémoire allouée si nécessaire. un test sur la corrélation entre les dimensions de deux matrices. l écriture ou la lecture d un élément de la matrice. 1.2.2 La classe THisto Il s agit d une classe dérivée de la classe TTableau, et contient des éléments de type unsigned long int. Elle intervient notamment dans la chaine de traitement de segmentation d une image et plus précisément lors de la détermination du seuil. La matrice générée dans cette classe est en réalité un histogramme, c est-à-dire un tableau à une dimension de longeur 256, qui contient pour chaque valeur de pixel, le nombre de fois ou celle-ci apparait dans l image. La classe THisto permet (Annexe B : d initialiser les occurrences des valeurs des pixels à 0. d incrémenter celles-ci chaque fois que cette valeur est détectée. 2008 Rapport TP - Version 1.2 3/32
de lire le nombre de fois qu une valeur à été détectée. 1.2.3 La classe TFiltre Il s agit également d une classe dérivée de la classe TTableau et contient des éléments de type double. Elle permet la convolution d un tableau de même dimension que le filtre par le filtre. Cette classe sera particulièrement utile lors de la détermination des contours d une image et dans la classe TImage, afin de déterminer l image filtrée. La procédure de convolution est explicitée ci-dessous : Fig. 1 Principe d une opération de filtrage par convolution pour un pixel La formule de convolution est donnée par : N 1 M 1 Img (l, c) = n=0 m=0 Img(l + n N 1 2, c + m M 1 ) F iltre(n, m) (1) 2 Où l et c représente les coordonnées du pixel à convoluer, N et M le nombre de lignes et de colonnes du filtre. Les deux filtres utilisés dans cette application sont donnés par les tables 1 et 2 selon que l on considère le gradient de l image suivant la direction des lignes ou des colonnes. -1-1 -1 0 0 0 1 1 1 Tab. 1 Filtre GradLig -1 0 1-1 0 1-1 0 1 Tab. 2 Filtre GradCol Finalement la classe TFiltre permet (Annexe C : la lecture et le calcul des éléments positifs et négatifs du filtre la convolution d un tableau de même dimension que le filtre par le filtre la réinitialisation des filtres 2008 Rapport TP - Version 1.2 4/32
1.2.4 La classe TImage Il s agit d une classe dérivée de la classe TTableau et contient des éléments de type float. Cette classe permet la création d une image filtrée par convolution, pour cette raison elle fait appel aux classes décrites précédemment : THisto pour générer un histogramme à 256 niveaux de l image et TFiltre lors de la convolution de l image par le filtre. Il est à noter que lors de cette convolution, il a été appliqué un traitement spécifique au bord de l image, nous avons pris la décision de ne pas traiter les bords de l image, cela implique que, pour conserver la taille de l image, nous avons mis à 0 ces pixels. De plus, puisque la classe TImage permet la convolution d une image, elle modifie également la valeur des pixels de l image filtrée qui ne sont désormais plus comprise entre 0 et 255. Pour résoudre ce problème il est nécessaire de ramener le niveau d intensité de chaque pixel suivant la formule : Img (l, c) = E(255 Img(l, c) I min I max I min ) (2) où E représente la partie entière, I min et I max les intensités maximum et minimum de l image filtrée. La classe TImage permet donc de filtré une image source à partir d un filtre déterminé, elle sera utilisée lors de la détermination des contours d une image. En outre la classe TImage permet (Annexe D) : la lecture et l écriture des bornes min et max de la valeur d un pixel la création d une image test constituée de 0 et de 255 au centre de l image la détermination d un histogramme à 256 niveaux de l image une interpolation linéaire pour ramener les niveaux d intensité dans la plage [0,255] le filtrage d une image par un filtre la détermination du filtrage d une image seuillée la détermination d une image normée à partir de deux images 1.3 Chaînes de traitement associées 1.3.1 La segmentation d une image Dans cette fonction nous créons une image segmentée à partir d une image source, c est-à-dire que l on crée une image contenant deux couleurs (blanc ou noir) suivant la valeur du pixel de départ, si elle est supérieure ou non au seuil déterminé par calcul. Le résultat est donc une image noir et blanc, ou les zones noires représentent les zones plutôt sombre de l image source et les zones blanches des zones plutôt claires. 1.3.2 La détermination des contours d une image Cette fonction a pour but de révéler les contours d une image source, pour cela nous filtrons l image au moyen des filtres GradLig et GradCol qui ont pour but de calculer les gradients de l image suivant la direction des lignes et des colonnes. La 2008 Rapport TP - Version 1.2 5/32
normalisation de ces deux images fournis les contours de l image source à condition d appliquer un seuillage de l image normalisée. 2 Test et validation de l application 2.1 Méthodes de test Afin de tester le bon fonctionnement de l application, nous avons, à chaque implémentation d une nouvelle méthode, testé celle-ci sur un exemple concret. Nous avons également testé leurs intéractions avec les méthodes déjà codées. Pour mettre en évidence le bon fonctionnement des méthodes, nous avons utilisé dans un premier temps des tableaux simple et de petite dimension, sur lesquels les calculs sont aisés à faire à la main : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Tab. 3 Exemple de tableau utilisé pour les premiers tests. Par la suite nous avons utilisé des tableaux dont les valeurs étaient générées aléatoirement afin de vérifier notamment le bon fonctionnement des histogrammes et de la fonction de segmentation. Le test des méthodes au fur et à mesure nous a permis de cibler plus facilement la source des erreurs, et de ce fait nous a permit un gain de temps. 2.2 Comportement 2.2.1 Traitement d une image simple En ce qui concerne le comportement de l application nous nous apercevons que plus l image est complexe, c est-à-dire que la quantité de détails est importante, plus il est difficile d obtenir des contours net et précis. Si nous nous intéressons à l image piece.pmg (Fig. 2), nous avons une image relativement simple, avec des contours bien définis : En appliquant successivement les filtres GradLig (Fig. 3) et GradCol (Fig. 4) à cette image, nous identifions les variations rapide de niveau de gris selon respectivement les lignes et les colonnes. Il suffit à présent de normer l image et de la segmenter afin d obtenir l image finale contourée. Nous normons l image au moyen des filtres GradLig et GradCol 2008 Rapport TP - Version 1.2 6/32
Fig. 2 Image originale d une pièce Fig. 3 Pièce filtrée par un filtre GradLig Fig. 4 Pièce filtrée par un filtre GradCol 2008 Rapport TP - Version 1.2 7/32
et de la formule suivante : ImgNorme(l, c) = ImgGradLig(l, c) 2 + ImgGradCol(l, c) 2 (3) où ImgGradLig et ImgGradcol sont les images filtrées respectivement par un filtre GradLig et GradCol. Nous obtenons doncl image contourée suivante 1 : Fig. 5 Contours de la pièce (segmentée à 113) Nous voyons que dans l ensemble les contours ressortent plutôt bien, cependant certaine partie, comme le rond central, n ont pas été correctement contourées, ni la partie droite de la pièce. Si nous essayons de faire varier le niveau de segmentation, nous voyons que nous pouvons obtenir plus ou moins de détails, mais nous ne pouvons pas obtenir de contours complets, nous avons une partie ou une autre (Fig. 6 et 7). Il faudrait donc utiliser soit d autres filtres, soit une méthode différente. Fig. 6 Contours de la pièce (segmentée à 108) 2.2.2 Problème d une image complexe Si à présent nous prenons une image plus complexe, c est-à-dire qui va présenter plus de contours fin et précis et peu de grandes zones uniformes. Nous nous aper- 1 Les images de contours obtenues ont été traitées de manière à obtenir des contours noirs sur fond blanc 2008 Rapport TP - Version 1.2 8/32
Fig. 7 Contours de la pièce (segmentée à 118) cevons que notre méthode de contours n est pas optimale. Prenons donc l image bateaux.pmg (Fig. 8) comme image de ce type. Fig. 8 Image originale de bateaux, considérée comme complexe Si nous appliquons le même traitement que lors de la section précedente, nous obtenons une image contourée de la figure 9 Nous nous apercevons que le résultat est bien moins réussi que pour la pièce (Fig. 5 page 8). Les variations étant beaucoup plus nombreuses, l image apparait plus «brouillon». Si on essaye de faire varier la segmentation, l image est plus nette, mais nous avons l impression de perdre trop de détails (Fig. 10 et 11 page 10). 2008 Rapport TP - Version 1.2 9/32
Fig. 9 Bateaux contourés (segmentée à 122) Fig. 10 Contours des bateaux (segmentée à 135) 2008 Rapport TP - Version 1.2 10/32
Fig. 11 Contours des bateaux (segmentée à 105) Pour ce type d image il faut donc une approche qui permettent de faire ressortir les contours, mais qui estompe le bruit observé précedement. 2.2.3 Amélioration des résultats En regardant plus précisément les résultats obtenus pour l image de la pièce, nous nous apercevons que selon le niveau de segmentation, nous obtenons préférentiellement certains contours plutôt que d autres (Fig. 6 et 7 page 8). Il est donc naturel de se demander ce que nous obtiendrions si nous sommions ses deux images (Fig. 12 page 12). Nous voyons donc que nous obtenons les contours complets de l image. Ainsi, en mettant en rapport deux résultats différents obtenus sur la même image nous gagnons en qualité. Si nous faisons le même travail sur l image des bateaux, nous obtenons aussi une certaine amélioration (Fig. 13 page 12), même si le problème de bruit reste présent, nous avons par exemple de «vrai» contours pour les mats. 2.3 Qualité de l application Suite à la relative rapidité de conception de l application, nous pouvons envisager différentes améliorations. Premièrement, il serait intéressant d améliorer la gestion des erreurs. En effet, actuellement si nous vérifions, par exemple, la taille des tableaux lors de l appel des méthodes, il n y a pas de procedure prévue en 2008 Rapport TP - Version 1.2 11/32
Fig. 12 Somme des deux contours de la pièce Fig. 13 Somme des deux contours des bateaux 2008 Rapport TP - Version 1.2 12/32
cas d erreur. L utilisation de tout types de tableaux (entiers, réels, charactères...) nous contraint à l utlisation d exception plus lourde à mettre en place que le simple retour d une valeur. D un point de vue pratique, il faudrait améliorer l interaction avec l utilisateur. Par exemple, celui-ci devrait pouvoir choisir une image à traiter en tapant son nom dans la console, ou bien choisir interactivement le seuil pour la segmentation et les contours, ou encore entrer manuellement un nouveau filtre autre que GradLig et GradCol... Cependant ce type de développement n a pas été envisagé ici, car une interface graphique, plus adaptée et plus agréable d utilisation, sera créée durant la période Aig. Il était donc inutile de développer deux fois la même chose. Au niveau des fonctions offertes par le logiciel, nous pourrions envisager de traiter d autres formats d image que le format brute raw afin d offrir une plus grande liberté d utilisation. De même, nous pourrions traiter des images en couleur, soit en les convertissant en niveau de gris avant d effectuer la recherche des contours, soit en faisant évoluer nos méthodes afin d être directement capable de traiter les images couleurs. 2008 Rapport TP - Version 1.2 13/32
Conclusion La méthode de contours utilisée lors de cette étude s avère relativement efficace. Les images obtenues donnent une bonne idée des contours des images, surtout après un petit traitement supplémentaire. Cependant, nous avons vu qu il pouvait apparaître un bruit au niveau des surfaces non uniforme, comme le sol. Il faut donc envisager une procedure permettant d estomper ce type de perturbation. Un autre avantage de la méthode est qu elle est rapide à mettre en oeuvre, et à exécuter. Au niveau de l application en elle même, elle reste relativement sobre, et les implémentations à destination des utilisateurs n ont pas été développés. Cependant celle-ci est opérationnel, il est posible de filtrer des images par tout type de filtres, d extraire les contours, et d effectuer une segmentation. Enfin au niveau de l interface, celle-ci sera développée lors de la période Aig afin d avoir une interface graphique bien plus agréable que la console. 2008 Rapport TP - Version 1.2 14/32