¿Hay alguna manera de obtener una mezcla de colores correcta sin posterización, trabajando solo con 8 bits? ¿O algo mejor que la mezcla de espacio de color RGB lineal?

Estoy en busca de una solución práctica y ortogonal que preferiblemente:

  • Afecta a cualquier modo de fusión.
  • Puede producir la mezcla de aditivos más correcta posible.
  • Produzca la menor posterización posible en la mezcla y la posible mezcla excesiva incluso en valores de intensidad realmente bajos.

Por qué:

Trabajar en un lineal y/o de alta precisión no es perfecto.

  • Hace que las operaciones sean más propensas a la posterización ( los valores oscuros son los que más sufren ), por ejemplo, el lienzo de la izquierda es una combinación de 16 bits XYZ, el de la derecha es de 8 bits sobre sRGB lineal, ambos visualizados perceptivamente en sRBG no lineal:

Sería genial trabajar en 8 bits, daría como resultado un lienzo de mayor rendimiento.

  • No producirá una matemática de color aditiva absolutamente real, ya que no obtendrá un valor de intensidad constante, por ejemplo:

ingrese la descripción de la imagen aquíLa mezcla esperada está en el pequeño gradiente en la parte superior, variación de intensidad cero.

  • La mezcla tiende a valores más claros, por ejemplo, sRGB no lineal tiende a valores más oscuros, esto es una ventaja en no lineal, somos más conscientes de los cambios de baja intensidad y funciona bien en términos de construcción de contraste, el de la izquierda es una mezcla de color lineal y el de la derecha es no lineal, ambos, mancha superior sin variación de presión de izquierda a derecha e inversa en la parte inferior también sin cambio de presión:

ingrese la descripción de la imagen aquí

trabajar en espacios de colores más grandes que lineal con alta precisión hace que se mezclen mejor pero aún así no da mucho más beneficio. Por supuesto, la mezcla lineal no es tan mala como la mezcla no lineal, pero sería genial obtener algo mejor.

Estoy totalmente abierto a programas que linealicen automáticamente o hagan algún truco automático si exponen alguna ventaja real en términos de calidad de mezcla o rendimiento .

Aparte de eso, incluso la huella de memoria no es de mi interés. Es solo que, de hecho, detrás de escena solo está haciendo lo mismo, calculando en una pila interna de alta precisión RGB lineal, y quizás lo peor, agregando errores de precisión redondos y haciéndome más confuso acerca de algún posible problema en el proceso de pintura, otro punto es que estoy mejor atendido si lo entiendo.

Lo más cercano que obtuve de algo realmente interesante en términos de mezcla de colores fue con la mezcla de espacio de color de trabajo CIE XYZ , ya que obtuve resultados como:

ingrese la descripción de la imagen aquí

Hasta que te golpea la rareza CIE XYZ :

ingrese la descripción de la imagen aquí

Por lo tanto, todavía estoy abierto a nuevos procesos, como siempre puedo obtener algo en términos artísticos de ellos, todavía estoy examinando trabajar en CIE XYZ con selectores de color limitados. O cualquier sugerencia dada aquí.

Y si hay alguna percepción equivocada de que yo vaya a algún lado, se lo agradecería mucho.

Respuestas (1)

No entiendo completamente tu pregunta.

Pero al final, la posterización no se produce por "mezcla". Es el resultado de "mostrar".

Si tiene en una zona un valor de r255g128b0 y una zona adyacente de r255g129b0 y muestra algo de posterización, no hay nada que pueda hacer al respecto. Simplemente tiene los valores más cercanos posibles y no hay forma de poner un color de término medio. No importa cómo se mezclaron.

La única forma de superar esta limitación, que yo sepa, es "difuminar" la transición. Esto es, hacer un patrón aleatorio de píxeles en la siguiente zona.

La posterización es también un efecto perceptivo, no solo técnico. Si no tienes distractores, como en un cielo azul podrías notar más que en una foto de un bosque. Entonces depende del área y la relación en valores.

Esto puede depender de la calidad de la pantalla, el contraste, el brillo, la luz ambiental o incluso el estado de ánimo del observador.


