sábado, 22 de mayo de 2021

Creando una hoja de contactos en RAW

No dicen que el RAW es el negativo digital? pues añadimos un ejercicio más a los planteados en 'Generando un RAW en formato DNG a partir de un TIFF' consistente en crear una hoja de contactos en RAW, es decir un archivo RAW que contenga versiones reducidas de una serie de fotografías en formato RAW.

Fuente: hoja de contactos de Elliot Erwitt (Magnum)

La utilidad no la tengo clara aunque como poco servirá para practicar con el reescalado en el dominio Bayer. Dispondremos en un único archivo de versiones reducidas de cada RAW que conservan las propiedades en términos de ajuste del balance de blancos, gestión de color y mapeo de tonos ("recuperación" de sombras y luces) propios de los RAW origen.

Para crear la hoja realizamos un submuestreo simple por diezmado. Es decir, para una reducción de las imágenes a 1/4 de su tamaño original por ejemplo (lo que nos daría una hoja de contactos de 4x4=16 imágenes), tomamos uno de cada cuatro datos RAW desechando los otros tres.

Probamos dos esquemas de diezmado, uno más fácil de programar con muestras contiguas siguiendo la típica agrupación Bayer 2x2 (RGGB) y otro separando espacialmente las muestras, que comprobaremos funciona mucho mejor:



El resultado es un archivo RAW donde tenemos una miniatura en este caso de 16 archivos RAW origen (hacer clic para verlo en alta resolución):



El DNG resultante está en rawcontactsheet.dng. Revelarlo supone un buen aprendizaje para tomar conciencia de lo grandes que pueden ser las diferencias en rango dinámico o temperaturas de color de capturas realizadas en distintas situaciones (podemos aplicar ajustes de luces/sombras o un balance de blancos específico para cada imagen viendo cómo resulta en el resto).

A continuación se muestra la mejora que supone tratar de equiespaciar las muestras al hacer el diezmado:



Tomando muestras contiguas en grupos de 2x2 la pixelación y artefactos son muy notorios. Al separarlas obtenemos una mayor definición porque el muestreo espacial es más uniforme.

En ambos casos la imagen puede presentar aliasing en forma de artefactos de color o dientes de sierra, dado que estamos submuestreando sin hacer un filtrado paso bajo previo (un sensor con los fotocaptores tan separados como en nuestro diezmado requeriría un filtro AA bastante más fuerte que el que tiene la cámara). Es el precio a pagar por realizar un reescalado tan básico en RAW:



Si el diezmado fuese por un número impar la distribución resultaría totalmente simétrica lo que dará un mejor resultado, así que probamos ahora a redimensionar por un factor 5:


El resultado está en rawcontactsheetbis.dng y sumariza estas 25 fotografías:



En los recortes al 300% vemos claramente que al pasar a un diezmado impar las aristas ya presentan escalones uniformes:


~~~

Una propiedad interesante de estas hojas de contactos es que al construirse por diezmado preservan la relación S/N original a nivel de píxel. Esto es una ventaja de cara a estimar el ruido de nuestros RAW sobre la propia hoja de contactos, independientemente del número de fotos que hayamos incrustado en ellas.

Así el siguiente recorte al 100% de la hoja de contactos presenta el mismo ruido visible a nivel píxel que un recorte al 100% del archivo RAW original sin reescalar. Con interpolación, la relación S/N de la hoja de contactos sería superior a la de los RAW origen por promediado estadístico, como ocurre siempre que se reduce el tamaño de una imagen:


~~~

Para terminar aplicamos el algoritmo a una carpeta completa que contiene 108 fotografías, dejando que la rutina calcule el nivel de diezmado requerido para acomodarlas. El resultado puede bajarse de rawcontactsheetdk.dng.


Como puede observarse, con este nivel de diezmado por un factor 11 los artefactos ocasionados por aliasing llegan a ser bastante terribles (recorte al 100%):


Lo idóneo por lo tanto para hacer hojas de contacto maleables sería abandonar el formato RAW puro interpolando cada archivo RAW, reescalándolos de forma segura y almacenándolos finalmente en un DNG lineal sin estructura Bayer. Este archivo pese no ser un RAW genuino mantendría las propiedades del RAW a la vez que evitaría el aliasing.

~~~

Repositorio con todo el código R, script DNG, ejecutables de exiftool y dng_validate: 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.