todas secundarios resultados primarios pintar paredes para otros obtener mezclas mezclar mezcla los las como colores clasificacion algorithm colors language-agnostic blending color-space

algorithm - secundarios - mezclas de colores y resultados



¿Existe un algoritmo para la mezcla de colores que funcione como la mezcla de colores reales? (7)

La mezcla común de colores RGB es muy diferente de la mezcla de colores para pinturas, es la mezcla de luz en lugar de la mezcla de pigmentos.

Por ejemplo:

Blue (0,0,255) + Yellow (255,255,0) = Grey (128,128,128)

(Debe ser azul + amarillo = verde)

¿Existe algún algoritmo conocido para la mezcla de colores que funcione como la mezcla de colores reales?

Mi acercamiento

Ya he intentado seguir:

Convirtiendo ambos colores a HSV y mezclando tonos (multiplicado por el coeficiente calculado a partir de la saturación), y un promedio simple para los canales de saturación y valor. Luego calculé la luminancia promedio de ambos colores y ajusté el color resultante para que coincidiera con esta luminancia. Esto funcionó bastante bien, pero la mezcla de matices a veces era incorrecta, por ejemplo:

Red (Hue 0°) + Blue (Hue 240°) = Green (Hue 120°)

Me he dado cuenta de que a veces necesito cambiar el valor del tono en 360 ° (cuando la diferencia entre los tonos es mayor que 180 °).

Red (Hue 360°) + Blue (Hue 240°) = Magenta/fuchsia (Hue 300°)

Pero este cambio no fue muy bueno también, por ejemplo:

Cyan (Hue 179°) + Red (Hue 0°) = Hue 89.5° Cyan (Hue 181°) + Red (Hue 0°) --> shifting is performed (the difference is greater than 180°) Cyan (Hue 181°) + Red (Hue 360°) = Hue 270.5°

(Hue 179 + Red) y (Hue 181 + Red) dan como resultado dos colores completamente diferentes.

Luego probé el espacio de color CIE Lab (como en Photoshop), que está diseñado para estar más cerca de cómo los humanos perciben los colores.

Usé solo un promedio simple para cada dos canales correspondientes, pero los resultados no fueron satisfactorios, por ejemplo, obtuve rosa (64, 26, -9.5) de azul (98, -16, 93) y amarillo (30, 68, -112). Estos coeficientes fueron tomados de Photoshop.

Tal vez si usara una operación diferente al promedio, podría funcionar, pero no sé qué.

CMYK no funcionó también , los resultados son como en RGB o LAB.

Parece que ni el aditivo trivial ni la mezcla de color sustractiva en ninguno de estos espacios de color produce resultados naturales.

Implementaciones de trabajo

Krita - Mezclador pictórico

El editor de gráficos de trama Krita tuvo una implementación funcional de mezcla de color más realista en algún momento: http://commit-digest.org/issues/2007-08-12/ (complemento del mezclador Painterly)

Dicen que es la primera aplicación pública que implementa tecnología especial utilizando las ecuaciones de Kubelka y Munk que describen el comportamiento de los pigmentos.

Aquí hay un video de la mezcla de colores Krita: https://www.youtube.com/watch?v=lyLPZDVdQiQ

Papel de cincuenta y tres

También hay un artículo sobre la combinación de colores en la aplicación Paper para iOS desarrollada por FiftyThree . Describen cómo innovan y experimentan en el área y también ofrecen muestras de mezcla de azul y amarillo que se traducen en verde. Sin embargo, el proceso real o el algoritmo no se describe realmente allí.

Citando

"Al buscar un buen algoritmo de mezcla, inicialmente intentamos interpolar a través de varios espacios de color: RGB, HSV y HSL, luego CieLAB y CieLUV. Los resultados fueron decepcionantes", dice Chen. "Sabemos que el rojo y el amarillo deben ser de color naranja, o que el rojo y el azul deben ser de color púrpura, pero no hay forma de llegar a estos colores sin importar el espacio de color que use. Hay un axioma de ingeniería: haga lo más simple que podría funcionar. Bueno, ahora habíamos intentado los enfoques más fáciles posibles y no se sentían ni remotamente bien ".

Parece que igual que Krita, Paper implementa el modelo Kubelka-Munk:

[...] el modelo Kubelka-Munk tenía al menos seis valores para cada color, incluidos los valores de reflexión y absorción para cada uno de los colores RGB. "Si bien la apariencia de un color en una pantalla se puede describir en tres dimensiones, la combinación de colores en realidad está ocurriendo en un espacio de seis dimensiones", explica Georg Petschnigg, cofundador y CEO de FiftyThree. El documento Kubelka-Munk había permitido al equipo traducir un problema estético en un marco matemático. [...]

De toda esta información, parece que la implementación basada en el modelo Kubelka-Munk podría ser el camino a seguir y ofrecer resultados mucho más cercanos a la realidad.

Aunque parece un proceso complicado, aún no he visto mucha información buena sobre cómo implementar algo como esto.

Preguntas relacionadas

Estas preguntas fueron publicadas después de esta, todas relacionadas con la misma cosa.

Ninguno de ellos realmente tiene la respuesta.

