martes, 4 de mayo de 2021

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

En este segundo ejemplo de 'Generando un RAW en formato DNG a partir de un TIFF', vamos a promediar varios archivos RAW procedentes de capturas perfectamente alineadas realizadas sobre la misma escena para construir un DNG de salida de características mejoradas.

En el apilado DNG resultante tendremos un doble efecto:

  • Aumento del tiempo de exposición respecto a cada toma individual: el tiempo de exposición equivalente será la suma de tiempos de todas las capturas realizadas. Es por eso que esta técnica se usa, y de hecho varias cámaras del mercado la implementan (Olympus, Sigma fp), para simular filtros ND por software o lo que es lo mismo, simular valores ISO ultra bajos.
  • Mejora en ruido y ganancia de rango dinámico: la estadística de la relación S/N dicta que por cada 4 muestras que promediemos el ruido se reduce a la mitad al sumarse en cuadratura, o equivalentemente ganamos 1 paso de rango dinámico. Si promediamos 16 capturas el ruido se reducirá a la 1/4 parte ganando 2 pasos de rango dinámico, y así sucesivamente:


~~~

Escogemos una escena de alto contraste que no ganará ningún premio pero nos sirve perfectamente para ver las bondades en cuanto al ruido del apilado. Realizamos 16 capturas sobre la misma, lo que equivaldrá a un filtro ND de 4 pasos, o un tiempo de exposición propio de ISO6 ya que las capturas se hicieron a ISO100. Habrá una mejora de 2 pasos en rango dinámico, equivalente a incrementar la relación S/N por un factor 22 = 4:




Las bandas que aparecen en el sillón existen en los RAW originales y son debidas a un blooming del sensor (no me esperaba esto de mi Sony A7 II), no teniendo relación con el proceso de apilado. Como casi todas las escenas donde se tiene un interior con alguna ventana abierta a un exterior con luz de día, se alcanza un rango dinámico de unos 12-13 pasos reales:



El anterior histograma procede del RAW sintético de 16 bits resultado del apilado. Si hiciéramos lo propio con cualquiera de los RAW de entrada, tendríamos la misma distribución pero con muchos menos niveles utilizados por la limitación de 14 bits lineales:



Si comparamos el resultado en las sombras profundas veremos el efecto de ganar esos 2 pasos completos de rango dinámico con el apilado. Las superficies con textura lisa se limpian de ruido, pero donde más notamos la mejora es en los relieves del sillón, apenas apreciables en las capturas individuales. Incluso un cabello invisible se hace patente al eliminar el ruido que lo enmascaraba:


Haciendo el promediado por mediana en lugar de con la media el resultado es muy parecido pero algo inferior. Esto unido a que computacionalmente la mediana resulta mucho más costosa (la hemos tenido que implementar en C++ con Rcpp) nos decanta por el promediado simple para esta aplicación. El resultado puede bajarse de meanstacking.dng.

~~~

Hacemos otra prueba esta vez bastante más extrema: utilizamos fotos de muy baja exposición lumínica (ISO25600), pero totalizando... 265 capturas. Vamos a ver si se puede compensar la exposición ruinosa con fuerza bruta. Hacer este número de tomas equivale a ganar log4(265) = 4,02 pasos en rango dinámico, o mejorar la relación S/N por un factor 24,02 = 16,3:


La mejora como no podía ser de otro modo con un promediado tan radical es apabullante, pudiendo rescatar detalles y texturas completamente indetectables por el ruido en las tomas originales:


Sin embargo al haber hecho las capturas con niveles de exposición tan bajos ha aflorado el pattern noise del sensor en forma de bandas verticales muy visibles. Con toda probabilidad el resultado mejoraría realizando una sustracción de darkframe como hicimos en 'Reducción de ruido por sustracción de darkframe en RAW'. El RAW final puede bajarse de meanstackingradical.dng.

~~~

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