roue des couleurs

Cercle Chromatique des teintes

Cette page fait un usage intensif des canvas, il se peut donc qu'elle ne s'affiche pas correctement dans les navigateurs obsolètes.

Espace de couleur

Différence entre RGB, HSV, HSL. Et comment passer de l'un à l'autre.

En synthèse additive, toutes les couleurs peuvent être représentées grâce à trois couleurs primaires de base: le rouge, le vert et le bleu. Mais ce système est difficile à manipuler pour éclaicir ou assombrir une couleur quelconque. C'est pourquoi d'autre représentations basées sur la teinte ont vu le jour.

Pour des explications plus détaillées http://en.wikipedia.org/wiki/HSL_and_HSV.

Calcul de la teinte

La teinte est représentée par un angle sur le cercle des couleurs. Pour les modèle HSL et HSV le calcul est le même.
On calcul d'abord le maximum et le minimum des composantes RGB, puis leur différence nommé Chroma qui représente la quantité de couleur. Si chroma est nul, alors la couleur RGB de départ était un gris et il n'est pas possible de calculer une teinte.
Les teintes sont disposées suivant un cercle : Rouge (0°), Jaune (60°), Vert (120°) , Cyan (180°), Bleu (240°), Magenta (300°).

	-- r,g,b dans [0 1], H dans [0 360], H est la teinte --
	Max = max(r,g,b), min = min(r,g,b), 
	Chroma = Max - min
	Si Max == min	Alors H = 0
	Si Max == r	Alors H = ( 60 * (g - b)/Chroma + 360°) modulo 360° 
	Si Max == g	Alors H = ( 60 * (b - r)/Chroma + 120°) 
	Si Max == b	Alors H = ( 60 * (r - g)/Chroma + 240°) 

Le modèle HSV

representation HSV

L'espace de couleur HSV

La Valeur est la « brillance » de la couleur. Elle est définie comme la plus grande composante d'une couleur, notre Max ci-dessus. Cela revient à placer les couleurs primaires et secondaires (cyan, jaune, magenta) dans un même plan que le blanc.


La Saturation est l'« intensité » de la couleur. Elle est définie comme étant le Chroma divisée par la Valeur. Un gris a donc une saturation égale à zéro.