Pero eso sí, el modelo RGB no es lineal en sus componentes, es logarítmico, y los valores cambian según el canal.

Aquí hay algunos colores RGB pero dispuestos como círculos HSB.

ingrese la descripción de la imagen aquí

En teoría, tienen el mismo "brillo", pero el brillo total en un canal azul no es lo mismo que el 100% del brillo en el canal verde.

Cuando se convierte a escala de grises, podemos ver diferencias obvias. El R+G produce un amarillo que obviamente es más brillante que el azul.

ingrese la descripción de la imagen aquí

Hay un color sólido que trata de abordar este brillo perceptivo. El sistema de color Munsell https://en.wikipedia.org/wiki/Munsell_color_system

donde, en teoría, cada nivel representa valores similares. Pero probablemente la conversión deba hacerse con una matriz específica de valores.


No soy programador, pero en mi opinión, buscaría una curva que se adaptara a cada canal R+G+B por separado, podría estar aplicando diferentes valores de gamma https://en.wikipedia.org/wiki/Gamma_correction a cada canal por ejemplo, o buscando una curva logarítmica diferente.

Claro, pero tiene su parte en el proceso, puede ser un problema de precisión, no querrás hacer matemáticas en CIE XYZ con 8 bits, o cualquier gran espacio de color como Aces, terminarás obteniendo una gran posterización visual al traer el espacio de trabajo volver a sRGB no lineal (monitor). La intención de la pregunta es encontrar una carga menor en términos de rendimiento o mejor calidad, ya que sRGB lineal no producirá una mezcla de colores muy correcta, agregará información adicional sobre la pregunta.
Me gusta que el color casi perceptivo aclare los espacios uniformes para la selección de color en algunos casos, como la luminancia ponderada por rec 709coeficientes, pero creo que no sería una buena idea mezclar en un espacio así, ya que tenemos variaciones de contraste demasiado amplias, especialmente en los extremos de la luminosidad. rango.
El espacio rgb de 8 bits no obtiene más resolución por arte de magia, ya sea que difumine en 8 bits o use 16 bits y luego difumine en la conversión a 8 bits no hace ninguna diferencia. la diferencia realmente está en difuminar nada más. si lo haces de frente o no, no importa, @RomuloPBenedetti. Temblaste o tienes líneas mach. Además, no hay una forma correcta de mezclar.
No es un degradado construido con herramientas de degradado, se trata de pinceles artísticos que se manchan, se enturbian y se realizan operaciones matemáticas repetitivas sobre él, y lo más probable es que las manchas repetitivas sean el problema (inevitable, la pintura tradicional se trata de mezclar), como en tal caso usted puede estirar demasiado el degradado para obtener una buena conversión perceptiva a capacidades sRGB no lineales... No se está ejecutando un difuminado intencional allí, es solo una herramienta de difuminado que difumina 2 colores sólidos.
@RomuloPBenedetti Realmente no puedes generalizar. Realmente depende de qué aplicación use y cómo la use. Los algoritmos exactos que utiliza. No hay ninguna razón por la cual las manchas deban hacer algo diferente en diferentes espacios de trabajo. Depende literalmente de la forma en que se implemente su aplicación. Además, el engreimiento no es realmente la forma razonable de mezclar las cosas.
@joojaa Estoy usando krita, estoy seguro de que no linealiza ninguna operación de pincel/modo de fusión, sigue estrictamente el espacio de color y la precisión de bits, solo se muestra en el espacio de color no lineal como lo elegí, y esto no es utilizado en lienzo, incluso los selectores de color pueden operar en el espacio de color y precisión del lienzo.
@joojaa Estoy completamente abierto a nuevos procesos si ayudan a superar las limitaciones como señalo, pero de todos modos la motivación es acercarse al arte tradicional de la vieja escuela en un contexto digital, ya que hay valor en las texturas de una pintura al óleo, hay valor en mezclar de manera tradicional (y no hacerlo demasiado, cuando se pretendía), por muchas razones, incluso para salir de una percepción arraigada del proceso del arte. Es que lo digital tiene algunas características que no mapean bien y estoy en busca de posibilidades para superarlo sin quitarle la riqueza al proceso artístico.