# Gnral Dveloppement > Algorithme & Mathmatiques > Traitement d'images >  Conversion de RGB vers CIE LAB (couleurs)

## basesim

Bonjour,

J'aimerais savoir comment convertir une couleur donn en RGB en une couleur exprime sous l'espace de couleur CIE LAB. Je programme en C.

J'ai l'intention d'utiliser la technique dcrite sur ce site : http://www.brucelindbloom.com/index.html (dans la section math)

Donc, il faut commencer par convertir les valeurs RGB en XYZ.
Pour effectuer cette opration, il faut utiliser une "inverse companding function",
puis multiplier les valeurs avec une matrice de conversion.

Le problme, c'est que la fonction et la matrice dpendent du systme de couleur RGB et de son blanc de rfrence. *J'ignore ces deux lments*. Je crois que le systme de couleur dpend du priphrique donc voici d'o viennent mes valeurs RGB :

Une image est captur avec une webcam Lexma USB2.0 UVC VGA  l'aide de la fonction cvCaptureFromCAM de la bibliothque OpenCV (en C). Cette image est ensuite enregistrer en jpg (avec la fonction cvSaveImage). Cette image est finalement ouverte avec la fonction IMG_Load en tant que surface SDL (bibliothque Simple DirectMedia Layer) et les valeurs RGB y sont rcupres.
Dans les proprits de la webcam, on peut lire que l'espace de couleur de l'acquisition est le YUV2.

Je suis sous windows 7 et apparemment, l'espace de couleur par dfaut est le sRGB, tel que mentionn ici : http://msdn.microsoft.com/en-us/wind...dware/gg487409
S'il s'agit bel et bien du sRGB, la matrice de conversion peut tre rcupr du site mentionn plus haut. Par contre, je ne connais toujours pas le blanc de rfrence. Celui le plus commun semble tre le D65 mais il me faut ses coordonnes XYZ, que je n'ai pas.

Finalement, il y a 2 variable dans l'algorithme de conversion XYZ to LAB o il est possible de choisir entre "Actual CIE Standard" et "Intent of the CIE standard". *Laquelle dois-je choisir?*

Donc, en rsum :

Selon mon cas,
*Quel est le systme de couleur RGB que je dois utiliser comme rfrence ?
Quel sont les coordonnes XYZ du blanc de rfrence?
Quelle fonction et matrice utiliser?
Quelles valeurs choisir pour les variables de l'algorithme de conversion XYZ to LAB?*

Merci pour vos rponses!

----------


## pseudocode

> Selon mon cas,
> [B][U]Quel est le systme de couleur RGB que je dois utiliser comme rfrence ?


sRGB. La quasi totalit des formats informatiques utilisent ce systme.




> Quel sont les coordonnes XYZ du blanc de rfrence?


l'illuminant D65 c'est un bon choix. Mais c'est juste une rfrence : il faut seulement que tes images utilisent toutes la mme rfrences si tu veux les comparer entre-elles. Ca reprsente la "teinte" du blanc.




> Quelle fonction et matrice utiliser?


Comme tu veux, mais a mon avis "Actual CIE Standard" ca parait bien.




> Quelles valeurs choisir pour les variables de l'algorithme de conversion XYZ to LAB?


Les valeurs sont donnes en "Chromaticity coordinate" (x,y), calcules pour une luminance Y=0.54. Les formules de conversion sont donnes sur le lien wikipedia:

X = x*Y/y
Z = (1-x-y)*Y/y
Y = 0.54

D65, normalis  Y=100 -->  X=95.047, Y=100.00, Z=108.883

----------


## basesim

Merci de ta rponse, l'algorithme de conversion RGB to XYZ fonctionne bien, par contre, j'ai toujours un problme avec le XYZ to LAB. Voici mon code, en C :



```

```

----------


## pseudocode

Sur le site auquel tu fais rfrence, les X/Y/Z sont normaliss sur [0,1]. Je suppose qu'il faut aussi normaliser le blanc de rfrence sur [0,1].

input : double R,G,B in range [0,1] (sRGB colorspace)
ouput : double L,A,B in range [0,100],[-150,+150],[-150,+150] (CIELAB colorspace)



```

```

----------


## basesim

C'tais effectivement le problme. Merci beaucoup.

----------

