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