domingo, 27 de junio de 2021

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

Como nueva muestra de '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 (sí, estaba muy oscuro):


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 o por debajo del nivel de negro del sensor (rango ~250-750). Constituirían el funcionamiento normal y deseable.
  • 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 fotosito codifica un valor muy diferente (generalmente mayor) al esperado, tras el demosaicing se generan colores altamente erróneos que se extienden a píxeles vecinos. El color será más disparatado cuanto mayor sea la diferencia entre el nivel codificado y el que se habría tenido en condiciones normales.

El área de afectación de estos colores erróneos dependerá del algoritmo de interpolación usado. En la siguiente imagen puede verse cómo DCRAW por ejemplo 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 muy buena 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, probablemente coincidiendo con zonas a mayor temperatura o cercanas a fuentes de calor. 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 también ayudará a mitigar.

~~~

Veamos la mejora que se produce al realizar la sustracción de darkframe. En la imagen superior se tiene un recorte al 200% del RAW original y en la central 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.

Abajo un revelado estándar del RAW original con ACR donde vemos que se eliminan casi todos los hot pixels sin necesidad de sustraer el darkframe. La visión que muestran los reveladores sobre el rendimiento del sensor a efectos de píxeles con comportamiento defectuoso es más optimista que la cruda realidad.



Se comprueba que la eliminación de efectos anómalos al sustraer el darkframe es total, sobreviviendo exclusivamente el ruido electrónico gaussiano 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. Recuerda que si procesas la captura original con un revelador RAW comercial seguramente encontrarás muchos menos hot pixels de los realmente existentes.

~~~

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.