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.

En el apilado DNG resultante tendremos un doble efecto:

  • Tiempo de exposición equivalente a 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, obtener el equivalente a valores ISO ultra bajos.
  • Ganancia estadística en relación S/N: por cada 4 muestras que promediemos el ruido se reduce a la mitad, 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 a la belleza o creatividad 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:



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 llenos 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 las texturas 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 más costosa (la hemos tenido que implementar en C++ con Rcpp) nos decanta por el promediado simple para esta aplicación.

~~~

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