Conversion entre les espaces de couleurs RGB et RYB
j'essaie actuellement de convertir les couleurs entre l'espace de couleurs RGB (rouge, vert, bleu) et RYB (rouge, jaune, bleu) et de nouveau.
basé sur les détails dans le papier suivant, je suis capable de convertir de RYB en RVB en utilisant l'interpolation trilinéaire - où les pondérations paramétriques (s,t,u) sont les couleurs de RYB, et les sommets du cube sont des points 3d dans l'espace RVB.
Inspiré de la Peinture de Couleur de Mélange et de Composition pour la Visualisation-Gossett et Chen - Section 2.1-détails de la réalisation
mes difficultés sont d'inverser le processus de conversion.
Un second document, les références à l'utilisation de cette technique et indique également que la conversion inverse a été réalisé en utilisant la Méthode de Newton. Mais sans plus de détails. Ceci indiquerait probablement la découverte de racines dans la résolution des équations d'interpolation trilinéaires.
Sur le Transfert de Style de Peinture à Images Photographiques à travers l'Attention sur le Contraste des Couleurs - Zhang Xiaoyan; Gendarme, M.; Ying-Il; 151960920"
avant de développer cette question avec les équations, quelqu'un a-t-il vu ou résolu ceci dans un langage tel que Java/C/C++/C# ?
mon approche actuelle est de prendre les équations en avant de L'interpolation trilinéaire (RYB à RVB), étendre et réorganiser pour fournir 3 équations simultanées pour 3 inconnues (les pondérations paramétriques: s, t et u), trouvez ensuite les racines en utilisant la méthode Newton-Raphson. Vais-je à ce sujet dans le droit chemin?
je vais éditer cette question sous peu pour fournir les équations.
Merci beaucoup pour votre temps,
Ben
3 réponses
j'ai réussi à le résoudre à la fin.
Prendre les équations pour une interpolation trilinéaire: wikipedia
remplacer les premières équations dans la dernière, l'expansion et de recueillir les coefficients pour: Xd, Yd, Zd, XdYd, XdZd, YdZd, ZdYdZd et la constante.
ensuite trouver la différenciation partielle de l'équation dans chacune des 3 dimensions chacune par rapport à Xd, Yd et Zd. L'utilisation de ces nouvelles équations pour remplir la matrice jacobienne (3x3) et ensuite utiliser la méthode de Newton pour résoudre dans le logiciel.
Voici une catégorie sur UIColor qui fait la même chose, retournant des éléments entre RGB, RYB, et CMYK. En outre, vous pouvez mélanger n'importe quel nombre de couleurs dans l'espace de couleur respectif (ils se mélangent différemment, bien sûr, selon).
https://github.com/ddelruss/UIColor-Mixing
Profiter de,
Damien
j'ai trouvé ce JavaScript mise en œuvre de RYB->RGB conversion fondée sur des splines cubiques. Voici mon port Lua (toutes les valeurs se trouvent dans l'intervalle 0-1):
local ryb2rgb = function( R, Y, B )
local R, Y, B = R*R*(3-R-R), Y*Y*(3-Y-Y), B*B*(3-B-B)
return 1.0 + B * ( R * (0.337 + Y * -0.137) + (-0.837 + Y * -0.163) ),
1.0 + B * ( -0.627 + Y * 0.287) + R * (-1.0 + Y * (0.5 + B * -0.693) - B * (-0.627) ),
1.0 + B * (-0.4 + Y * 0.6) - Y + R * ( -1.0 + B * (0.9 + Y * -1.1) + Y )
end