Transformaciones de los colores

Del espectro reflejado al color reproducido en una pantalla

Un objeto iluminado devuelve al medio la reflexión de la luz que es propia del material o materiales con que está constituido. Dicha reflexión (R) es particular para cada longitud de onda (Lambda). La luz que incide sobre el objeto también se puede caracterizar por las diferentes cantidades de energía en las distintas longitudes de onda. Al ser percibido el objeto, toda la información radiante es codificada (en una primera etapa) en el valor de respuesta de los fotoreceptores que intervienen en la transducción de la señal luminosa. En el caso fotópico (niveles de iluminación diurnos), esta señal es codificada en tres valores que representan las excitaciones de los tres conos que intervienen (mayoritariamente) en el procesamiento de la señal luminosa. Es decir (desde una perspectiva algebraica), que los dos vectores que representan la iluminación incidente (I) y la reflexión del objeto (R) cuyas longitudes dependen de la cantidad de valores discretos de la longitud de onda (Lambda), deben dar como resultado otro vector (P) de tres elementos: P = (X, Y, Z). Estos tres valores son los denominados valores triestímulo que a partir de la conceptualización de la CIE y varios años de investigación, se denominan X, Y, Z (mayúsculas).
Esta descripción es suficiente para ilustrar que para codificar el color de un objeto, según un observador humano, necesitamos  conocer tres cosas:

  1. La radiancia del iluminante para cada longitud de onda (en el espectro visible)
  2. La reflectancia del objeto para cada longitud de onda (en el espectro visible)
  3. La función de transformación (T) del espectro percibido por el observador Esta función es la que se denomina "Función de Igualación de Colores" (Color Matching Function -CMF- por su denominación en inglés). La historia de la obtención de esta función es de las más interesantes de la ciencia, y se puede consultar en varios sitios (CITAS). A los fines de esta breve exposición y sobre todo considerando que el objetivo es práctico, solamente diremos que esta función permite describir un estado de exitación X, Y, Z  de los tres fotoreceptores como consecuencia de su exposición a la radiación luminosa. La función de transformación que se escoja (hay varias posibles), determina el tipo de observación que se hace. En lo que sigue desarrollaremos un ejemplo que considera un campo de observación de 10 grados visuales (CIE 1964). Al final se puede encontrar el código en R para procesar la información rápidamente y generar todos los gráficos que aquí se presentan.

Vayamos al ejemplo. Supongamos que contamos con la siguiente información espectral (reflectancia R) de una flor:

wlnm Spect
1 380 0.0101100
2 400 0.0069560
3 420 0.0124400
4 440 0.0021950
5 460 0.0186500
6 480 0.0063960
7 500 0.0029000
8 520 0.0062720
9 540 0.0002221
10 560 0.0021410
11 580 0.0010670
12 600 0.0016500
13 620 0.0007271
14 640 0.0085760
15 660 0.0370500
16 680 0.2301000
17 700 0.3579000
18 720 0.5660000
19 740 2.0530000
20 760 1.9440000
21 780 6.1470000

Esta información espectral corresponde a una flor de petunia. Queremos conocer su color! Dicho de otro modo: conocemos la proporción de energía luminosa que la flor devuelve para las distintas longitudes de onda del espectro visible (nótese que las longitudes de onda tienen un paso de 20 nm y un rango entre [380, 780]nm que corresponde a la luz visible). A partir de esto queremos saber qué color tendría esa flor si la viéramos iluminada, por ejemplo, bajo un tubo fluorescente o una lámpara incandescente (lo que sucede en la mayoría de los comercios).
Según lo dicho más arriba, para conocer su color necesitamos contar además con información sobre el iluminante y con la función de transformación. Esta información se puede conseguir de varios modos: en libros de textos especializados como el de Wyszecki (1); en internet a través de repositorios oficiales o de universidades; a partir de bases de datos contenidas en paquetes de software. Esta última alternativa es la que utilizamos nosotros a través del paquete colorscience del software estadístico R.
Los datos para I y T son los siguientes:

