Comment obtenir la longueur d'onde d'un pixel en utilisant RGB?
j'ai un projet qui classerait la couleur d'un pixel. Qu'il soit rouge,violet, orange ou tout simplement n'importe quelle couleur dans la roue de couleur. Je sais qu'il y a plus de 16 millions de combinaisons de couleurs pour les pixels. Mais j'ai pu lire une page web qui dit qu'il est possible pour moi de faire mon projet en utilisant les longueurs d'onde de la couleur. Donnez-moi la formule pour calculer la longueur d'onde en utilisant les valeurs RVB. Merci!
4 réponses
une couleur pure a une longueur d'onde (n'importe quelle LED de couleur unique aura une longueur d'onde spécifique). Le rouge, le vert et le bleu ont chacun une gamme de longueurs d'onde. Cependant, lorsque vous faites une couleur RVB, vous ajoutez ces longueurs d'onde ensemble, ce qui ne vous donnera pas une nouvelle longueur d'onde. L'œil ne peut pas distinguer un jaune composé d'une longueur d'onde de celle de l'ajout de rouge et de vert (juste comment l'œil fonctionne). Je recommande la lecture sur la couleur la théorie de l'
bien RVB pour un moniteur correspond à 3 niveaux indépendants de lumière rouge verte et bleue, donc il y a (pour la plupart) 3 longueurs d'onde distinctes présentes de n'importe quelle couleur percivée.
mais si vous pouvez convertir votre valeur de couleur RVB en son équivalent HSL, la partie H (teinte) est la couleur dominante dans la mesure où la longueur d'onde va si vous êtes prêt à ignorer la saturation (pensez à la blancheur).
basé sur ce que vous pourriez approximative la longueur d'onde dominante d'une couleur basée sur sa valeur H.
la lumière rouge est d'environ 630–740nm de longueur d'onde, La Violette est d'environ 380–450nm.
calculer la longueur d'onde est un peu délicat, et comme Goblin mentionné, pas toujours possible (un autre exemple est la couleur obtenue en mélangeant des quantités égales de lumière rouge et bleue. Ce Violet n'a pas une seule longueur d'onde).
Mais si tout ce que vous voulez faire est d'identifier la couleur par son nom, puis le HSV modèle serait bon pour l'utiliser. HSV est la teinte (où la couleur est autour de la roue couleur), la Saturation (combien de couleur il y a par opposition à être une nuance de noir / gris / blanc) et la valeur (comme le pixel est clair ou sombre). Dans ce cas, la Teinte est probablement exactement ce que vous voulez.
si vous utilisez un langage .NET, alors vous avez de la chance. Voir le la Couleur.Méthode GetHue ce qui fait tout le travail pour vous.
Sinon, voir VHS sur Wikipedia pour plus de détails.
En fait, si vous avez R, G et B comme des chars allant de 0.0 à 1.0 (au lieu d'entiers de 0 à 255, par exemple), alors:
M = max(R, G, B)
m = min(R, G, B)
C = M-m
if M = m then H' is undefined (The pixel is some shade of grey)
if M = R then H' = (G-B)/C mod 6
if M = G then H' = (B-R)/C + 2
if M = B then H' = (R-G)/C + 4
Quand convertir RVB en HSV vous multipliez alors h 'par 60 degrés, mais pour vos fins H' est probablement très bien. Ce sera un flotteur allant de 0 à 6 (presque). 0 est Rouge (comme 6). 1 est jaune, les valeurs entre 0 et 1 étant ombragées entre le rouge et le jaune. Donc 0,5 serait Orange. Les points de repère importants sont:
0 - Red
1 - Yellow
2 - Green
3 - Cyan
4 - Blue
5 - Purple
6 - Red (again)
J'espère que ça aidera.
http://en.wikipedia.org/wiki/Visible_spectrum
C'est possible. Voir ci-dessus. Le fond gris rend apparemment les choses plus faciles. Vous pourriez obtenir quelque chose comme cela sur votre propre, et même l'améliorer. Mais le faire avec précision coûtera cher. U aura besoin d'un expert en colorimétrie, d'un moniteur calibré et d'un environnement de visualisation (car ce que la longueur d'onde dominante de votre pixel est juste signifie ce que la longueur d'onde monochromatique il se rapproche sur votre moniteur calibré en votre environnement de visualisation calibré). Tout cela coûtera quelques milliers de dollars. Le travail fait au lien ci-dessus, montré sur wikipedia, ne semble pas si précis, mais il est probablement ce que vous voulez.