Codage informatique des couleurs - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Généralisation du modèle de couleur

Considérons l'espace à 3 dimensions basé sur les composantes

  • Rouge,
  • Vert, et
  • Bleu

où tous les points ont une position définie dans un repère orthonormé par les 3 coordonnées (r,v,b).

L'œil humain n'est capable de percevoir qu'une partie de cet espace. L'ensemble des points de cet espace qui correspond aux possibilités visuelles de l'œil humain forme un volume convexe ou patatoïde, qui, projeté sur un plan convenablement orienté, donne une figure en forme de fer à cheval comme le montre l'image suivante, où les nombres à 3 chiffres, placés près du bord du fer à cheval, représentent les valeurs en nanomètres des longueurs d'onde associées aux couleurs monochromatiques saturées de l'arc-en-ciel :

Image-Gamut couleurs.png

Ce patatoïde correspond à ce que l'on appelle le gamut de l'œil humain. La figure ci-dessous, qui représente pour chaque type de support d'image (film, moniteur d'ordinateur, imprimante) un gamut distinct (et toujours plus réduit que celui de l'œil humain) illustre bien la pauvreté de certains supports en termes de rendu réel des couleurs.

Maintenant, imaginons le cube de unitaire où M=(255,255,255). Suivant ce cube, M sera la couleur blanche tandis que (0,0,0) est noir. Si on se positionne maintenant suivant cet axe [OM) depuis le point M, on observe

  • un disque autour de ce point dont la couleur passe du Rouge, puis au Vert au Bleu puis revient au Rouge (si on fait un tour complet) avec tous les intermédiaires.
  • suivant les rayons de ce disque, la couleur est pastel vers le centre et saturée vers le bord.
  • suivant l'axe [OM), on a une couleur qui est claire en allant vers M et sombre à allant vers O.

On a retrouvé ainsi le repère TSL ou HSL.

Une façon de représenter ce repère est de projeter le rayon de saturation et l'angle de teinte sur un cylindre qui est déplié suivant sa hauteur, on obtient le schéma suivant :

Codage HSL.png

La transformation RVB/TSL est une simple transformation de repère qui peut être réalisée par une série de rotations et de translations combinées avec un passage d'un système de coordonnées cartésiennes à un système de Coordonnées polaires ; Les correspondent à une transformation de ce type (parmi d'autres possibles).

On constate à partir de maintenant que la représentation dite en « RVB » ne peut proposer qu'un gamut réduit des possibilités :

  • soit le cube propose des combinaisons inaffichables ou invisibles,
  • soit le cube est inscrit dans le patatoïde.

Le choix pratiqué a été le second. On a donc cherché d'autres formes de repères qui permettent d'agrandir le gamut.
Par exemple, si on utilise pour r, v et b des réels au lieu d' entiers, on peut obtenir un dégradé de teintes parfait car continu.
En outre, le recours à une échelle logarithmique plutôt que linéaire permettra d'obtenir plus de dynamique sur une zone choisie.

Par ces artifices, il devient dès lors possible de disposer de plus d'informations que le support (voire l'œil) ne peut en afficher.
Cette catégorie de procédés appartient aux images dites HDR.

Formules de changement de système de codage

RVB vers TSL

Voici maintenant les formules mathématiques qui régissent le passage des coordonnées R, G, B d'une couleur donnée aux coordonnées T, S, L de la même couleur, et réciproquement (les formules ci-dessous correspondent notamment sous Windows au codage utilisé dans l'utilitaire Paint livré avec les divers systèmes d'exploitation de Microsoft tournant avec des processeurs en 32 bits) :

Passage de R\, , V\, , B\, à T\, , S\, , L\,
  • Calcul de la teinte T\,  :

On doit d'abord calculer les 3 grandeurs préalables suivantes :
M=\max(R, V, B)\, (la plus grande des 3 composantes)
m=\min(R, V, B)\, (la plus petite des 3 composantes)
\Delta=M-m\, (l'amplitude, c'est-à-dire la différence entre M\, et m\, )

puis la valeur de T_0\, qui se calcule ainsi :
- si R est supérieur à V et à B : T_0=(V-B)/\Delta+0\,
- si V est supérieur à B et à R : T_0=(B-R)/\Delta+2\,
- si B est supérieur à R et à V : T_0=(R-V)/\Delta+4\,

et enfin, en déduire la teinte T\,  :
T={\frac{1}{6}\,(T_0*T_{max})} modulo   T_{max}\, , avec T_{max}=240\,

  • Calcul de la saturation S\,  :

- si M+m < V_{max}\,  : S=\frac{ \Delta}{M+m}\ S_{max}
- si M+m\ge V_{max}\,  : S=\frac{ \Delta}{2\ V_{max}-(M+m)}\ S_{max} ,
avec V_{max}=255\, et S_{max}=240\, .

L=\frac{M+m}{2\ V_{max}}\ L_{max} , avec L_{max}=240\, .

Remarques : les formules donnant la valeur de la teinte T\, sont universelles ; en revanche, il existe de nombreuses variantes pour le calcul de la saturation S\, et de la L\, mais elles respectent toutes les règles suivantes :

  • si R, V et B sont tous égaux, alors T est égal à 160 (dans Paint) et S est égal à 0 (teinte grise complètement désaturée), et réciproquement ;
  • si R, V et B sont tous égaux à 0, alors L est égal à 0 (noir absolu), et réciproquement ;
  • si R, V et B sont tous égaux à V_{max}\, , L est égal à L_{max}\, (blanc parfait), mais la réciproque n'est pas toujours vraie.

Voici donc quelques variantes:

  • pour la luminance:
    • L = \frac{L_{max}}{V_{max}} M\,
    • L = \frac{L_{max}}{V_{max}} (0.239 * R + 0.686 * G + 0.075 * B)\,
    • L = \frac{L_{max}}{V_{max}} (0.300 * R + 0.590 * G + 0.110 * B)\,
  • pour la saturation:
    • S = S_{max}\ \frac{\Delta}{M}\, .

Note :

TSL vers RVB

Passage de T\, , S\, , L\, à R\, , V\, , B\,
  • Calculs préalables : on doit commencer, comme dans le cas précédent, par calculer les 4 grandeurs intermédiaires T_0\, , M\, , m\, et \Delta\,  :

Sachant que l'on a : V_{max}=255\, et T_{max}=L_{max}=S_{max}=240\, , on calcule d'abord :

T_0=\frac{6\ T}{T_{max}} , puis

 \begin{matrix}\mbox{- si }L < L_{max}/2\,\mbox{, on calcule : } & M=V_{max}\ \frac{L}{L_{max}}\ (1+\frac{S}{S_{max}})\\\mbox{et} & \ \\ \ & m=V_{max}\ \frac{L}{L_{max}}\ (1-\frac{S}{S_{max}}) \end{matrix}

 \begin{matrix}\mbox{- si }L \ge L_{max}/2\,\mbox{, on calcule : } & M=V_{max}\ \left [\frac{L}{L_{max}}\ (1-\frac{S}{S_{max}})+\frac{S}{S_{max}}\right ]\\\mbox{et} & \ \\ \ & m=V_{max}\ \left [\frac{L}{L_{max}}\ (1+\frac{S}{S_{max}})-\frac{S}{S_{max}}\right ] \end{matrix} ,

d'où l'on peut tirer : \Delta=M-m\, .

Il devient dès lors possible de déterminer les valeurs des 3 composantes R\, , V\, , B\,

Note :

M = V_{max}\ \left [\frac{L}{L_{max}}\right ]\

puis \Delta = M\ \left [\frac{S}{S_{max}}\right ]\ et enfin

m = M - \Delta\,

.

  • Calcul des trois composantes R\, , V\, , B\,  :

Les formules à utiliser dépendent de la valeur de la partie entière de T_0\,  :
Soit : i=E( T_0)\,

 \begin{matrix}\mbox{- si }i = 0 \, \mbox{ : } & B & = & m\,\\ \ & V & = & m + T_0\; \Delta\,\\ \ & R & = & M\, \end{matrix}

 \begin{matrix}\mbox{- si }i = 1 \, \mbox{ : } & B & = & m\,\\ \ & R & = & m + (2-T_0)\; \Delta\,\\ \ & V & = & M\, \end{matrix}

 \begin{matrix}\mbox{- si }i = 2 \, \mbox{ : } & R & = & m\,\\ \ & B & = & m + (T_0-2)\; \Delta\,\\ \ & V & = & M\, \end{matrix}

 \begin{matrix}\mbox{- si }i = 3 \, \mbox{ : } & R & = & m\,\\ \ & V & = & m + (4-T_0)\; \Delta\,\\ \ & B & = & M\, \end{matrix}

 \begin{matrix}\mbox{- si }i = 4 \, \mbox{ : } & V & = & m\,\\ \ & R & = & m + (T_0-4)\; \Delta\,\\ \ & B & = & M\, \end{matrix}

 \begin{matrix}\mbox{- si }i = 5 \, \mbox{ : } & V & = & m\,\\ \ & B & = & m + (6-T_0)\; \Delta\,\\ \ & R & = & M\, \end{matrix}



Page générée en 0.157 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales
Version anglaise | Version allemande | Version espagnole | Version portugaise