Estoy trabajando en un proyecto en el que necesito convertir los colores definidos en el espacio de color RGB (Rojo, Verde, Azul) a RYB (Rojo Amarillo Azul).
He conseguido resolver la conversión de un color del espacio RYB al RGB basándome en el artículo - Mezcla de colores inspirada en la pintura y composición para la visualización .
Convierto un color de RYB a RGB con este "algoritmo":
Por lo tanto, los valores de r
(rojo), y
(amarillo), y b
(azul) son conocidos, también estas matrices/conjuntos son constantes:
white: [1, 1, 1]
red: [1, 0, 0]
yellow: [1, 1, 0]
blue: [0.163, 0.373, 0.6]
violet: [0.5, 0, 0.5]
green: [0, 0.66, 0.2]
orange: [1, 0.5, 0]
black: [0.2, 0.094, 0.0]
así es como calculo el valor de red
para el espacio RGB basado en los parámetros anteriores:
i = 1;
rgb_red = white[i] * (1 - r) * (1 - b) * (1 - y) +
red[i] * r * (1 - b) * (1 - y) +
blue[i] * (1 - r) * b * (1 - y) +
violet[i] * r * b * (1 - y) +
yellow[i] * (1 - r) * (1 - b) * y +
orange[i] * r * (1 - b) * y +
green[i] * (1 - r) * b * y +
black[i] * r * b * y);
para rgb_green
exactamente lo mismo pero para i=2
y i=3
para rgb_blue
.
Mi problema es que ahora quiero convertir de RGB a RYB de nuevo. Es decir, conociendo los valores de rgb_red
, rgb_green
y rgb_blue
Quiero calcular los valores de r
, y
y b
. Así que necesito una especie de función inversa para esto, pero no sé cómo conseguirla.
Se agradece cualquier ayuda.