martes, 4 de mayo de 2021

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

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:



Cuantificada la reducción de ruido al promediar capturas, podemos calcular la mejora obtenida en función del número de fotografías que apilemos. Al tratarse de una progresión logarítmica se necesitan muchas tomas para lograr valores (logarítmicos) de mejora grandes:



Las fórmulas que generan estas gráficas se muestran a continuación, deduciéndose directamente del desarrollo expuesto.

~~~

Escogemos una escena de alto contraste que no ganará ningún premio pero sirve perfectamente para ver las bondades en cuanto al ruido del apilado, y realizamos 16 capturas sobre la misma. Recopilamos las características que tendrá el DNG que vamos a generar:

  • Número de capturas origen: 16 tomas a ISO100
  • Equivalencia ISO: sensor con ISO6 (100/16)
  • Equivalencia filtro ND: filtro ND de log2(16) = 4 pasos
  • Mejora en rango dinámico: log4(16) = 2EV
  • Mejora lineal en ruido: 2log4(16) = 161/2 = 4 veces menos ruido



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, 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 cuando eliminamos 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,02EV 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 individuales:


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. Estas bandas, presentes en todas las tomas individuales, eran sin embargo indetectables en ellas al quedar enmascaradas por el ruido electrónico, de mayor amplitud. 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.

En 'Apilado por media para simular ISO ultra bajo/filtro ND en RAW (II)' hacemos la segunda parte de este ejercicio aplicando la técnica estudiada a la obtención de un archivo RAW de larga exposición.

~~~

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.