2011-02-09 32 views
9

Actualmente estoy intentando convertir colores entre el espacio de color RGB (rojo, verde, azul) y el espacio de color RYB (rojo, amarillo, azul) y viceversa.Conversión entre espacios de color RGB y RYB

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

Paint Inspired Color Mixing and Compositing for Visualisation - Gossett and Chen - Sección 2.1 - Realización detalles

mis dificultades son para 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.

On the Transfer of Painting Style to Photographic Images through Attention to Colour Contrast - Xiaoyan Zhang; Constable, M.; Ying He;

Antes amplío sobre esta cuestión con las ecuaciones, ha visto ni resuelto esto en un lenguaje como Java/C/C++/C# a nadie?

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

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

Muchas gracias por su tiempo,

Ben

+0

¿Has probado mathoverflow.com? – sje397

+0

@ sje397: He echado un vistazo en mathoverflow.com, pero no puedo ver nada con respecto a la interpolación trilineal o su proceso inverso. - Acabo de darme cuenta de que también podrías intentar intentar hacer la pregunta allí. – Ben

+0

Tenga en cuenta que la interpolación trilineal tiende a ser una opción terriblemente mala para la interpolación en lo que respecta a las coordenadas RGB. Esto se debe a que los neutrales viven en la diagonal principal del cubo en el espacio RGB. A menudo ve grandes errores de interpolación, exactamente en el conjunto de colores que su cerebro puede ver sutiles errores de color. –

Respuesta

3

que lograron resolverlo en el final.

Tome las ecuaciones de interpolación trilineal: wikipedia

Sustituto de las primeras ecuaciones en el pasado, la expansión y recoger los coeficientes de: 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.

Newton-Raphson Method

+0

@SeinopSys Gracias por la edición para reparar el enlace roto. – Ben

2

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

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

Disfrute,

Damien

1

he encontrado this JavaScript implementation de conversión RYB-> RGB basado 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 
+0

Como dijo, el problema es hacer lo contrario, rgb -> ryb –

+0

http://nishitalab.org/user/UEI/publication/Sugita_IWAIT2015.pdf http://nishitalab.org/user/UEI/publication/Sugita_SIG2015. pdf – Krzycho

Cuestiones relacionadas