¿Cómo calcular otros colores con la misma luminosidad percibida que un valor de gris dado?

Esto está relacionado con una pregunta que hice en tex.stackexchange , que tiene un aspecto de color. El resultado de esa pregunta es la siguiente imagen:
valor y contraste de saturación

He dibujado una serie de cuadrados grises a la izquierda, con una rama roja saliendo a la derecha. El objetivo es tener diferentes cuadrados rojos con una saturación diferente, pero todos con el mismo valor de gris. En el modelo de color hsv, todos tienen el mismo v, pero cuando convierto la imagen a escala de grises usando Gimp, no se convierten al mismo gris. Además, la impresión visual es que los cuadrados rojos de la derecha son más oscuros que los de la izquierda.

¿Cómo puedo, dado un cierto gris, calcular colores con un cierto tono y el mismo valor de gris (o, mejor aún, con la misma impresión de gris )? Los colores utilizados en la imagen están todos calculados, por lo que prefiero soluciones que también incorporen cálculos.

Es posible que haya usado términos incorrectos aquí: soy ingeniero mecánico, así que corríjame cuando corresponda o solicite una aclaración.


La sugerencia de usar el espacio de color Lab me ha llevado a algunas conclusiones:

  • Puedo usar el Lvalor del modelo Lab para establecer algún tipo de valor de gris para diferentes colores. En el modelo hsv esto es v. No estoy seguro de si realmente puedo compararlos, pero lo haré hasta que alguien se queje.

  • En el modelo hsv también puedo establecer un "color base" (un matiz), que no puedo encontrar en el modelo Lab.

  • En el modelo hsv, tengo 2 constantes (en la imagen de arriba: h= 0, v= 0.375) y una variable ( s).

  • Hasta este punto, solo tengo una constante en el modelo Lab. Eso no es suficiente para generar algo similar a lo que ya hice con el modelo hsv.

Supongo que es hora de experimentar.


¡Hecho! Después de ejecutar el código de conversión, fue muy fácil. El primer paso fue definir el "objetivo rojo" a la derecha. Calculé RGB2Lab(255,0,0) y cambié el valor L del resultado al L deseado en la figura (L = 62.5). Los colores se calculan mediante una interpolación lineal en el espacio Lab de (L,0,0) a (L,aTarget,bTarget). El resultado:

ingrese la descripción de la imagen aquí

¡Gracias!

Hay un montón de cosas que pueden resultarle útiles en la entrada de wikipedia, pero encontré ( en.wikipedia.org/wiki/HSL_and_HSV#Disadvantages ) de posible relación con su problema, específicamente: "Porque HSL y HSV se definen puramente con referencia a algún espacio RGB, no son espacios de color absolutos: especificar un color con precisión requiere informar no solo los valores HSL o HSV, sino también las características del espacio RGB en el que se basan, incluida la corrección gamma en uso.
Entonces, la idea obvia es especificar el espacio de color gamma y RGB (¡si es posible!) al intentar una conversión.
Una idea aún mejor es RGB → L*a*b* → RGB; as Lab está diseñado para aproximarse a la visión humana y Lightness es una de sus dimensiones.
@koiyu Lab es como sugiero que también se encuentren coincidencias grises. (¡Me ganaste! Me estaba burlando de la respuesta a continuación cuando publicaste esto).
Estaba evitando la discusión problemática de la percepción del color :)

Respuestas (2)

Puede usar el espacio de color Lab para encontrar sus coincidencias. Los colores con el mismo valor L que su gris objetivo se verán casi idénticos cuando se conviertan a escala de grises.

Por ejemplo, un gris de laboratorio de (50, 0, 0) se verá muy similar a los rojos de laboratorio (50, 30, 0), (50, 50, 30) y (50, 50, 50) cuando se convierta a escala de grises Las muestras a continuación usan Photoshop (Imagen> Modo> Escala de grises) para convertir de laboratorio a gris:Colores originales de laboratorio
Convertido a escala de grises

