Modélisation des images 6
Transcription
Modélisation des images 6
Modélisation des images Tâches et contours Modèles d’images Images vectorielles ou matrice de points Le terme image vectorielle est impropre Une image dite vectorielle n’est en fait qu’une image possédant un modèle géométrique 2D Il existe des moyens de modéliser des images, plus proche de la matrice de points Ces modèles permettent la conversion de l’image dans les deux sens (modèle matrice de points) Philippe Martin – Faculté des sciences de Nantes Modèles d’images Codage des images Principe : on travaille toujours sur les pixels (contrairement aux formats compactés de type jpeg) Différents modèles : matrices de points codage en ligne arbres quaternaires codage de contours palettes Philippe Martin – Faculté des sciences de Nantes Codage des images Matrices de points c’est la manière la plus évidente de mémoriser une images : on stoque l’ensemble de ses pixels dans un tableau à deux dimensions pour chaque pixel on peut mémoriser les trois composantes R, V, B (3 octets pour les images en millions de couleurs) ou bien pour chaque pixel on peut mémoriser les composante Y, U, V (luminance Y et deux composantes de chrominance U et V) cette dernière technique prend en compte la physiologie de la vision et permet d’économiser de la mémoire sur U et V, l’œil étant plus exigeant sur la luminance Philippe Martin – Faculté des sciences de Nantes Codage des images Codage en ligne On remplace une suite contiguë de pixels identiques, par leur quantité et leur couleur. Si par exemple on rencontre en parcourant la grille la suite de pixels : 34, 34, 34, 56, 56, 89, 89, 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23. on la remplace par : 3, 34, 2, 56, 5, 89, 12, 0, 1, 1, 23 L’algorithme est non destructif. Par contre on comprend tout de suite que cela n’est efficace que si l’image comporte des régions entières de la même teinte, mais que cela devient catastrophique pour une image qui serait totalement aléatoire. Ce codage est très efficace pour des images en à plat. L’efficacité est faible avec des images provenant de photographies à cause des variations très fines de teintes d’un pixel à son voisin. Cet algorithme peut même faire augmenter le poids de l’image par rapport à la matrice de points ! Dans le cas d’images bicolores, on peut simplifier le codage. On mémorise d’abord la première couleur rencontrée, puis on stocke successivement les longueurs des segments formés de pixels de même couleur. Comme il n’y a que deux couleurs, on sait qu’il y a alternance d’un segment au suivant. Philippe Martin – Faculté des sciences de Nantes Modèles d’images Arbres quaternaires (Octrees) C’est en 2D la même notion que celle d’arbre octal pour les matrices de voxels On représente une image par un arbre L’image entière est représentée par la racine de l’arbre. Une zone rectangulaire qui n’est pas unie est représentée par un nœud ayant 4 fils, en divisant la zone en quatre. Les feuilles représentent des zones unies de l’image et portent la couleur. Philippe Martin – Faculté des sciences de Nantes Modèles d’images Arbres quaternaires Philippe Martin – Faculté des sciences de Nantes Arbres quaternaires Arbres quaternaires Philippe Martin – Faculté des sciences de Nantes Modèles d’images Arbres quaternaires La représentation sous forme d’arbre quaternaire permet un compactage de l’image L’accès à chaque pixel reste facile Le compactage profite de la cohérence spatiale dans les deux direction x, y à la fois Certaines opérations peuvent se faire directement sur l’arbre quaternaire sans revenir à la matrice de pixels (lumière, traitement de couleur, opérations de composition,...) Philippe Martin – Faculté des sciences de Nantes Modèles d’images Taches on appelle tache une portion d’image uniformément colorée, c’est-à-dire dont tous les pixels ont la même couleur pour certains type d’applications il est intéressant de représenter une image comme juxtaposition de taches ce sont des images en à plats (graphiques, schéma, bande dessinées,... il est possible de modéliser une tache autrement qu’en stockant l’ensemble de ses pixels Philippe Martin – Faculté des sciences de Nantes Taches Codage par le contour on peut coder une tache par son contour, celui-ci étant représenté par la suite des opérations qui assure le tracé de ce contour chacune de ces opération indique comment passer d’un pixel du contour à son suivant voisin immédiat la notion de voisin demande de préciser le type de connexité : 8-connexité ou 4-connexité selon que l’on accepte ou pas comme voisins les pixels qui se touche par un angle Philippe Martin – Faculté des sciences de Nantes Taches Connexité 4-connexité 8-connexité V V V V P V V V V V V P V V Philippe Martin – Faculté des sciences de Nantes Taches Codage par le contour on se place en 8-connexité. Les pixels voisins de P peuvent être codés par un entier entre 1 et 8. V1 V2 V3 V8 P V4 V7 V6 V5 un contour peut donc être codé de manière efficace comme une liste d’entiers. Chaque entier représente le pixel suivant le pixel courant sur le contour. Un pixel de départ doit être précisé. Philippe Martin – Faculté des sciences de Nantes Taches Exemple de codage d’une tache par le contour P Le contour du schéma a comme codage en partant de P et en tournant dans le sens positif : 6666666566654445664444432212222221888888822188 Une telle représentation est beaucoup plus compacte que la matrice de pixels. Elle permet de représenter des contours et aussi des taches colorées. Philippe Martin – Faculté des sciences de Nantes Codage par le contour Algorithme on suppose donnée une image bicolore et l’on souhaire extraire le contour d’une tache P P est un pixel supposé connu sur le bord de la tache P possède donc un de ses voisins 4-connexe 2,4,6 ou 8 qui n’est pas dans la tache (ici 8 et 2) on considère le voisin 8. En tournant autour de P (sens positif) on va chercher le premier pixel Q voisin de P se trouvant dans la tache (ici Q est le voisin 6) on prend ce pixel Q comme pixel de départ et l’on recommence 1 2 3 8 P 4 7 6 5 il faut être capable de choisir pour Q un pixel voisin en 4-connexité qui est en dehors de la tache (transparent suivant) Philippe Martin – Faculté des sciences de Nantes Codage par le contour Algorithme En fonction du cas de figure, on peut facilement déterminer un voisin de Q qui n’est pas dans la tache. Comme Q est le premier voisin de P dans la tache, le pixel qui le précède dans la rotation autour de P n’est pas dans la tache Pour chaque numéro de Q (en tant que voisin de P), voici le voisin 4-connexe de Q (numéro de voisin de Q !) : Q 1 4 2 3 8 P 4 7 6 5 1 4 2 4 3 6 4 6 5 8 6 8 7 2 8 2 1 2 3 2 8 P 4 Q 7 6 5 Philippe Martin – Faculté des sciences de Nantes Codage par le contour Algorithme P Début Action Contour(T : tache) P ← point du contour tel que Voisin(P, 8) n’appartienne pas à T PixelCourant ←P Direction ← 8 Direction ← Direction – 1 Premier ← vrai Tant que (PixelCourant ≠ P) ou Premier faire //recherche du point suivant sur le contour, situé le plus à l’extérieur Trouve ← faux Tant que non Trouve faire NumSuivant ← Voisin(PixelCourant, Direction) Si pixel (NumSuivant) appartient à T alors PixelCourant ← pixel (NumSuivant) Trouve ← vrai Choix selon NumSuivant 1, 2: Direction ← 4 3, 4: Direction ← 6 5, 6: Direction ← 8 remarques : 7, 8: Direction ← 2 Fin choix la recherche du voisin réussit toujours fin si sauf éventuellement si le premier point P Direction ← Direction-1 est seul isolé. fin tant que tous les calculs sur la variable Direction Premier ← faux se font modulo 8. fin tant que Fin 1 2 3 8 P 4 7 6 5 Philippe Martin – Faculté des sciences de Nantes Codage par palette Utilisation d’une palette Les millions de couleurs sont utiles dès que l’on veut reproduire des photographies ou des images de synthèse avec des dégradés de teintes très réguliers. Toutefois il est très rare que toutes les teintes disponibles parmi ces millions figurent simultanément dans la même image. Par exemple un paysage va sans doute comporter de nombreuses nuances de vert, de bleu et autres teintes que l’on rencontre dans la nature. Un algorithme consiste alors à faire un inventaire des teintes qui figurent dans l’image, à les ranger dans une table auxiliaire nommée palette en leur affectant un numéro. Philippe Martin – Faculté des sciences de Nantes Codage par palette Palette de 256 couleurs Supposons qu’une image renferme moins de 256 couleurs. Chacune de ces couleurs peut être repérée par un numéro entre 0 et 255. La grille qui représente l’image va maintenant pouvoir faire référence à cette palette : au lieu d’indiquer pour chaque pixel la valeur absolue de la couleur, on indique le numéro de la couleur dans la palette. C’est dans la palette que figure le détail des trois valeurs RVB. Ainsi une image de 1 Mpixel qui représente en RVB 3 Mo demande maintenant : 1 octet par pixel soit 1Mo plus 256 x 3 octets pour la palette soit moins de 1001 Ko en tout. Philippe Martin – Faculté des sciences de Nantes Codage par palette Création d’une palette Si le nombre de couleurs réellement présentes dans l’image est inférieur à 256, ce mode de codage est non destructif. Si le nombre de couleur est supérieur à 256, on est amené à identifier certaines couleurs très voisines pour ramener le nombre à 256. Dans ce cas il y a perte de qualité, par rapport à l’image initiale. Dans certains cas on utilise une palette pré-définie, indépendante de l’image (palette système par exemple). Ce procédé est acceptable pour des schémas ou graphiques lorsque le choix des couleurs peut s’accommoder de variations importantes. Par contre les résultats sont désastreux au niveau qualité pour des photographies. Philippe Martin – Faculté des sciences de Nantes Codage par palette Création d’une palette Différents algorithmes sont utilisés pour construire une palette à partir de l’image. Nous nous intéressons au cas problématique où le nombre de couleurs de l’image est supérieur à 256. On peut imaginer de parcourir les pixels de l’image et ranger leur couleur dans la palette au fur et à mesure, chaque fois qu’une nouvelle couleur est rencontrée. Lorsque la palette est pleine, il faut accepter l’idée de perdre des couleurs. On ne peut pas ignorer les pixels non encore examinés car ils peuvent renfermer des couleurs très différentes de celle déjà rangées. On peut lorsque la palette est pleine et que l’on rencontre une couleur C, chercher parmi les couleurs déjà rangée la couleur la plus proche de C. Une notion de distance est facile à définir dans l’espace RVB (distance euclidienne ou du max par exemple). On remplace alors la couleur de la palette par la moyenne entre elle et C. Philippe Martin – Faculté des sciences de Nantes Codage par palette Création d’une palette L’inconvénient de cet algorithme est qu’il peut favoriser très fortement les couleurs qui se présentent en premier. Il est préférable de travailler de manière plus globale en tenant compte de l’histogramme de répartition de toutes les couleurs dans l’image. On peut privilégier les couleurs qui sont les plus présentes dans l’image en se basant sur cet histogramme de répartition. Supposons cet histogramme construit; on peut ensuite classer les couleurs selon un critère et effectuer des regroupement en classes. Philippe Martin – Faculté des sciences de Nantes Codage par palette Création d’une palette L’objectif est de trouver en fin de compte 256 classes. L’idée est de chercher les points de ruptures. On regroupe dans la même classe des couleurs proches et l’on détermine une séparation d’une classe à une autre lorsque l’écart entre les deux classes est important. Ces regroupement peuvent se faire selon des critères de fréquence d’apparition de chaque couleur. Des techniques d’analyse de données sont utilisées. Différentes méthodes sont souvent proposées, aboutissant à des palettes différentes et donc à des images différentes. Philippe Martin – Faculté des sciences de Nantes