Fecha actual Jue Nov 21, 2024 2:04 pm


"Restauración" de un archivo RAW

El rincón de los hilos tecnofrikis

Moderadores: IOM60, laucsap60, klomp, Siniestro, Guillermo Luijk, Pablo Valido

"Restauración" de un archivo RAW

Notapor Guillermo Luijk » Sab Feb 26, 2022 9:41 pm

A un usuario se le ha escacharrado el sensor de su Canon 7D. Los archivos RAW presentan niveles bajísimos (casi negro) en una de cada 8 columnas de fotositos (en concreto de valores G-B de la matriz de Bayer), lo que hace pensar que algo ha fallado en la electrónica responsable de realizar la lectura de esas columnas. Seguramente la solución sea un cambio de sensor.

He tratado de hacer un apaño con una simple sustitución en el RAW de las columnas defectuosas por el promedio de los valores de sus columnas G-B vecinas. El resultado no es perfecto ya que aparecen artefactos en zonas de cambios bruscos de luminosidad en horizontal, pero al menos salva la aparición de las líneas que inutilizaban por completo la imagen original.

El archivo RAW restaurado se puede bajar de:
http://guillermoluijk.com/download/rayasrestaurado.dng

Matriz de Bayer del RAW original donde puede verse que la electrónica de lectura tiene un fallo en 1 de cada 8 columnas:
Imagen

Comparación revelado del RAW original vs RAW "restaurado":
http://guillermoluijk.com/misc/antesdespues.jpg

Aspecto general del revelado del RAW "restaurado":
http://guillermoluijk.com/misc/rayasrestaurado.jpg

Recorte al 400% poniendo de manifiesto los artefactos del método tan simplón usado:
http://guillermoluijk.com/misc/rayasrestauradocrop.jpg

Las 3 líneas de código que hacen el procesado:
Código: Seleccionar todo
i=which(!col(img)%%8)  # affected pixels (1 out of each 8 columns)
NROW=nrow(img)
img[i]=(img[i-2*NROW]+img[i+2*NROW])/2  # replace averaging both sides


Salu2!
Avatar de Usuario
Guillermo Luijk
 
Mensajes: 9635
Registrado: Dom Ene 31, 2010 6:37 am
Ubicación: Madrid (a ratos Alicante)

Re: "Restauración" de un archivo RAW

Notapor Rafa Buscaret » Sab Feb 26, 2022 9:56 pm

Para un pobre ignorante como yo, eso es pura magia :o
Además de saber programar la rutina, lo que me parece más difícil es saber dónde encontrar los datos a tratar (conocer la estructura de la base de datos)
Avatar de Usuario
Rafa Buscaret
 
Mensajes: 1772
Registrado: Vie Jul 30, 2021 4:41 pm
Ubicación: En una reserva para indígenas. Mallorca

Re: "Restauración" de un archivo RAW

Notapor Rafa Buscaret » Sab Feb 26, 2022 10:42 pm

Y una cuestión que se me ocurre:

Hace años se decía que un Raw era inviolable. Dicho de otra manera, que no se podía manipular un raw dentro del raw y que quedase como tal raw.

¿Eso ha cambiado o ya era falso entonces?
Avatar de Usuario
Rafa Buscaret
 
Mensajes: 1772
Registrado: Vie Jul 30, 2021 4:41 pm
Ubicación: En una reserva para indígenas. Mallorca

Re: "Restauración" de un archivo RAW

Notapor Guillermo Luijk » Sab Feb 26, 2022 11:31 pm

Rafa Buscaret escribió:¿Eso ha cambiado o ya era falso entonces?

Eso ha sido una trola desde que existen los archivos RAW :P
Un archivo RAW no es más que un fichero que tiene números dentro. Solo tienes que cambiar esos números y ya has cambiado el RAW. Lo que ocurre es que editar un RAW es algo bastante inútil ya que es más fácil editar la imagen ya revelada. Aquí hago algunos RAW sintéticos:

https://www.overfitting.net/2021/04/gen ... artir.html

He probado una mejora, ahora el canal G lo tomo de los 4 fotositos G más cercanos. El B lo sigo tomando como promedio de las columnas a 2 fotositos por la izquierda y por la derecha:

Imagen

Salu2!
Avatar de Usuario
Guillermo Luijk
 
Mensajes: 9635
Registrado: Dom Ene 31, 2010 6:37 am
Ubicación: Madrid (a ratos Alicante)

Sobre las columnas defectuosas

Notapor Guillermo Luijk » Dom Feb 27, 2022 12:23 pm

