Modele base sur la perception humaine (couleurs primaires en synthese additive)
Pas toujours intuitif pour selectionner une couleur
Tres repandu
Le model HLS
L'espace HLS (Hue, Lightness, Saturation)
On code une couleur par 3 composantes: teinte, luminance et saturation. L'espace ressemble a 2 cones que l'on a joint par leurs bases. Une couleur est un point de cet espace
Teinte
C'est l'angle sur le disque
rouge
jaune
vert
cyan
bleu
magenta
Luminance
La luminance est la hauteur dans le cone
Saturation
La saturation ("purete de la couleur") est la distance au centre du disque
Car nos yeux percoivent certaines couleurs mieux que d'autres (cf. la seconde formule)
Peut-on faire l'inverse (passer du niveau de gris a la couleur ?)
Non bien-sur: projection, on passe d'un image 3D a 2D, on a perdu de l'info
Avec des regles on peut se donner une colorisation de l'espace (teinte sepia, vert comme une camera de surveillance, etc.) mais on ne retrouvera pas la couleur d'origine
RGB noir et blanc
Est-il possible de passer a une image noir et blanc ?
Utile pour traiter les images "trop" riches
On binarise l'image
Qu'est-ce qu'on veut extraire de l'image ?
Y a t il un interet a passer a une image en noir et blanc ?
Codage des couleurs
Il existe differents espaces pour la representation des couleurs
Il faut etre capable de choisir le bon, en fonction de l'objectif recherche
Etre capable, dans la mesure du possible de passer de l'un a l'autre
Codage de l'image
Representation d'une image couleur
Codage d'une image par une matrice:
L'image est une fonction discrete 2D, elle est souvent codee par une matric
Pour une image codee en RGB, un point de l'image = un triplet (r,g,b) de valeurs dans la matrics
Un point de l'image = un pixel. Que signifie pixel ?
Picture element
Representation d'une image en niveaux de gris
Codage d'une image par une matrice:
L'image est une fonction discrete 2D, elle est souvent codee par une matrice
Pour une image codee en niveaux de gris, un point de l'image = une valeur dans la matrice codant la luminance
Acces aux pixels
Comment coder cette image en memoire ?
Matrice ? Vecteur ?
Comment acceder a un point de cette image ?
Comment acceder a ses voisins ?
Comment parcourir l'image ?
for(i =0; i < sx; i++)for(j =0; j < sy; j++)
offset = i + j * sx
for(j =0; i < sy; j++)for(i =0; j < sx; i++)
offset = i + j * sx
for(offset =0; offset < sx * sy;++offset)
Utiliser un iterateur ?
Resolution/Echantillonage
Discretisation spatiale (resolution)
Echantillonage (amplitude)
Nombre de couleurs - Echantillonnage
Codage par palette (couleurs indexees)
Bit(s) par pixel
Couleurs
1 bpp
???
2 bpp
???
4 bpp
???
6 bpp
???
8 bpp
???
Codage sans palette
Bits par pixel
Couleurs
Bits par canaux
16 bpp
?
?
24 bpp
?
?
32 bpp
?
?
Representation de l'image
Un moyen classique de representer une image est d'utiliser une matrice. Y a t il d'autres approches ?
Arbres (max tree, min tree, tree of shape)
Graphes
…
Maillage
On choisit intuitivement un maillage carre mais cela peut-il presenter des inconvenients ?
Y a t il d'autres maillages possibles ?
Topologie
Choix de la connexite des pixels
4-connexe:
Voisins en haut, en bas, a gauche, a droite
Pas lies aux voisins en diagonale
Plusieurs regions
8-connexe:
Une seule region
Cela pose un probleme de topologie:
Si le fond est 8-connexe (en noir), la forme (en blanc) est 4-connexe
Si le fond est 4-connexe (en noir), la forme (en blanc) est 8-connexe
Contradiciton avec le theoreme de Jordan
Que faire ?
Vivre avec
Changer la forme de pixels
Intercaler des frontieres entre les pixels
…
Changer la forme de pixels:
Codage en memoire:
Pour:
Plus de probleme de connexite
Plus de probleme de distance
Tout le monde est a la meme distance
Contre:
Gestion de la memoire
Inteprete chaque ligne de la matrice comme ayant un decalage offset
Intercaler des frontieres entre les pixels
Les frontieres sont determinees par les inter-pixels
Exemple d'arbre: Max tree
A chaque fois qu'on a 2 regions qui se separent, on cree des branches
Stockage/Transfer
Differents formats:
JPEG, TIFF, PNM, PNG, BMP, GIF, TGA
Choix en fonction de criteres
Avec ou sans compression (avec ou sans perte)
Avec ou sans couleur
Avec ou sans palette
Une seule image ou plusieurs
Optimise pour une architecture ? (Ex. BMP sauvegarde a l'envers)
Libre ou pas (Ex. GIF et Compuserve)
Exemple
Format PNM
PBM: noir et blanc
PGM: niveaux de gris
PPM: couleurs
2 variantes
PNM
TGA
Format tres simple (extrait de spec)
Application
On a vu pas mal de choses sur la formation d'une image
On va l'appliquer
en changeant les couleurs ou l'illumination d'une image
en changeant l'organisation spatiale des pixels de l'image
en combinant des changements dans le couleurs et dans l'organisation spatiale des pixels
Changement d'illumination
En tous points de la scene, la reponse du capteur est donne par:
Avec
l'eclairage
la reflectance de la surface (fonction de la longueur d'onde )
la sensitivite du capteur qui (pour simplifier est supposse repondre a une seule longueur d'onde: ) On a donc:
La meme image prise avec 2 niveaux d'illuminations differents:
Donc:
Et donc:
Pour changer l'illumination il faut donc multiplier les valeurs des pixels par une constante (et non additionner/soustraire par une constante comme c'est usuellement fait)
Correction d'illumination non uniforme
Soit une image acquise avec un eclairage non uniforme
Soit l'image du fond
La soustraction des deux donne:
Le ratio des 2 donne:
Difference vs Ratio
Modification des couleurs de l'image
Application : effet artistique effet sepia
On associe a un niveau de luminance une couleur
Resultat:
Modification de l'organisation spatiale des pixels
Application: effets artistiques
Les fonctions et ne tiennent pas forcement compte de la valeur du pixel
Rotation - cisaillement
Etirement - retrecissement
Ondulations
Spirale
Tranlations aleatoires
…
La 2e image c'est quand on me chatouille le cou
La transformation doit etre appliquee dans ce sens !
Application: le morphing d'images
Modification des couleurs et de l'organisation spatiale des pixels
Application: le morhping
Vu la structure d'une image, il est possible d'appliquer des operateurs sur ces images
Exemple: la moyenne
En combinant
Une moyenne ponderee des images (dont les poids evoluent au cours du temps)
Un champ de vecteur de translation
Problemes de precision
Sur les fonctions colorimetriques
Sur les transformations spatiales
La correction gamma
Retour sur la perception
La perception de l'oeil est logarithmique
La repartition des niveaux d'energie n'est donc pas lineaire mais exponentielle
Tous les calculs fait jusqu'a present sont completement faux car 50% du signal n'est pas a la moitie du niveau de gris (128) mais a 186.
Les niveaux de gris ne sont que des numeros, faire des operations (moyenne, addition, application de filtres, interpolation…) n'a pas vraiment de sens
Dans la pratique, on omet souvent la correction gamma lors des etapes de filtrages
C'est faux
Il y a un compromis entre precision du resultat et vitesse
Retour sur le passage de la couleur en niveuax de gris
Espace CIE XYZ 1931
donne la luminance
L'interpolation
Que faire lorsque l'on doit "chercher" la valeur d'un pixel mais que l'on ne tombe pas precisement sur un pixel ?
1er solution (rapide): prendre la du pixel le plus proche
2nd solution: Faire une interpolation bi-lineaire
Peut-on faire mieux ?
Interpolation bicubique
Utilise 4 points (calcul de la derivee)
Interpolation bicubique
On connait les valeurs pour , , et
Mais aussi
On peut donc en conclure que les coefficients a,b,c,d du ploynome et donc interpoler les valeurs intermediaires du signal entre 0 et 1.
Artefact:
Autres interpolation
Il existe d'autres methodes d'interpolation
Pour faire le choix de l'interpolation, il faut faire un compromis entre vitess et qualite
Conclusion
Codage de l'image et de la couleur
Espaces de couleurs, passage d'un espace a l'autre