TD 5 : Espaces de couleur, perception et niveaux de gris

Résumé du TD

Le but du TD est de charger une image et d'expérimenter avec les différents espaces de couleur vus en cours (RGB, XYZ, Lab...)

Instructions

Téléchargez et compilez le squelette de code fourni. Il charge une texture nommée "texture.png" et il l'affiche (en utilisant le plaquage de textures OpenGL). Il nécessite la librairie libpng pour fonctionner ; il vous faudra peut-être l'installer.

Je vous laisse le soin de trouver une image en PNG et de la placer dans le dossier TD5.

Conversion en noir et blanc

Dans un premier temps, nous allons convertir cette image en niveaux de gris.

D'abord en utilisant Y (du modèle XYZ) comme valeur de niveau de gris. Y correspond à la luminance associée à la couleur, donc à sa valeur en noir et blanc.

Je vous rappelle la matrice de conversion RGB vers XYZ :

Ensuite, en utilisant le canal L (du modèle L*a*b). L se calcule à partir de Y, mais est perceptuellement uniforme :

(Xn,Yn,Zn) correspondent à un blanc de référence, par exemple D65. Si vous voulez, vous pouvez ajouter qu'on passe de l'affichage de Y à celui de L en tapant sur une touche, ce qui permet de les comparer.

Affichage multi-canal

L'inconvénient des programmes précédents est qu'ils ne permettent pas de comparer les différents canaux entre eux (R, G et B, par exemple, ou X, Y et Z). On va afficher plusieurs canaux sur la même image.

Pour faire ça (et éviter d'avoir à manipuler plusieurs tableaux de données), on va réduire l'image d'origine à 1/4 de sa taille, et placer les 3 canaux dans les 3 autres quarts (cf. image dans le titre).

Faites Une première boucle pour réduire l'image au 1/4, et stocker l'image réduite dans le premier quart du tableau.

Ensuite, parcourez l'image réduite (boucle sur la moitiée de la largeur et la moitié de la hauteur), extrayez les canaux et placez les dans les trois autres quarts du tableau.

Affichez trois types de canaux différents :

Je rappelle la formule pour calculer L*, a* et b*:

Avec :

Note : C'est la même formule qu'au dessus, mais avec un niveau de sophistication supplémentaire, pour les petites valeurs de X,Y et Z.

S'il vous reste du temps, vous pouvez aussi afficher YCbCr ou HSV.

Si vous voulez aller plus loin...

La conversion en noir-et-blanc en partant de la couleur est encore un domaine de recherche ouvert. Un article récent (Apparent grayscale) propose un nouvel algorithme et en même temps fait le point sur les autres méthodes de génération de niveaux de gris.

L'image que j'ai utilisée est extraite d'une publication récente (qui n'a cependant rien à voir avec ce sujet).