domingo, 3 de marzo de 2024

Apilado por media para simular ISO ultra bajo/filtro ND en RAW (II)

Como cierre del ejercicio 'Apilado por media para simular ISO ultra bajo/filtro ND en RAW (I)', vamos a promediar varios archivos RAW procedentes de capturas de la misma escena para simular el efecto de un filtro de densidad neutra (ND), con el objetivo de obtener un archivo RAW de larga exposición.

Tomaremos como ejemplo una escena quasi nocturna sobre la que haremos capturas de la máxima duración posible antes de sufrir saturaciones. Entonces leeremos con DCRAW los datos brutos de estas capturas para promediarlos y encapsularlos en un único archivo RAW de salida que sumarice todos los tiempos de exposición.

Simular por software un filtro ND en tomas de larga exposición tiene ventajas e inconvenientes respecto a usar un filtro ND genuino. Las ventajas serían:

  • Ahorro obvio del coste del filtro ND y de su utilización
  • No sufrimos ninguna pérdida de nitidez, ni introducción de viñeteo o dominantes de color debidas al filtro ND
  • Reducción de ruido/aumento de rango dinámico respecto a hacer una sola toma con filtro

Y las desventajas se pueden resumir en:
  • Mayor complejidad y recursos invertidos al implicar realizar un buen número de tomas y promediarlas con algún tipo de software
  • Mayor posibilidad de sufrir pérdidas de nitidez debidas a desalineamientos entre las capturas al realizar numerosas obturaciones
  • Si en la escena existieran estelas luminosas de movimiento rápido (tales como luces de vehículos, aviones,...), sufriremos cortes visibles en las mismas al ser imposible reducir a cero el retardo entre tomas

~~~

En concreto realizamos 14 capturas con un 24mm a f/11. Recopilamos las características que tendrá el DNG de larga exposición que vamos a generar:

  • Número de capturas origen: 14 tomas a ISO100 de 30s cada una
  • Tiempo de exposición equivalente: 0,5 · 14 = 7min
  • Equivalencia ISO: sensor con ISO7 (100/14)
  • Equivalencia filtro ND: filtro ND de log2(14) = 3,81 pasos
  • Mejora en rango dinámico: log4(14) = 1,90EV
  • Mejora lineal en ruido: 2log4(14) = 141/2 = 3,74 veces menos ruido

La escena contiene porciones de cielo con nubes en movimiento así como una lámina de agua, lo que nos permitirá ver el efecto seda logrado en ambos medios. Mostramos aquí una toma central de la serie (hacer clic para ver a mayor resolución):


El resultado de promediar las 14 capturas y revelar con los mismos parámetros el archivo RAW resultante es el siguiente:


Como era de esperar los tonos y contrastes son idénticos, cambiando solo el grado de sedosidad en el cielo y en el agua. Es interesante notar que los trazos de las estrellas salen perfectamente continuos gracias a que los retardos entre toma y toma (los 2-3s de respuesta que daba mi cámara), son mucho más rápidos que el movimiento de los astros.

Disclaimer: la escena es una castaña, el sensor está sucio y hacía frío. El objetivo en cualquier caso no era obtener una imagen bonita sino comprobar la viabilidad técnica del método.

El resultado final puede bajarse de meanstackingnd.dng.

~~~

Hacemos ahora una comparación del ruido entre la toma individual y el promediado. Las capturas inevitablemente tenían muchos hot pixels fruto de hacer repetidas tomas con largos tiempos de exposición (los revelados se han hecho adrede desactivando la reducción de ruido de ACR que eliminaría la mayoría de ellos). En estos recortes al 100% podemos evaluar visualmente la mejora en ruido de 1,90EV:



La mejora es especialmente notoria porque debido a los reflejos quasi especulares de las luces artificiales sobre el agua, esta escena requería una fuerte subexposición global para no perderlos, lo que implicaba levantar fuertemente las sombras en procesado.

La imagen promediada además muestra menos hot pixels que las originales gracias a que, pese a sufrir una buena cantidad de hot pixels que se dan en todas las tomas, se cancelan aquellos que solo aparecieron en una de ellas. El resultado sin duda mejoraría mucho realizando una sustracción de darkframe como hicimos en 'Reducción de ruido por sustracción de darkframe en RAW'.

~~~

Terminamos con una versión en BN que nos permite animar un GIF preservando con calidad la gama de grises, para constatar la fuerza expresiva del incremento del tiempo de exposición (hacer clic para ver a mayor resolución):


~~~

Estas simples líneas de código en R realizan la lectura y promediado de las 14 capturas RAW, y guardan el resultado. Con la forma acumulativa de leer los datos en ningún momento se ocupa más memoria de la requerida para almacenar una imagen, así que podríamos promediar un número arbitrariamente alto de capturas sin ningún problema de memoria RAM:


Vemos en el código los niveles de negro (512) y de saturación (16383) de la Sony A7 II, usados para escalar los datos a un archivo RAW de salida de 16 bits con nivel de negro en 0 y nivel de saturación en 65535.

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