¡Eso parece algo que quiero! Gracias. Sin embargo, no puedo usar Lab directamente con mi conjunto de herramientas, por lo que necesito algún tipo de algoritmo de conversión. Koiyu sugirió convertir RGB -> Lab -> RGB, e intentaré implementar eso.
Encontré lo siguiente: http://www.brucelindbloom.com/index.html?Equations.html . No sé si las conversiones son correctas y tengo la impresión de que todavía se necesita algo de magia.
Y de hecho se ven un poco más sencillos...
@Nick puedo hacer todos los cálculos con una calculadora, lo cual es bueno. Sin embargo, tengo que implementar las conversiones del modelo de color en mi documento LaTeX, lo que me está dando dolor de cabeza aquí y allá. Cuando termine, publicaré el resultado y aceptaré su respuesta.
@Christoph Bravo! Gracias por publicar el resultado y bien hecho por verlo.
@Nick ¡Fue divertido, en realidad! Sin embargo, necesito profundizar más en el modelo de laboratorio. No sé si el rojo que se muestra en mi resultado es tan rojo como el rojo se vuelve con L=62.5. En el espacio RGB, puedo decir "255,0,0 es rojo máximo", pero no puedo especificar esos valores máximos en el espacio Lab. Tengo la impresión de que el rojo que tengo ahora es demasiado amarillento. Además, cuando se convierte a escala de grises (usando Gimp), los valores varían de 59 a 38 (era de 63 a 13, por lo que es una mejora). ¡Después de todo, los espacios de color son interesantes!
Es mejor pensar en él como un espacio de color Lch, con coordenadas cilíndricas de luminosidad, croma y matiz. y asegúrese de no exceder el cubo RGB o se recortará en un color incorrecto. y hay diferentes formas de "convertir a escala de grises", por lo que si su espacio de color lo hace de manera diferente a su convertidor de escala de grises, no funcionará.

Por lo tanto, el consejo anterior de Nick solo funciona con un 50 % de luminancia. Si aplica cualquier otro valor L igual a diferentes colores, el resultado gris es diferente.

Debe haber una matemática para eso, pero puede hacerlo en la pantalla a simple vista.

Si crea todos los colores que desea y luego coloca un elemento gris (Ilustrador) o una capa (Photoshop) con su modo de transparencia en "color" (o saturación o matiz), eso hará que todos los elementos a continuación revelen su luminosidad.

Debe asegurarse de que todos los colores debajo de ese elemento gris tengan una saturación de 100, o obtendrá resultados grisáceos, en lugar de colores agradables.

Ahora, el problema es: con todos los métodos anteriores, hará que todos los elementos tengan "la misma luminosidad dentro del perfil RGB utilizado", es decir, el mismo gris para el "dispositivo" seleccionado, y la peor parte: el ojo es un dispositivo , y hay diferencias.

Puede mostrar los mismos colores a diferentes personas y no encontrarán la misma "uniformidad" que los demás.

Agregue eso al hecho de que está configurando esos colores como "misma luminosidad" en el dispositivo seleccionado, y no solo están todos "estimados", tan pronto como los muestre en un dispositivo diferente, el efecto fallará, porque cada dispositivo Tiene su propia capacidad para iluminar los elementos rojos, verdes o azules con diferentes intensidades, por lo que podría estar obteniendo, por ejemplo, elementos más rojos.

Además, si hace una mezcla de un gris a un color como se sugirió anteriormente, debe asegurarse de que el elemento gris tenga al menos 1/255 como mínimo en cada canal (es decir, no más gris) o el software considerará el gris de origen como Tono 0, que le dará tonos medios rojizos (porque una mezcla entre el tono 0 y cualquier otro color estará a mitad de camino hacia un rojo)

Soy un experto en preimpresión desde la década de 1990 y mi consejo es: si vas a usar las matemáticas, debes usar las matemáticas para el ojo (capacidades visuales) así como las del dispositivo que mostrarás. esos números encendidos.

Buena suerte.