Otros enlaces y recursos relacionados


Creo que tu problema con la combinación de tonos es que lo estás haciendo sumando los dos ángulos y dividiendo por dos. Como has notado, el resultado a menudo no tiene sentido. Creo que sería mejor convertir los ángulos en coordenadas cartesianas en el círculo unitario, promediando esos y encontrando el ángulo del punto resultante (ignorando la magnitud).



Hay dos posibilidades diferentes combinando colores:

  1. mezcla aditiva (como RGB)

  2. mezcla sustractiva (como CMYK)

Entonces, en la mezcla de colores sustractivos, el resultado es lo que esperabas, pero no hay azul, en cambio, hay cian:

Amarillo + cian = verde

En general, la mezcla de color sustractiva es simplemente "quitar" (filtrar) del blanco, mientras que la mezcla de color aditiva se está sumando desde el negro. (Los colores base de sustractivos son inversos al aditivo: rojo -> cian; verde-> magenta; azul-> amarillo)

Así que si empiezas con pantalla blanca aplicando filtros:

min (blanco (255,255,255), amarillo (255,255,0), cian (0,255,255) = verde (0,255,0)


La respuesta correcta es NO, porque no existe un modelo de trabajo correcto de cómo realmente funciona la "mezcla de colores en el mundo real". Es MUY complejo y condicional, y en realidad no se parece en nada a la simple materia Rojo-Azul-Amarillo que aprendimos en la escuela (de hecho, requiere de toda la Química y mucha Física y Biología para resolver).

Sin embargo, la respuesta simplista es: SÍ, use la mezcla sustractiva en lugar de la mezcla aditiva .

La mezcla de colores que aprendimos en la escuela primaria se basa en combinaciones de pigmentos que son una forma de mezcla de color sustractiva (de manera muy simple). Esos son los colores que agregamos juntos, más oscuro se vuelve porque cada pigmento resta un poco más de luz.

Por otro lado, casi todos los esquemas de color de las computadoras son aditivos, ya que se basan en la combinación de ondas de luz (de manera muy simple), por lo que se vuelven más brillantes, ya que cada color agrega un poco más de luz.

El esquema RGB + es en cierto modo, el complemento aditivo del esquema sustractivo que aprendimos en la mayoría de las escuelas primarias de los EE. UU. (Que es RBY-). Sin embargo, no coinciden exactamente y puede ser difícil convertir entre ellos (investigando ahora ...)

De acuerdo, si solo desea cambiar de combinaciones aditivas en RGB a sustractivas, puede usar la siguiente fórmula de tipo bayesan inverso para combinar dos colores:

NewColor.R = (Color1.R * Color2.R)/255 NewColor.G = (Color1.G * Color2.G)/255 NewColor.B = (Color1.B * Color2.B)/255

Ajustar la diferencia en los polos cromáticos (G a Y, luego a G) es mucho más difícil ...

Se ha señalado que esto produce Negro para el problema de ejemplo, y técnicamente esto es correcto para un verdadero sistema sustractivo; sin embargo, si desea un sistema más diluyente / sustractivo, puede intentar esto en su lugar:

NewColor.R = 255 - SQRT(((255-Color1.R)^2 + (255-Color2.R)^2)/2) NewColor.G = 255 - SQRT(((255-Color1.G)^2 + (255-Color2.G)^2)/2) NewColor.B = 255 - SQRT(((255-Color1.B)^2 + (255-Color2.B)^2)/2)

Esto produce un gris oscuro en lugar de negro. Pero para obtener el Amarillo o algo parecido, todavía tiene que solucionar el problema de alineación de polos del esquema de color.


Preguntándose si el cálculo de la inversión del valor RGB funciona. Ya que se trata de la resta de luces, técnicamente la parte de resta se puede calcular con matemáticas simples.

Por ejemplo, cian + amarillo.

cian = 0x00ffff amarillo = 0xffff00

Sus inversiones son 0xff0000 y 0x0000ff, lo que significa que absorbieron completamente las luces rojas y azules. Su mezcla 1: 1 debe absorber la mitad de las luces rojas y azules (ya que la otra mitad de la mezcla aún puede reflejar algo de luz roja y azul), lo cual es consistente con (0xff0000 + 0x00ffff) / 2 = 0x7f007f. Ahora restamos el valor de 0xffffff ¡tenemos 0x80ff80 que es verde!


Una forma de hacer una mezcla sustractiva de colores RGB es convertir primero los colores RGB en curvas de reflectancia espectral. La conversión es bastante simple, y una vez que lo hayas hecho, puedes hacer una verdadera mezcla sustractiva de las curvas de reflectancia y luego convertir el resultado de nuevo a RGB. Hay otra pregunta similar: .com/questions/10254022/ , donde se discute este proceso con más detalle.


Verifique esta implementation para los algoritmos aditivos, sustractivos y otros de mezcla.

Es totalmente funcional (escrito en java), por lo que puede probar los colores que necesite mezclar y ver si se ajustan a sus necesidades.

Como señalan otras respuestas, Azul + Amarillo (exactamente Cian + Amarillo ) es Verde en un algoritmo subyugativo CMYK. Ver por ti mismo