martes, 4 de mayo de 2021

Apilado por mediana para eliminar sujetos en movimiento en RAW

En el tercer ejercicio de los planteados en 'Generando un RAW en formato DNG a partir de un TIFF', vamos a ver cómo la mediana resulta útil para eliminar sujetos en movimiento que con una media generarán ghosting.

Las siguientes imágenes proceden de 5 capturas RAW: la media genera fantasmas con transparencia, mientras la mediana elimina por completo los vehículos salvo en aquellos puntos en que aparecían coches en al menos la mitad de capturas, es decir en 3 fotos en este caso (clic para ver las imágenes en alta resolución):




El resultado puede descargarse de rawmean.dng y rawmedian.dng siendo el esperado, pero algunas cosas me han sorprendido:
  • El desalineamiento entre tomas provoca pérdida de nitidez en la media como era lógico. Sin embargo la mediana, donde creí que encontraría importantes artefactos de color, ha resultado muy robusta frente al mal alineamiento proporcionando imágenes con demosaicing correcto y gran detalle.
  • Los residuos de sujetos en movimiento en la mediana se mantienen compactos, cuando pensé que habría zonas de píxeles alternados de varias tomas. Esto está relacionado con el punto anterior, y es que en zonas de "conflicto" la mediana tiende a tomar todos los valores del mismo RAW y de ahí su continuidad y nitidez.
  • Pueden verse altas luces magenta en el DNG media (brillos en los techos de los coches) tras aplicar el balance de blancos. Para evitarlo habría que hacer un preprocesado para garantizar que en cuanto alguno de los RAW origen esté saturado en un fotocaptor, dicha saturación, y por tanto su neutralidad, se transfiera al RAW promedio. La mediana es inmune a este problema.



Mirando el resultado por media, llegamos a distinguir los 3 vehículos (procedentes de 3 capturas diferentes) que coincidieron en cierta porción de la imagen dando lugar al residuo indeseable de vehículo en la mediana.

En el mapa de fusión de la mediana identificamos por un tono de gris el RAW origen que suministró el dato en cada píxel (es necesario hacer clic par verlo en detalle), resultando las contribuciones raw1.dng (20,3%), raw2.dng (22,8%), raw3.dng (34,4%), raw4.dng (10,8%) y raw5.dng (11,7%):



Es poco atractivo pero con él podemos corroborar que la nitidez en las zonas problemáticas se logra gracias a que en ellas la mediana tiende a obtener la información de un mismo RAW (ver zonas de tono gris uniforme en el mapa de fusión para los bordes de la farola y el artefacto del coche):



La mediana se ha implementado en C++ con Rcpp, reduciendo el tiempo de ejecución por un factor superior a 10 respecto a la función de R base.

~~~

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.