teoria ryb primarios porque modelo formato colores color caracteristicas math rgb interpolation newtons-method

math - primarios - Conversión entre espacios de color RGB y RYB



ryb modelo de color (3)

Actualmente estoy tratando de convertir colores entre el espacio de color RGB (rojo, verde, azul) y el espacio de color RYB (rojo, amarillo, azul) y viceversa.

Basado en los detalles del siguiente artículo, puedo convertir de RYB a RGB usando interpolación trilineal, donde las ponderaciones paramétricas (s, t, u) son los colores RYB, y los vértices del cubo son puntos 3d en el espacio RGB. .

Pintura inspirada mezcla de color y composición para visualización - Gossett y Chen - Sección 2.1 - Detalles de realización

Mis dificultades están en revertir el proceso de conversión.

Un segundo documento hace referencia al uso de esta técnica y también indica que la conversión inversa se logró utilizando el Método de Newton. Pero no proporciona más detalles. Esto probablemente indique un hallazgo de raíz en la resolución de las ecuaciones de interpolación trilineal.

En la transferencia de estilo de pintura a imágenes fotográficas a través de la atención al contraste de color - Xiaoyan Zhang; Constable, M .; Ying He;

Antes de ampliar esta pregunta con las ecuaciones, ¿alguien ha visto o resuelto esto en un lenguaje como Java / C / C ++ / C #?

Mi enfoque actual es tomar las ecuaciones de avance de la interpolación trilineal (RYB a RGB), expandir y reorganizar para proporcionar 3 ecuaciones simultáneas para 3 incógnitas (las ponderaciones paramétricas: s, t y u) luego averiguar cómo encontrar las raíces usando el método Newton-Raphson. ¿Voy por esto de la manera correcta?

Voy a editar esta pregunta en breve para proporcionar las ecuaciones.

Muchas gracias por tu tiempo,

Ben


Aquí hay una categoría en UIColor que hace lo mismo, devolviendo elementos entre RGB, RYB y CMYK. Además, puede mezclar cualquier cantidad de colores en el espacio de color respectivo (se mezclan de manera diferente, por supuesto, dependiendo).

https://github.com/ddelruss/UIColor-Mixing

Disfrutar,

Damien


Encontré esta implementación de JavaScript de conversión RYB-> RGB basada en splines cúbicos. Aquí está mi puerto Lua (todos los valores se encuentran en el intervalo 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


Logré resolverlo al final.

Tome las ecuaciones para una interpolación trilineal: wikipedia

Sustituye las primeras ecuaciones por las últimas, expande y recoge los coeficientes para: Xd, Yd, Zd, XdYd, XdZd, YdZd, ZdYdZd y la constante.

Luego encuentre la diferenciación parcial de la ecuación en cada una de las 3 dimensiones cada una con respecto a Xd, Yd y Zd. Usa estas nuevas ecuaciones para poblar la matriz jacobiana (3x3) y luego usa el método de Newton para resolver en el software.

Método Newton-Raphson