wlnm intensidad
1 380 49.9755
2 400 82.7549
3 420 93.4318
4 440 104.8650
5 460 117.8120
6 480 115.9230
7 500 109.3540
8 520 104.7900
9 540 104.4050
10 560 100.0000
11 580 95.7880
12 600 90.0062
13 620 87.6987
14 640 83.6992
15 660 80.2146
16 680 78.2842
17 700 71.6091
18 720 61.6040
19 740 75.0870
20 760 46.4182
21 780 63.3828

donde wlnm representa las longitudes de onda e intensidad la medida de la energía radiada para esa longitud de onda. Los números de la izquierda simplemente numeran los datos: hay 21 filas u observaciones.

En el caso de la función de transformación los datos son:

wlnm xbar ybar zbar
1 380 1.368000e-03 0.00003900 0.006450001
2 400 1.431000e-02 0.00039600 0.067850010
3 420 1.343800e-01 0.00400000 0.645600000
4 440 3.482800e-01 0.02300000 1.747060000
5 460 2.908000e-01 0.06000000 1.669200000
6 480 9.564000e-02 0.13902000 0.812950100
7 500 4.900000e-03 0.32300000 0.272000000
8 520 6.327000e-02 0.71000000 0.078249990
9 540 2.904000e-01 0.95400000 0.020300000
10 560 5.945000e-01 0.99500000 0.003900000
11 580 9.163000e-01 0.87000000 0.001650001
12 600 1.062200e+00 0.63100000 0.000800000
13 620 8.544499e-01 0.38100000 0.000190000
14 640 4.479000e-01 0.17500000 0.000020000
15 660 1.649000e-01 0.06100000 0.000000000
16 680 4.677000e-02 0.01700000 0.000000000
17 700 1.135916e-02 0.00410200 0.000000000
18 720 2.899327e-03 0.00104700 0.000000000
19 740 6.900786e-04 0.00024920 0.000000000
20 760 1.661505e-04 0.00006000 0.000000000
21 780 4.150994e-05 0.00001499 0.000000000

Donde wlnm es nuevamente la longitud de onda; xbar, ybar y zbar son los nombres escogidos para nominar a los primarios a partir de cuya combinación surge la codificación de un color en el espacio triestímulo X Y Z.
Los gráficos representan esta misma información de un modo mucho más asequible.

Radiancia Espectral Iluminante D65 Radiancia Espectral Iluminante A
Para seguir con el cómputo del color de la flor "espectral", debemos conocer como primera medida la cantidad de energía que llega al ojo del observador,
Función de Transformación CMF
para cada una de las longitudes de onda. Eso se obtiene fácilmente multiplicando elemento por elemento los vectores Iluminante y Reflectancia:
Energía_en_ojo = I * R
Una vez obtenido este nuevo vector se procederá a convolucionar (multiplicación de matrices) con la matriz de la función de transformación:
P = t(T) %*% Energía_en_ojo
donde P es un vector de tres elementos; t(T) es la transpuesta de la función de transformación T (la transposición es un requisito para la multiplicación de estas matrices); y Energía_en_ojo es el vector resultante del cálculo anterior. %*% es un operador que representa la multiplicación de matrices para diferenciarlo de la multiplicación común (*) elemento por elemento.
El vector P contiene los valores triestímulo X, Y, Z, pertenecientes a estas condiciones de iluminación. En el caso de iluminar la flor con el tubo fluorescente (D65), estos valores serían:
X 3.547548
P = Y 2.364409
Z 6.149985
Estos valores todavía no son "un color", pero sí permiten codificar en función de la exitación de los tres tipos de fotoreceptores cuál será la cromaticidad del color (suena raro pero se aclara más adelante!)
La cromaticidad se obtiene mediante la normalización del vector en la suma de los tres valores:
x = X / (X + Y + Z)
y = Y / (X + Y + Z)
z = Z / (X + Y + Z)