Sobre las columnas defectuosas, son píxeles casi apagados. Digo casi porque aunque en la imagen que puse se ven casi negros, aún tienen señal útil, pero difícil de recuperar (luego comento más). Es como si la amplificación que debía hacerse sobre esas columnas se hubiera venido abajo; en términos fotográficos podemos verlo como que esas columnas se hubieran leído con un ISO3 (me invento la cifra, pero puede estimarse).

Lo que hace el código es simplemente sustituir el valor numérico de los fotositos defectuosos por un cálculo promedio de valores cercanos. En concreto para la segunda versión del apaño he hecho esto:

Imagen

Es decir los valores G defectuosos se sustituyen por el promedio de los valores de los 4 fotositos G que los rodean, y con los B promedio sus dos vecinos a izquierda y derecha pero a 2 columnas de distancia claro.
Éste es el código que implementa esas operaciones (está en R por si alguien conoce el lenguaje, hace muy fácil manipular zonas selectivas de una imagen sin necesidad de hacer ningún bucle como pasa en casi todos los lenguajes):

Código: Seleccionar todo
# METHOD 2

# B photosites
i=which(!col(img)%%8 & !row(img)%%2)
img[i]=(img[i-2*NROW]+img[i+2*NROW])/2

# G photosites
i=which(!col(img)%%8 & row(img)%%2)
img[i]=(img[i-NROW-1]+img[i-NROW+1]+img[i+NROW-1]+img[i+NROW+1])/4


Esto se puede mejorar todavía más. Un paso fácil estaría en los valores G donde es fácil tratar de detectar gradientes (es decir cambios de tonalidad bruscos) en dirección horizontal y vertical, y combinar esos 4 valores que ahora promedio de forma más elaborada para emular la continuidad del gradiente. Pero ahora mismo el eslabón débil son los valores de B, que se basan en valores correctos muy alejados de la columna defectuosa, lo que ocasiona los artefactos.

Sobre las columnas defectuosas, comparo aquí exactamente lo que hay en ellas vs el valor correcto (son imágenes de 650px de lado porque vienen de reducir sin interpolación a 1/8 el tamaño original de 5202 píxeles de ancho):

https://i.ibb.co/tsDJ7J2/defectivegdata.png

Lo de arriba son valores RAW, es decir son directamente los números que hay en el canal G en las tripas del archivo RAW, sin ningún revelado ni interpolación. Puede verse que en las columnas defectuosas hay información, pero muy subexpuesta y además imposible de rescatar (no es uniforme y tiene una especie de efectos blooming que invaden columnas hacia la derecha). Esto da algunas pistas de cómo está implementada la circuitería de la cámara, parece que la lectura del sensor la llevasen a cabo 8 circuitos separados, cada uno de ellos haciéndose cargo de una de cada 8 columnas de fotositos, y a Cosme se le ha jodido uno de esos 8 circuitos.

Salu2!
Avatar de Usuario
Guillermo Luijk
 
Mensajes: 9635
Registrado: Dom Ene 31, 2010 6:37 am
Ubicación: Madrid (a ratos Alicante)

Re: "Restauración" de un archivo RAW

Notapor JMLA » Dom Feb 27, 2022 1:58 pm

Quizá funcionara mejor sustituir cada columna que falta por la inmediata anterior sin mediar con la siguiente, para evitar ese efecto de vidrio grabado. Aunque habría que verlo.
Avatar de Usuario
JMLA
 
Mensajes: 1512
Registrado: Mié Ago 02, 2017 10:15 am

Re: "Restauración" de un archivo RAW

Notapor Guillermo Luijk » Dom Feb 27, 2022 2:24 pm

JMLA escribió:Quizá funcionara mejor sustituir cada columna que falta por la inmediata anterior sin mediar con la siguiente, para evitar ese efecto de vidrio grabado. Aunque habría que verlo.

Piensa que en la columna inmediata anterior no hay fotositos azules :D sino claro que lo habría hecho así.
Dependiendo del contenido de la escena, los canales RGB del RAW pueden correlar desde mucho hasta nada, así que no es sustituible un valor B por un R o G.

Aquí precisamente estudiaba estas correlaciones:
https://www.overfitting.net/2018/06/dec ... con-r.html

Salu2!
Avatar de Usuario
Guillermo Luijk
 
Mensajes: 9635
Registrado: Dom Ene 31, 2010 6:37 am
Ubicación: Madrid (a ratos Alicante)


Volver a PhotoLab



¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 53 invitados