OVH Cloud OVH Cloud

Relation entre RVB et TSL

16 réponses
Avatar
Pierre CHAUVEAU
Bonjour à toutes et à tous,

Dans Windows, une boîte de dialogue permet de choisir des couleurs en
jouant soit sur les valeurs RVB, soit sur les valeurs TSL.

Avec la souris, on déplace un curseur qui fait évoluer ces valeurs.
Connaissez-vous les relations qui lient les valeurs RVB aux valeurs TSL.

Au vu du fonctionnement de cette boîte, il ya bijection totale dans les
relations : RVB <--> TSL

Connaissez-vous ces relations ou savez-vous où les trouver ?

Les seules relations que j'ai trouvées dans les relations entre espaces
de couleurs ne sont pas bijectives.

Merci de votre aide.

Pierre.

6 réponses

1 2
Avatar
Pierre CHAUVEAU
Stephane Legras-Decussy a écrit :
Pierre CHAUVEAU a écrit dans le
message : 423055aa$0$1245$

Merci pour les formules ... j'ai aussi posé la question sur un ce ces



sites.

si cela peut vous aider, il y a aussi la transformation YUV
Y= luminosité, U et V composantes couleurs...

on augmente la saturation en multipliant U et V par un coef...


voila le code optimisé calcul entier :

transformation en YUV

y = (9798*r + 19235*g + 3736*b)>>15 ;
u = (-169*r - 331*g + 500*b )/1000;
v = (500*r - 419*g - 81*b )/1000;


retour en RVB

r = (y<<15) + 45930*v ;
g = (y<<15) - 11262*u - 23402*v ;
b = (y<<15) + 58070*u ;




Ca m'a l'air simple et sympa tout ça, je vais essayer.

Merci.

Pierre.
Avatar
Pierre CHAUVEAU
dark poulpo a écrit :
tu devrais poser ta question sur un NG de graphisme.

tout ce que je sais c'est :

T = arcsin [ ( 3/2 )1/2 * ( V - R ) / S ]
S = ( R2 + V2 + B2 - R * V - B * R - V * B ) 1/2
L = ( R + V + B ) / 3

R = 1 - ( 1 / 3 ) * S * cos( T ) - ( 1 / 31/2) * S * sin( T )
V = 1 + ( 2 / 3 ) * cos( T )
B = 1 - 1 / 3 * S * cos( T ) + 1 / 31/2 * S * sin( T )


L sert en general pour connaitre les détails non visible car perdus dans le
noir et donc voir quel détail sont réccupérable sur une image si on lui
affecte un filtre gris (appareil photo ou logiciel de retouche)



Dans ces formules, quelles sont les plages de variation de T, S, L d'une
part et de R, G, B d'autre part.

Merci de votre aide.

Pierre.
Avatar
Pierre CHAUVEAU
Aurélien REGAT-BARREL a écrit :
Tu as tout plein de formules ici:
http://www.easyrgb.com/math.php?MATH=M20#text20
TLS = HSV non ?



dans la conversion HSL To RGB, il y a la fonction suivante :
(attention, je suis nul en langage C, je programme en pascal DELPHI)

Hue_2_RGB( v1, v2, vH ) //Function Hue_2_RGB
{
if ( vH < 0 ) vH += 1
if ( vH > 1 ) vH -= 1
if ( ( 6 * vH ) < 1 ) return ( v1 + ( v2 - v1 ) * 6 * vH )
if ( ( 2 * vH ) < 1 ) return ( v2 )
if ( ( 3 * vH ) < 2 ) return ( v1 + ( v2 - v1 ) * ( ( 2 / 3 ) - vH )
* 6 )
return ( v1 )
}

Si j'essaie d'interprèter, les 3 dernières lignes de "if" renvoient une
valeur de retour située après le mot clé "return". Mais si c'est cela,
je ne comprend pas le dernier "return" qui écrase tout ce qui a été
écrit avant (ou alors, il y a une colonie de "else" qui s'est fait la
paire) ?

Merci de votre aide.

Pierre.
Avatar
Pierre CHAUVEAU
Stephane Legras-Decussy a écrit :
si cela peut vous aider, il y a aussi la transformation YUV
Y= luminosité, U et V composantes couleurs...

on augmente la saturation en multipliant U et V par un coef...


voila le code optimisé calcul entier :

transformation en YUV

y = (9798*r + 19235*g + 3736*b)>>15 ;
u = (-169*r - 331*g + 500*b )/1000;
v = (500*r - 419*g - 81*b )/1000;


retour en RVB

r = (y<<15) + 45930*v ;
g = (y<<15) - 11262*u - 23402*v ;
b = (y<<15) + 58070*u ;




Dans ces formules, quelles sont les plages de variation des variables r,
g, b ( 0 .. 255 ?) d'une part et y, u, v d'autres part ?

Que veulent dire les signes ">>" ?

Si dans le calcul de "y", cela veut dire : pour "y > 15" , alors dans
les calculs de r, g, b on ajoute la valeur pour "y < 15", mais on ne la
connait pas ?

Je pense que je n'ai rien compris.

Merci de votre aide.

Pierre
Avatar
Stephane Legras-Decussy
Pierre CHAUVEAU a écrit dans le
message : 4230d404$0$1221$
Dans ces formules, quelles sont les plages de variation des variables r,
g, b ( 0 .. 255 ?) d'une part et y, u, v d'autres part ?



rgb sont dans la plage 0..255
Y est positif,
U et V sont signés...
j'ignore les plages de YUV, ça n'etait pas utile dans le code
où j'ai utilisé ça... ( calculs sur des long)

ces formules marchent bien, j'ai fait un plugin de traitement d'image
pour virtualdub notamment...


Que veulent dire les signes ">>" ?



c'est le décalage de bit à gauche ou à droite...

ainsi x<<4 est equivalent à x * 16

donc <<15 c'est multiplier par 32767

et >>15 c'est diviser par 32767

(attention, c'est portable sur nombres non signés uniquement)
Avatar
Pierre CHAUVEAU
Stephane Legras-Decussy a écrit :
Pierre CHAUVEAU a écrit dans le
message : 4230d404$0$1221$

Dans ces formules, quelles sont les plages de variation des variables r,
g, b ( 0 .. 255 ?) d'une part et y, u, v d'autres part ?




rgb sont dans la plage 0..255
Y est positif,
U et V sont signés...
j'ignore les plages de YUV, ça n'etait pas utile dans le code
où j'ai utilisé ça... ( calculs sur des long)

ces formules marchent bien, j'ai fait un plugin de traitement d'image
pour virtualdub notamment...


Que veulent dire les signes ">>" ?




c'est le décalage de bit à gauche ou à droite...

ainsi x<<4 est equivalent à x * 16

donc <<15 c'est multiplier par 32767

et >>15 c'est diviser par 32767

(attention, c'est portable sur nombres non signés uniquement)




Ok, merci pour ces précisions, je viens de tester cette méthode avec des
coefficients que j'ai par ailleurs trouvés : ça marche impec et c'est
rapide.

Merci beaucoup.

Pierre
1 2