Se puede demostrar fácilmente, álgebra mediante, que esta normalización impllica:
z = 1 - x - y
por lo que el espacio cromático se reduce a dos dimensiones.Espacio de Color CIE
Las coordenadas cromáticas del color de la flor son entonces:
x(D65) = 0.2941109
y(D65) = 0.1960223
x(A) = 0.5340665
y(A) = 0.2813034
En el gráfico que se reproduce a continuación se puede apreciar mejor el significado de estas coordenadas.

Varios elementos del gráfico merecen destacarse y explicarse: Los ejes de coordenadas están nominados como x (abscisa) e y (ordenada).
Representan el espacio de color de la CIE conocido como xy y corresponde a un mapeo biunívoco de colores a partir de las  coordenadas XYZ de exitación de los fotoreceptores. Define  por tanto el espacio de colores que se pueden percibir al mezclar todas las longitudes de onda del espectro visible en todas sus posibles combinaciones y ser sensadas por nuestros fotoreceptores. Lo que está fuera de este espacio no se puede experimentar como la sensación de un color (serían "Colores Imposibles").
El borde coloreado da una idea de la ubicación de los diferentes colores en el espacio. Es solamente una aproximación ya que no es posible reproducir esos colores en un dispositivo cualquiera (un monitor es de los menos adecuados!)
Justamente el triángulo que se inscribe dentro de esa especie de herradura de colores constituye la posibilidad de reproducir colores de un monitor diseñado a partir del espacio sRGB (datos extraídos de la Wikipedia: sRGB). En general es el espacio de colores de los monitores comerciales.
Puede apreciarse que los colores reproducibles por el monitor son menos que los colores visibles por el ojo humano.
Finalmente, es interesante notar que la flor tiene dos colores!! En efecto, dependiendo del tipo de iluminación que se haya empleado (D65, más azúl; A, más rojo), las coordenadas cromáticas de la flor se ubican en diferentes posiciones. El círculo hueco representa las coordenadas bajo la luz fluorescente y el rombo hueco bajo lámparas incandescentes. Así mismo, los colores de las fuentes de  iluminación se representan mediante los mismos símbolos pero más grandes y pintados de negro.

Con un poco de cálculo de por medio se pueden representar los colores de las flores en el monitor: es decir, pasar de las coordenadas cromáticas a un color percibido. Este proceso se realiza en dos etapas, una que es lineal y responde a una característica de los espacios de color involucrados (las flores están en XYZ y el monitor está calibrado en sRGB y los colores los representa mediante RGB!)
1) (etapa lineal) Transformación del espacio XYZ al sRGB
sR          X
sG = [M] *  Y
sB          Z
donde [M] es una matriz de transformación cuyos valores se pueden encontrar en varios lugares de la web (estos fueron tomados de la Wikipedia en inglés sRGB)
      3.2404542       -1.5371385     -0.4985314
[M] = -0.9692660       1.8760108       0.0415560
      0.0556434      -0.2040259     1.0572252

Obtendríamos dos vectores sRGB, uno para cada vector de coordenadas XYZ de las flores (iluminadas con tubos fluorescentes y con lámparas incandescentes)
Esos vectores deben transformase a valores RGB en el rango [0,1] o en el rango más común [0, 255] para poder ser representados en el monitor. Esto corresponde a la etapa no lineal y responde más a las características de los monitores particulares que estemos utilizando. Por fortuna se puede asumir cierta normalización en su confección, por lo que ciertos valores se pueden tomar por defecto (sin necesidad de “medir” nuestros monitores!!).Resultados Flor
Esos valores también se pueden sacar de varios sitios (incluidos los fabricantes de los monitores). En nuestro caso volvemos a recurrir a la página de la Wikipedia en inglés (sRGB) para encontrar que:
RGB = 1.055 * sRGB^(1/2.4) – 0.055 (para el rango de valores que tenemos)
Al hacer los cálculos los colores de la flor presentados en el monitor son los siguientes:

 

