Mon problème est tout bête. J'ai une onde monochromatique et j'aimerai connaître la teinte (dans le mode TSL) qui correspond donc à la longueur d'onde. Mais je n'arrive pas à trouver la formule mathématique exacte. Donc si quelqu'un a une idée...
Mon problème est tout bête. J'ai une onde monochromatique et j'aimerai connaître la teinte (dans le mode TSL) qui correspond donc à la longueur d'onde. Mais je n'arrive pas à trouver la formule mathématique exacte. Donc si quelqu'un a une idée...
Bonsoir,
Je ne savais pas, je ne sais toujours pas, mais peux être que ça peut te fournir des pistes (j'avais pas idée du bordel que c'est pour ces couleurs )
Il n'y a pas une formule unique mais un ensemble de formule on dirait. ICC semblent être madame norme dans le domaine des couleurs et je pense que ceci peut t'indiquer des pistes.
"Q. How can I convert spectral data to XYZ?"
<http://www.color.org/faqs.xalter#m9>
Le site suivant semble un peu plus vulgarisé. Il propose des modèles empiriques, mais je manque de terminologie (et de temps pour l'ingérer ) afin de comprendre comment l'utiliser.
<http://www.cvrl.org/> (main index / Chromaticity Coordinates)
Je pensais que c'était plus simple que ça à vrai dire. Je doute qu'une formule exacte puisse exister.
Peut être que ce wiki peut fournir une bonne intro :
<http://en.wikipedia.org/wiki/Chromaticity_diagram#The_CIE_xy_chromaticity_diagram_and_the_CIE_xyY_color_space>
Bye, en espérant que ça t'aide
Merci, effectivement, j'ai l'impression que ce n'est finalement pas si simple. Merci pour les liens, je vais regarder à quoi ressemble l'espace CIE XYZ (et voir si on peut en déduire pas trop difficilement les valeurs RGB et dans ce cas, c'est gagné)
A partir d'un autre post, ce lien semble donner un algorithme pour passer d'une longueur d'onde à ses coordonnées RGB: http://www.efg2.com/Lab/ScienceAndEn...ng/Spectra.htm
Bon, ca a l'air d'être bon.
Voilà le code Python qui donne une valeur RGB à partir de la longueur d'onde + création de l'image du spectre pour vérifier que ca donne bien le bon résultat
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 from __future__ import division def WavelengthToRGB(Wavelength): Gamma = 0.80 IntensityMax = 255 def Adjust(Color, Factor): if Color == 0: return 0 else: return round(IntensityMax * pow(Color * Factor, Gamma)) if 380 <= Wavelength <= 440: R = -(Wavelength - 440) / (440 - 380) G = 0 B = 1 elif 440 <= Wavelength <= 490: R = 0 G = (Wavelength - 440) / (490 - 440) B = 1 elif 490 <= Wavelength <= 510: R = 0 G = 1 B = -(Wavelength - 510) / (510 - 490) elif 510 <= Wavelength <= 580: R = (Wavelength - 510) / (580 - 510) G = 1 B = 0 elif 580 <= Wavelength <= 645: R = 1 G = -(Wavelength - 645) / (645 - 580) B = 0 elif 645 <= Wavelength <= 780: R = 1 G = 0 B = 0 else: R = 0 G = 0 B = 0 if 380 <= Wavelength <= 420: Factor = 0.3 + 0.7 * (Wavelength - 380) / (420 - 380) elif 420 <= Wavelength <= 701: Factor = 1 elif 701 <= Wavelength <= 780: Factor = 0.3 + 0.7 * (780 - Wavelength) / (780 - 700) else: Factor = 0 R = Adjust(R, Factor) G = Adjust(G, Factor) B = Adjust(B, Factor) return R, G, B import Image a = Image.new('RGB', (401, 50)) r = a.load() for n in range(380, 781): print n, WavelengthToRGB(n) for i in range(50): r[n-380, i] = WavelengthToRGB(n) a.save('toto.png')
Bonsoir,
Merci pour le lien, il file dans les favoris, et le morceau de code. On sait jamais, c'est le genre de truc qui peut éviter bien des heures de recherche...
PS :
Le wiki fait le lien entre XYZ et RGB via une matrice 3X3 que je n'ai vu qu'en lisant mieux... Je sais pas trop ce que ça vaut ni de quel chapeau ça sort mais c'est déjà ça de pris...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager