REVELANDO UN ARCHIVO RAW CON UNA RED NEURONAL/LUT (ITERACIÓN FALLIDA)

Guillermo Luijk

Fujista de renombre
Los datos crudos (RAW) que captura un sensor de imagen están muy lejos de la fotografía (JPEG) que te entrega la cámara. Para llegar a esta imagen la cámara en sus tripas ha hecho:
◼ Un balance de blancos para adecuar los datos capturados al color de la luz ambiente
◼ Una interpolación de color, ya que en cada píxel el sensor solo captura uno de los 3 colores RGB y los otros 2 deben estimarse
◼ Una conversión a un espacio de color de salida para que los colores puedan visualizarse de forma realista en pantallas normalizadas
◼ Un procesado de imagen (brillo, contraste, saturación,...) para que el resultado sea atractivo

Como todo lo anterior (salvo la interpolación) no es más que una transformación de valores RGB de entrada a unos valores RGB de salida, he hecho el ejercicio de modelar todos los pasos con una red neuronal que realice la transformación de los datos RAW a la imagen JPEG final. Esta red neuronal se convertirá en una LUT.

Para el entrenamiento se ha usado una captura sobre una carta de color IT8 que contiene una buena cantidad de colores y luminosidades representativos, y para validar el resultado se ha aplicado la red neuronal sobre una imagen de test correspondiente a una escena real.

failedtest.jpg


Esta primera iteración aunque prometedora ha sido fallida por un doble motivo:
◼ El caprichoso Python (o mejor dicho la librería usada) ha convertido a 8 bits las imágenes de entrada de 16 bits, redondeo que ha dado lugar a posterización en las sombras por falta de niveles tonales al aplicarse la gamma del espacio de color de salida (ProPhoto RGB en el ejercicio). La solución es buscar una librería que no haga ese estropicio.
◼ La carta IT8 de colores parece que resulta insuficiente para capacitar la red neuronal para convertir cualquier combinación de color y luminosidad de entrada, dando lugar a colores erróneos en las sombras profundas. La solución que quiero probar es usar como entrenamiento un archivo RAW sintético que contenga el máximo de combinaciones RGB de entrada posibles, de modo que la red "vea" en su entrenamiento cualquier color al que vaya a enfrentarse a posteriori.

Pero esto para después de las vacaciones.

Disclaimer: el ejercicio lo hago por practicar y aprender cosas, no tengo ni idea de si revelar RAWs con una LUT puede servir para algo. Se me ocurre que poder procesar del tirón una serie de archivos RAW podría acelerar bastante el proceso, p.ej. a la hora de revelar vídeo capturado en RAW.

Salu2!
 
Atrás
Arriba