Al gráfico de la información de las coordenadas cromáticas de la flor bajo los dos tipos de lámparas, agregamos la reproducción de esas coordenadas cromáticas en el monitor arriba a la derecha. Las columnas representan tres intensidades de la iluminación. En la primera fila, tenemos la reproducción del color bajo tubo fluorescente y coincide aproximadamente con el color que veríamos: la flor es violeta!; en la segunda fila, los colores corresponden a la iluminación con lámpara incandescente, pero en este caso esos colores no se corresponden con lo que veríamos (¿?); en la tercera fila se representa el color que veríamos bajo iluminación incandescente.
En la primera fila, el color de la flor reproducido siguiendo el cálculo descripto anteriormente, refleja el color que veríamos debido a que el monitor está calibrado según un iluminante D65 y la flor fue alumbrada con el mismo tipo de luz, por lo que el color percibido se aproximaría al dibujado. No sucede lo mismo con la flor iluminada con lámpara incandescente (iluminante A). Aquí es necesario introducir una característica de nuestro formidable sistema visual para entender porqué sucede esto. Dicha característica se conoce con el nombre de adaptación cromática y es uno de los mecanismos que nos permiten percibir los colores de los objetos de manera estable a pesar de la considerable variación espectral de la luz reflejada por ellos.
Podríamos decir que el color representado en la fila del medio es el color que “ven” nuestros fotoreceptores. Pero nosotros no vemos ese color debido a que al mismo tiempo que observamos la flor capturamos información referida a la fuente de iluminación, es decir que conocemos el “color de la luz que ilumina”. Nuestro sistema visual “resta” el color de la luz del espectro reflejado por el objeto, lo que nos permite percibir como “del mismo color” a dos objetos alumbrados con diferentes luces pero de idénticas reflectancias espectrales (un mismo objeto tiene, obviamente, idéntica reflectancia espectral!). Es decir que la constancia en la percepción de los colores no se encuentra en una respuesta similar de los fotoreceptores respecto al color, sino en una respuesta relativa
respecto al blanco de la escena!!!
En base a este conocimiento sobre el funcionamiento del sistema visual es posible modelar las transformaciones necesarias para aproximarnos a la representación del color que veríamos. Necesitamos hacer algunos cálculos más.
Queremos realizar lo siguiente:
Trasladar un color inicial codificado en el espacio X, Y, Z, iluminado bajo una luz tipo A, a un color en el monitor que utiliza una fuente tipo D65.

Como era de esperarse a partir de esta breve descripción del funcionamiento del sistema visual, el cálculo debe tener en cuenta las coordenadas cromáticas de los “blancos” de la escena. En nuestra figura esas coordenadas corresponden a los puntos negros en el espacio xy.
Gracias a la propiedad de aditividad y proporcionalidad del espacio de color CIEXYZ (ver ley de Grassmann), una primera aproximación se puede realizar de manera lineal, adoptando la forma:
X2          X1
Y2 = [MT] * Y1
Z2          Z1
donde los subíndices refieren a las coordenadas iniciales (1) y finales (2), y MT es la matriz de transformación que permite pasar de una a otra. Sobre esta matriz se ha realizado mucha investigación, y actualmente poseemos tres métodos para obtenerla: escalamiento XYZ, método Bradford y método Von Kries. En este ejemplo adoptaremos el método Bradford, para el cual la matriz toma los siguientes valores al pasar de una iluminación A a una D65:
0.8446965 -0.1179225 0.3948108
[MT] = -0.1366303 1.1041226 0.1291718
        0.0798489 -0.1348999 3.1924009

(Para la obtención de estos valores se puede consultar la página http://www.brucelindbloom.com/index.html?Eqn_XYZ_to_T.html)
Con esta matriz podemos obtener las coordenadas X,Y,Z transformadas
P2 = MT %*% P1
y volvemos a ejecutar los cómputos anteriores
sRGB = M %*% P2
RGB = 1.055 * sRGB^(1/2.4) – 0.055
Con esto conseguimos representar el color que aparece en la tercera fila.

Publicado en Interés General, Tutoriales y etiquetado , , , .