2009-12-12 23 views
13

J'essaie de mélanger deux vecteurs source RVB pour créer un troisième "vecteur résultant" qui est un mélange intuitif des deux premiers.Mélange de deux vecteurs couleur RVB pour obtenir le résultat

Idéalement, je serais capable d'émuler les «vraies caractéristiques de mélange de peinture», mais pour simplifier, j'essaie de trouver une méthode où le résultat ressemble intuitivement à ce que vous obtiendriez en combinant les deux sources rgb.

minimale, ces caractéristiques:
ROUGE + NOIR = NOIR ROUGE
ROUGE + BLANC = LUMIÈRE ROUGE

de manière optimale, aussi avec des caractéristiques réelles de peinture:
rouge + bleu = violet
ROUGE + JAUNE = ORANGE
(etc)

-

Je suis actuellement en train de faire la "manière paresseuse" en ajoutant les deux vecteurs source RVB/255, puis en les normalisant (et en les multipliant par 255). Donc, en utilisant ceci: [Rouge = < 1,0,0> * 255] + [Bleu =,0,1> * 255] donne Magenta = < 1,0,1>/sqrt (2) * 255 , bien que les autres couleurs soient moins intuitives ou même visibles ... J'ai besoin d'une meilleure méthode! S'il vous plaît aider :-)

+0

Semble à peu près identique à http://stackoverflow.com/questions/398224/how-to-mix-colors-naturally-with-c –

+2

Vous ne voulez probablement pas de "vraie peinture" caractéristiques, car la vraie peinture doesn Ne travaillez pas aussi bien que vous le pensez. Je parie que vous pensez que jaune + bleu = vert, mais ce n'est pas vrai dans tous les espaces de couleurs que je connais. –

+0

Je suis un peu en retard à la fête, mais voici une implémentation qui pourrait fonctionner. http://stackoverflow.com/a/14840112/475329 –

Répondre

14

Est-ce que vous avez suggéré la même chose qu'une moyenne pondérée?

Average R = w1*R1 + w2*R2 + w3*R3 + ... + wn*Rn 

Average G = w1*G1 + w2*G2 + w3*G3 + ... + wn*Gn 

Average B = w1*B1 + w2*B2 + w3*B3 + ... + wn*Bn 

Années w sont les fractions de pondération et la somme d'entre eux est égal à 1.

R1 est la composante rouge de la première couleur à mélanger, par exemple.

Donc, si vous voulez mélanger deux couleurs uniformément, ce serait:

Average R = 0.5*R1 + 0.5*R2 

Average G = 0.5*G1 + 0.5*G2 

Average B = 0.5*B1 + 0.5*B2 

En ce qui concerne la cartographie de la couleur résultante à une couleur nommée (« rouge foncé ») peut-être juste faire une table de recherche et choisissez le plus proche?

+1

Comment déterminez-vous les w ou la matrice W pour pouvoir mélanger rgb (ou cmyk) comme de la peinture? – yos

+2

Si vous mélangez 2 couleurs, le W est 1/2 ou 0.5, exactement comme la réponse le suggère. –

0

Je pense que vous devriez vraiment définir ce qui est "+" dans votre schéma de couleurs.

En fonction de vos besoins, je les ai traduits en codes de couleurs hexadécimales estimées, (la représentation RGB peut être déduite facilement).

 
RED  + BLACK = DARK RED 
#ff0000 + #000000 = #800000 
RED  + WHITE = LIGHT RED 
#ff0000 + #ffffff = #ff8080 

optimally, also with real paint characteristics: 
RED  + BLUE = PURPLE 
#ff0000 + #0000ff = #800080 
RED  + YELLOW = ORANGE 
#ff0000 + #ffff00 = #ff8000 

Je ne vois pas de modèle défini dans lequel vous pouvez trouver des formules pour y parvenir.

Les méthodes de John et Nils se rapprocheront probablement des couleurs mais probablement pas des valeurs exactes. Je vous suggère d'essayer le leur.

EDIT:
Mise à jour des codes couleurs incorrects. Eh bien, cela a beaucoup plus de sens maintenant.

+1

Vos codes de couleur pour le jaune et l'orange semblent désactivés. –

+0

Oui, si vous avez fixé jaune = # ffff00 et orange = # ff8000 et rouge clair = # ff8080, le motif deviendrait clair. –

+0

Oups, j'ai copié et collé à tort. Laissez-moi mettre à jour mon message. –

8

Le problème est que vous essayez de relier deux théories de couleurs différentes. RGB est la théorie des couleurs additives (la lumière colorée est émise par la source). Dans ce cas, plus vous ajoutez de spectre au mélange, plus vous vous rapprochez du blanc.Pour le "mélange de peinture", vous devez émuler la théorie de la couleur soustractive qui régit la manière dont les couleurs réfléchies sont mélangées. (c'est-à-dire une lumière réfléchie telle que des peintures, des surfaces différentes, etc.) Voici un overview.

Le JavaScript sur this page est un indice sur la façon dont vous pourriez procéder en convertissant RVB en CMJN.

+0

La question porte sur le mélange de peinture, mais tous les exemples semblent plus liés au mélange RVB. Je trouve que le mélange CMYK est très contre-intuitif. –

+0

J'ai interprété la question à poser à propos du mélange RGB (additif) mais obtenant des résultats CMYK (soustractifs). –

2

On peut mélanger des couleurs RVB pour simuler un mélange de couleurs soustractif (c'est-à-dire un mélange de type peinture) en transformant les valeurs RVB en courbes de réflectance spectrale, puis en faisant le mélange. Cette question est très similaire à une autre, stackoverflow.com/questions/10254022/, où la solution est discutée plus en détail.