domingo, 27 de junio de 2021

Reducción de ruido por sustracción de darkframe en RAW

Como cierre de la serie 'Generando un RAW en formato DNG a partir de un TIFF', vamos a hacer un ejercicio clásico de reducción de ruido por sustracción de darkframe en RAW. Esta técnica, que aplican internamente casi todas las cámaras digitales cuando se activa la reducción de ruido en tomas de larga duración, y que es un imprescindible en astrofotografía, persigue reducir el ruido sustrayendo del archivo RAW de imagen los valores correspondientes a una captura realizada en ausencia de luz.

De este modo todos aquellos fotocaptores con comportamientos anómalos (hot pixels) cuando son sometidos a estrés (típicamente capturas de larga duración y/o con ajustes ISO elevados), verán en gran parte neutralizado su efecto. Puede considerarse una reducción de ruido no destructiva ya que no aplica ningún algoritmo sobre conjuntos de píxeles, por lo que no implica pérdida de información útil o detalle.

~~~

La escena sobre la que vamos a realizar el ejercicio se capturó a ISO12800 con un tiempo de exposición de 30s:


Para construir un darkframe más preciso del que obtendríamos con una sola toma, hacemos 10 capturas con el objetivo tapado y los mismos parámetros de disparo (30s, ISO12800). En lugar de promediarlas optamos por calcular la mediana que será más robusta frente a outliers, es decir fotocaptores cuyo comportamiento inesperado pueda dispararse solo en alguna de las tomas.

En capturas sin luz el valor teórico esperable que deberían arrojar todos los fotocaptores es el nivel de negro del sensor, 512 en la cámara usada (Sony A7 II). De acuerdo a esto, en los histogramas RAW del darkframe parecen distinguirse cualitativamente tres comportamientos o desviaciones:

  • Un grupo de fotocaptores con niveles solo ligeramente por encima del nivel de negro del sensor (rango 500-1.000).
  • Un grupo de fotocaptores que se desvían bastante más, concentrados entorno al nivel 1.200. Veremos luego que estos fotocaptores se sitúan mayoritariamente en los bordes del sensor.
  • En el extremo tenemos un pico correspondiente a fotocaptores quemados en todas las capturas. Son hot pixels del sensor permanentemente saturados (nivel 16.383). Hemos detectado 471 fotocaptores de este tipo.


~~~

Pero qué efecto provocan estos fotocaptores anómalos?. Cuando un fotocaptor codifica un valor muy diferente (generalmente mayor) al esperado, se generan colores altamente erróneos que se extienden a píxeles adyacentes al hacer el demosaicing. El color será más disparatado cuanto mayor sea la diferencia entre el nivel codificado y el que se tendría en condiciones normales.

En la siguiente imagen puede verse cómo el algoritmo de DCRAW extiende el efecto de cada fotocaptor anómalo a su área circundante de 3x3 píxeles:


Por este motivo es importante resolver el problema en el dominio Bayer, o sea antes de hacer el revelado RAW. Hay que decir que la mayoría de reveladores RAW comerciales, sin necesidad de hacer sustracción de darkframe, realizan una detección y neutralización automática de píxeles anómalos así que con ellos es complicado llegar a ver estos efectos de forma tan acusada. La sustracción de darkframe sería un paso de mejora previa que solo llegaría a hacerse necesario en aplicaciones críticas como la astrofotografía.

Exagerando niveles para hacer visibles los patrones de ruido la siguiente imagen muestra nuestro darkframe final. Aquí se ha coloreado en función de cada nivel de gris pero el darkframe no tiene color, ya que ni la luz ni por tanto los filtros de color tienen impacto en el mismo (hacer clic para ampliar):


Puede verse que la periferia salvo uno de los lados sufre mayores niveles de anomalías. También se distinguen patrones espaciales de ruido (fixed pattern noise) dispuestos en bandas verticales del sensor y horizontales en menor medida, que la sustracción de darkframe en parte también ayudará a mitigar.

~~~

Veamos la mejora que se produce al realizar la sustracción de darkframe. En la parte superior se tiene un recorte al 200% del RAW original y en la inferior del RAW con sustracción. El revelado se ha hecho con DCRAW para evitar la supresión de píxeles anómalos que hacen los reveladores comerciales y que nos impediría ver la mejora derivada exclusivamente del uso del darkframe:




Se comprueba que la eliminación de efectos anómalos es total, sobreviviendo exclusivamente el ruido electrónico esperable en las condiciones de disparo. Los archivos RAW original y el resultante de la sustracción del darkframe pueden bajarse de: sindarkframe.dng y condarkframe.dng (NOTA: si procesas la captura original con tu revelador RAW espera encontrar muchos menos hot pixels que en estas imágenes por el motivo expuesto).

~~~

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.