¿Por qué L * = 0 no corresponde al negro en el espacio de color L * a * b *?

8

Según dos fuentes que encontré, en el espacio de color CIELAB LAB un valor de L * = 0 corresponde al negro. Citando Wikipedia :

Las tres coordenadas de CIELAB representan la claridad del color (L * = 0 produce negro y L * = 100 indica blanco difuso ...)

y citando a Phil Cruse :

El eje L * representa la ligereza. Esto es vertical; desde 0, que no tiene claridad (es decir, negro absoluto) ...

Sin embargo, este parece no ser el caso. Por ejemplo, usando L * = 0, a * = 127, b * = 0 se obtiene en Mathematica:

FullForm[ColorConvert[LABColor[0, 1.27, 0], "RGB"]]

(*RGBColor[0.46364605275068677, 0., 0.052627307663056185]*)

... que no es negro.

Esto no parece ser un error de Mathematica, ya que también se reproduce (al menos para un par de higos) en Julia usando el Color.jlpaquete:

convert(RGB, LAB(0,127,0))

# RGB{Float64}(0.46778684693714695,0.0,0.04112312700274846)

Del mismo modo, la visualización del cubo de color del LAB Colorspace se encuentra en la Neat Examplessección de la página de documentación de Mathematica LABColor. Aquí está, con la cara L * = 0 de la superficie apuntando hacia la cámara:

ingrese la descripción de la imagen aquí

Con la excepción del cubo en la esquina, la mayoría de los cubos definitivamente no son negros. Entonces mi pregunta es:

  • ¿Por qué una configuración L * = 0 no corresponde necesariamente al negro en el espacio de color CIELAB? ¿No se supone que L * corresponde a la luminosidad percibida? Si es así, ¿por qué algunas partes del subespacio L * = 0 parecen considerablemente más brillantes que el negro?
ContenedorDoofus
fuente
Por lo que vale, verifiqué y hay tres preguntas CIELAB en Mathematica.SE y 45 en StackOverflow.
hardmath
2
Cuando debería obtener valores RGB lineales negativos, la fórmula no funcionará correctamente a menos que esa posibilidad se haya tenido en cuenta explícitamente. Si verifica la conversión a XYZ, verá que Y se convierte en cero para L igual a cero y también puede ver que cuando RG y B no son todos cero, solo puede obtener Y igual a cero si algunos de los valores RGB son negativo.
Conde Iblis
@CountIblis: Gracias, pero todavía estoy un poco confundido; ¿Está diciendo que la razón por la que se produce la no negrura es que el color LAB(0,127,0)no existe en el espacio RGB y, por lo tanto, la conversión produce errores numéricos que hacen que parezca no negro?
DumpsterDoofus
Sí, a eso se reduce todo. Es mejor leer sobre la conversión de Lab a XYZ, y luego de XYZ a RGB lineal, la transformación de RGB lineal a sRGB es solo una transformación gamma modificada. Verá que desde Lab a XYZ no hay problemas, Y será cero cuando L sea cero. Pero desde XYZ cuando configura Y = 0 mientras X y / Z son distintos de cero, se obtendrán valores negativos para uno o más componentes RGB, obviamente si se supone que el brillo total es cero cuando no todos los componentes RGB son cero, algunos deben ser negativos. La mayor parte de esto se explica aquí en.wikipedia.org/wiki/Lab_color_space
Count Iblis
Quizás más fácil de ver:Manipulate[ ArrayPlot@ Table[LABColor[l, a, b], {a, -1, 1, .05}, {b, -1, 1, .05}], {{l, 0}, -1, 2} ]
Szabolcs

Respuestas:

5

Cualquiera que sea el espacio de color "RGB" (sRGB?) Que ingresó como destino en Mathematica, tiene una gama limitada de colores que se describen mediante los valores R, G y B, generalmente similares a los que puede producir un monitor, la impresora puede imprimir etc. y mucho más pequeño que Lab. Dado que solo hay un número limitado de valores (256 por canal de color en 8 bits), los espacios de color RGB intentan no desperdiciar ningún valor en colores que no se pueden reproducir para evitar efectos secundarios desagradables.

La conversión de Lab a RGB termina con colores fuera de gama y el programa intenta asignar el color Lab al color más cercano que existe en el espacio de color RGB objetivo, generalmente recortando cualquier valor <0 o> 1 a 0 y 1)

Si está dispuesto a jugar con él, aquí hay una gran herramienta en la web, CIE Color Calculator de Bruce Lindbloom, que puede usarse para conversiones interactivas rápidas

MirekE
fuente
2

La respuesta es bastante simple: el color que especificó no es válido (no existe). Tenga en cuenta que en muchos modelos de color es posible especificar "colores" que no existen.

Específicamente, especifica L * = 0 (sin luz), pero también especifica a * = 1.27. ¿Cómo puede haber algún componente de color si no hay luz?

Si examina la siguiente tabla (de un trabajo mío no publicado), verá que para valores inferiores a L * = 3.14 la saturación máxima es cero (como lo es para L * = 100). Valores máximos de croma para LCh (ab)

La tabla muestra la saturación perceptible máxima para colores h(vertical) a diferente intensidad L(horizontal). Los máximos están impresos en negrita.

La fuente de la tabla es: [Int10] International Color Consortium. Especificación ICC.1: 2010 (Perfil versión 4.3.0.0), 12 2010. [En línea: http://www.color.org/especification / ICC1v43_2010-12.pdf; Stand 15. Noviembre 2011].

U. Windl
fuente