martes, 4 de mayo de 2021

Descomposición lineal de fuentes de iluminación en RAW

Como primer ejercicio de los apuntados en 'Generando un RAW en formato DNG a partir de un TIFF' vamos a realizar operaciones lineales con fuentes de iluminación. En concreto vamos a eliminar una fuente de luz indeseada en una escena con dos fuentes de iluminación, aprovechando el proceso para fusionar ambas iluminaciones igualando virtualmente sus temperaturas de color.

Un sistema lineal es aquél que mantiene la suma y el producto por escalar. Es decir, su respuesta a una suma de entradas puede obtenerse como la suma de las respuestas a cada entrada por separado. Del mismo modo su respuesta a una entrada escalada por un factor numérico es igual al factor multiplicado por la respuesta a dicha entrada sin escalar:


Un sensor se comporta como un sistema lineal porque suma todas las fuentes de iluminación de la escena, generando niveles numéricos en el RAW directamente proporcionales a la cantidad total de luz recibida por cada fotocaptor. Vamos a sacar provecho de esta cualidad del sensor para descomponer las fuentes de iluminación de una escena.

Supongamos que queremos iluminar a Mazinger Z exclusivamente con una luz artificial (lámpara LED por el lado derecho), pero existe una iluminación ambiente (luz natural por el lado izquierdo) que no puede evitarse:


Por resta lineal podemos aislar la iluminación artificial de la iluminación ambiente, sustrayendo a una captura RAW con ambas iluminaciones otra captura RAW hecha solo con luz ambiente:


El resultado puede descargarse de rawsubtract.dng. En él se hacen visibles las sombras proyectadas sobre la pared por la luz artificial, que eran prácticamente indetectables en presencia de la luz ambiente:


La diferencia de tonos se debe al enorme salto de temperaturas de color entre la luz natural y la artificial. El balance de blancos aplicado fue siempre el mismo y estaba ajustado para neutralizar la luz artificial, de ahí el tono azulado en presencia de luz de día.

Al estar en un entorno controlado podemos comprobar la precisión matemática de la diferencia lineal haciendo una tercera toma sin luz ambiente (bajé las persianas):


Ambas imágenes son indistinguibles, salvo por una diferencia. La imagen calculada presenta ruido en zonas que cumplen una doble condición, reciben una alta exposición de luz ambiente pero baja exposición de luz artificial, como por ejemplo el lado izquierdo del cuello y cara del robot:


Lo que está apareciendo es ruido fotónico. Es un ruido debido a la naturaleza aleatoria del proceso de captación de luz y se hace mayor cuanto mayor sea la exposición. En una fotografía normal, este ruido a diferencia del electrónico (que domina en las sombras), nunca supone un problema pues solo adquiere importancia en las altas luces. Pero en las luces el nivel de señal útil lo supera con creces arrojando una alta relación S/N que lo hace imperceptible.

Qué pasa si en esas altas luces sustraemos la señal útil (como ha ocurrido al hacer la resta de las dos capturas)? que el ruido fotónico aflora. Puede comprobarse fácilmente la existencia de este tipo de ruido haciendo dos fotos de alta exposición (idealmente derecheadas) sobre la misma escena, y poniéndolas en sendas capas de Photoshop con la capa superior en modo 'Diferencia'. Lo que queda al hacer la resta es precisamente el ruido fotónico.

~~~

Nada nos impide construir un rawcomposite.dng con un recorte de la misma porción de cada uno de los RAW: a la izquierda con todas las fuentes de luz, en el centro solo con la luz ambiente y a la derecha solo con luz artificial. Revelando con el balance de blancos adecuado primero para la luz artificial y luego para la luz ambiente, por comparación tomamos conciencia de las grandes diferencias tanto en luminosidad como temperatura de color:




Aisladas la luz ambiente y artificial en sendos archivos DNG, podemos revelar cada uno por separado con el balance de blancos adecuado, y sumar los resultados en Photoshop poniéndolos en dos capas con un 50% de Opacidad en la superior. Es como si ambas iluminaciones estuviesen igualadas en temperatura de color, una ventaja imposible de lograr en el mundo real.

Esta fusión puede hacerse de forma lineal para replicar exactamente lo que se habría obtenido en cámara con las luces conviviendo simultáneamente. Para ello antes de acoplar las capas ha de seleccionarse: 'Edición' -> 'Ajustes de color...' -> Fusionar colores RGB usando gamma: 1,00.



Tenemos la combinación de las dos fuentes de iluminación, pero sin la "lucha" de temperaturas de color que vimos en la primera imagen Ambiente + Artificial. Tampoco presenta problemas de ruido porque al sumar la luz ambiente, el ruido fotónico de la imagen resta queda enmascarado (hacer clic para verla en alta resolución).

Pero... si ya disponemos de los datos RAW aislados para cada una de las iluminaciones, por qué no aplicar sobre los niveles RAW de una de ellas un escalado para igualar su temperatura de color a la del otro tipo de luz? así podremos generar un archivo RAW final con ambas iluminaciones igualadas en temperatura de color. Tachan! el resultado en rawwhitebalanced.dng.



Hemos integrado en un único archivo RAW dos fuentes de iluminación con temperaturas de color originalmente en las antípodas, pero que se han compatibilizado de modo que ahora con un único balance de blancos eliminamos cualquier dominante de color.

~~~

Repositorio con todo el código R, script DNG, ejecutables de exiftool y dng_validate, y archivos RAW originales y finales: GitHub.

No hay comentarios:

Publicar un comentario

Por claridad del blog, por favor trata de utilizar una sintaxis lo más correcta posible y no abusar del uso de emoticonos, mayúsculas y similares.