On définit deux couleurs comme complémentaires si mélangées ensemble, elle produisent un gris.
Soit une couleur (h, s, v) dans l'espace de couleur TSV, il existe un complement (h', s', v') tel que quand (h, s, v) et (h', s', v') sont mélangées en proportions égales, la saturation de la couleur produite vaut 0. Alors,


	t' = t + 180° modulo 360°

	v' = v * (s - 1) + 1 

	s' = v * s / v'

voir http://en.wikipedia.org/wiki/HSL_and_HSV

Le modèle HSL

representation HSL

L'espace de couleur HSL

La Lumière est la luminosité (lightness). Elle est définie comme la moyenne de la plus grande et de la plus petite composante d'une couleur. Cela revient à placer les couleurs primaires et secondaire dans un plan à mi-chemin du blanc et du noir.  L = ( Max + min ) / 2 


La Saturation est le taux de pureté de la couleur. Comme dans le modèle HSV, elle s'obtient en divisant le Chroma de la couleur par la valeur maximum possible du Chroma pour cette couleur. Ici on calcule donc :  si L < 1/2, S = C / 2L sinon S = C / ( 2 - 2L ) .


Ce modèle est à ne pas confondre avec le modèle HSV (ou HSB). En HSV, couleurs pures et blanc ont la même "valeur" ou "Brigthness", en HSL seul le blanc est à une lumière de 100%, cette notion de "Lightness" étant plus proche de la notion scientifique de luminance que ne l'est la composante "Brightness".

voir http://en.wikipedia.org/wiki/HSL_and_HSV

Calcul des composantes RGB à partir de HSV ou HSL

Pour retrouver les composantes RGB, il suffit de faire les calculs inverses:

	-- h dans [0 360], C dans [0 1] (chroma), min dans [0 1] --
	cadran = h / 60  -- correspond au 3 couleurs primaires et 3 couleurs secondaires

	X = C * ( 1 - abs(cadran % 2 - 1) ) -- % est l'opérateur modulo, 

	-- X correspond à un angle +/- 30° autour du cadran --

	Si h est indéfini alors R = min, G = min, B = min -- gris
	Si h < 1 Alors 	R = C + min, 	G = X + min, 	B = min
	Si h < 2 Alors 	R = X + min,	G = C + min, 	B = min
	Si h < 3 Alors 	R = min, 	G = C + min, 	B = X + min
	Si h < 4 Alors 	R = min, 	G = X + min, 	B = C + min
	Si h < 5 Alors 	R = X + min, 	G = min, 	B = C + min
	Si h < 6 Alors 	R = C + min, 	G = min, 	B = X + min

Le modèle YPrPb ou YUV et dérivés

Le signal YUV est créé depuis une source RGB (rouge, vert et bleu). Les valeurs de R, G et B sont additionnées selon leur poids relatif pour obtenir le signal Y. Ce dernier représente la luminance de la source. Le signal U ( ou Pb ) est obtenu en soustrayant le Y du signal bleu d'origine ; de façon similaire le V ( ou Pr ) est obtenu en soustrayant Y du signal rouge. Ces opérations peuvent facilement être réalisées au moyen d'un circuit analogique.


Cela permet de coder une image en noir et blanc et de lui ajouter 2 composantes chromatiques. En pratique on utilise deux constantes Kr et Kb pour effectuer tous les calculs. La norme ITU-R BT.601 définit Kr = 0.299, Kb= 0.114. En appliquant la même valeur Y au trois composantes R, G, B on obtient une image en noir et blanc.


	-- R, G, B, Y dans [0 1] -- Pb,Pr dans [-0.5  +0.5] --
	
	Y = Kr * R + ( 1 - Kr - Kb ) * G + Kb * B
	U = Pb = 0.5 * ( B - Y ) / ( 1 - Kb ) , ecart au bleu
	V = Pr = 0.5 * ( R - Y ) / ( 1 - Kr ) , ecart au rouge


	-- Calcul inverse --

	R = 2 * ( 1 - Kr ) * Pr + Y
	B = 2 * ( 1 - Kb ) * Pb + Y
	G = ( Y - Kr * R - Kb * B ) / ( 1 - Kr - Kb ) 


Différents système dérivés sont construits en appliquant un offset et un facteur d'échelle à ces valeurs, par exemple pour les normes MPEG2, JPEG, YDbDr, etc.

NormeOffsetYEchelle YOffset UVEchelle UVFormules
MPEG216219128224 MPEG2 = offset 16, Ymax = 235, Pmax=240
Y' = 16 + 219 * Y
Cb = 128 + 224 * Pb
Cr = 128 + 224 * Pr
JPEG0255128255 JPEG = offset 0, Ymax = 255 , offsetC = 128, Pmax = 255
Y' = 255 * Y
Cb = 128 + 255 * Pb
Cr = 128 + 255 * Pr
YCCoffsetYscaleYoffsetCscaleC
Y' = offsetY + scaleY * Y
Cb = offsetC + scaleC * Pb
Cr = offsetC + scaleC * Cr

Pour retrouver les valeur R, G, B à partir de YCbCr il suffit de faire les transformations inverses:

	Y = ( Y' - offsetY ) / scaleY
	Pb = ( Cb - offsetC ) / scaleC
	Pr = ( Cr - offsetC ) / scaleC

	R = 2 * ( 1 - Kr ) * Pr + Y
	B = 2 * ( 1 - Kb ) * Pb + Y
	G = ( Y - Kr * R - Kb * B ) / ( 1 - Kr - Kb ) 

	--	R, G, B  dans [0 1]

voir http://en.wikipedia.org/wiki/YCbCr, http://discoverybiz.net/enu0/faq/faq_YUV_YCbCr_YPbPr.htm

Le modèle CIEL-Lab

representation LAB

L'espace de couleur CIELab

Le système Lab est issu du CIE XYZ. Il essaye de prendre en compte la réponse logarithmique de l'oeil. Il possède le grand avantage d'être uniforme.

Une des difficultés majeures de ce système est qu'il utilise un système mixte de repérage des points de couleur. La saturation est mesurée de manière cartésienne, alors que la teinte et la luminosité sont mesurées de manière angulaire.

L'espace CIE XYZ est une étape intermédiaire obligée de la conversion. L'espace Lab est en effet défini par rapport à l'espace XYZ.

Lorsqu'il s'agit de travailler sur les couleurs d'une image, comme dans le cas d'une quantification, deux couleurs qui sont proches dans l'espace de couleur (au sens de la distance euclidienne le plus souvent), peuvent paraître assez différentes pour l'oeil, ce qui est le cas pour l'espace des couleurs RGB.

Par contre, dans l'espace LAB qui est uniforme, deux couleurs proches en distance le sont aussi pour l'oeil.

	-- Formules --
RGB vers XYZ ( matrice )
	X     0.618  0.177  0.205   R
	Y  =  0.299  0.587  0.114 * G 
	Z       0    0.056  0.944   B 
XYZ vers RGB ( matrice inverse )
	R     1.876 -0.533 -0.343   X
	G =  -0.967  1.998 -0.031 * Y 
	B     0.057 -0.118  1.061   Z

XYZ vers LAB -- Xn, Yn, Zn sont les valeurs pour R G B = ( 255, 255, 255 ) --
	L = 116 * f(Y/Yn) - 16
	a = 500 * [ f(X/Xn) - f(Y/Yn) ]
	b = 200 * [ f(Y/Yn) - f(Z/Zn) ]
avec 
	f(x) = racine cubique de x si x > (6/29) au cube
		 = 1/3 * (29/6)² * t + 4/29 sinon
	Xn,Yn,Zn coordonnées du Point Blanc par exemple D65 à 2° ( 0.3127, 0.3290, 0.3583 )
LAB vers XYZ
	f'(x) = x*x*x si x > (6/29) 
		  = ( x - 16 / 116) * 3 * (6/29)²
	Y' = (L-16) / 116	et	Y = Yn * f(Y')
	X' = Y' + a / 500	et	X = Xn * f(X')
	Z' = Y' - b / 200	et	Z = Zn * f(Z')		

Constantes utiles:
	6/29 = 0.20689655
	6/29^3 = 0.00885645
	4/29 = 0.137931
	1/3 * (29/6)² = d = 7.787037
	3 * (6/29)² = 1/d = 0.12841855

voir http://www.tsi.enst.fr/ ... /colorspace.html, http://en.wikipedia.org/wiki/Lab_color_space

Outils

Les outils sont construits sur un ensemble de fonctions permettant de manipuler les différents espaces de couleurs. La fonction rgb() permet de transformer une couleur CSS en objet {r,g,b}. Les autres fonctions permettent de réaliser les transformations de l'espace RGB vers leurs domaine respectifs et inversement.

rgb, yuv, hsv et hsl, xyz et lab,



Les outils sont basés sur les <canvas>, et sont liés entre eux via la gestion des évènnements.

Color Picker

Some links



Color Viewer


Color Harmony

Image Picker


Image Color Palette




Image Profiler

Grey Image Grey Profile Hue Profile Color Profile