PDA

Ver la Versión Completa : QuÉ pasa cuando se quema el sol? Raw y revelado raw



Guillermo Luijk
22/03/17, 23:15:14
El sol es una de las fuentes de luz que por su intensidad relativa respecto al resto de la escena (otras serían los reflejos especulares, fuentes artificiales de luz directa, las estrellas en cielo nocturno,...), no queda más remedio que dejarla quemarse la mayoría de veces que nos entra en el encuadre. Eso no quita para que este "quemazo" solar no tenga sus implicaciones en el resultado.

He analizado qué pasa en el archivo RAW cuando el sol entra en escena, así como la forma en que el revelador RAW se las apaña para darnos un resultado en la zona.

Lo que ocurre básicamente en el RAW es que los canales se van saturando por turnos conforme nos vamos acercando al centro del disco solar, siguiendo en general el orden: verde -> azul -> rojo (es posible que en ciertos sensores el canal rojo sature antes que el azul; sí es muy raro que no sea el verde el primero en caer). En el centro del disco los 3 canales estarán saturados en el RAW y no tenemos información de ningún tipo.

El revelador RAW distinguirá tres zonas:

Donde los 3 canales estaban saturados generará un quemazo de blanco puro.
En la franja en la que solo uno o dos canales estén quemados en el RAW, generará textura en forma de degradado de color neutro o si se aplica algún algoritmo de inpaint intentará estimar el color en base al tono circundante.
Fuera de dicha franja el comportamiento será el normal, y con los 3 canales intactos obtendremos la textura y color correctos.

Cuanto menos se exponga la captura, menores serán las zonas de blanco puro y saturación parcial, así que habrá que encontrar el equilibrio entre la calidad obtenida para el conjunto de la escena y para el sol. Una buena solución es hacer alguna captura extra especialmente subexpuesta solo para rescatar con más calidad el disco solar. No tendrá los problemas habituales del HDR (alineamientos, fantasmas, etc...) porque se trata de una zona muy localizada que puede fusionarse manualmente con capas en Photoshop sin mucho esfuerzo.

He estudiado esta escena típica (JPEG de la cámara):

http://www.guillermoluijk.com/misc/sun.jpg


Con la idea de que no se nos queme demasiado el círculo solar, y confiando en el buen rango dinámico del sensor, subexponemos un poco la escena global con el ánimo de "levantar" las sombras en procesado preservando lo mejor posible el quemazo del sol. Si en lugar del JPEG acudimos al RAW, veremos que moviéndonos sobre la anterior línea roja tenemos estos niveles RAW:

http://www.guillermoluijk.com/misc/suncanalesraw.png


Dos cosas llaman la atención enseguida:

El primer canal que se quema es el verde. Luego vienen el azul, y el que menos se quema es el rojo.
El sensor (Sony A7 II) en este caso tiene un comportamiento muy noble pues la saturación de uno o dos canales no afecta a la respuesta del restante o restantes (no cambia su comportamiento pese a estar rodeado de fotositos saturados).

Si ampliamos la gráfica hasta los extremos de la imagen, es decir para toda la fila de píxeles, vemos que la deriva de exposición entre el sol y los bordes de la imagen (afectados por el viñeteo de la óptica) llega a ser de unos nada despreciables 7 pasos para el canal rojo:

http://www.guillermoluijk.com/misc/suncanalesrawall.png


A menudo se menosprecia la importancia del rango dinámico de los sensores porque no se van a "levantar sombras". Pues bien, corregir el viñeteo es levantar sombras, y lo que hacen la cámara o el revelador RAW al aplicar una curva tonal es levantar sombras. Aquí la gráfica equivalente a la anterior pero para el JPEG, donde puede verse que la luminosidad se ha aumentado respecto al RAW en unos 2 pasos, y el viñeteo no se había corregido aún; suma y sigue Mr. el rango dinámico no importa porque yo no levanto sombras:

http://www.guillermoluijk.com/misc/suncanalesjpegall.png


Ahora vamos a revelar el RAW siguiendo dos estrategias diferentes para las altas luces: con DCRAW (opción -H 2) buscaremos un degradado neutro en la zona donde algún canal RAW se saturó. Con RawTherapee (algoritmo 'Propagación de color') le pediremos al programa que en la zona donde algún canal RAW se saturó estime el color basándose en el tono del área circundante.

DCRAW con altas luces neutras (-H 2):
http://www.guillermoluijk.com/misc/suncanalesreveladoraw.png

RawTherapee con algoritmo de altas luces 'Propagación de color':
http://www.guillermoluijk.com/misc/suncanalesreveladorawrt.png


De nuevo vemos dos cosas:

Solo en la zona donde los 3 canales RAW estaban simultáneamente quemados, se genera un blanco puro sin detalle (RawTherapee suministra cierto color, lo que es fácil de corregir pero me parece un bug tonto).
En la franja donde solo uno o dos de los canales RAW estaban quemados (el verde, o el verde y el azul), DCRAW genera textura pero completamente neutra (R=G=B), mientras que RawTherapee emula muy bien la progresión de canales fuera de la zona de saturación.

A nivel imagen cuesta ver la diferencia entre ambos reveladores, pese al trabajo mejorado de RawTherapee. Cuando saturamos fuertemente sí queda patente cómo actúa RT en las zonas donde DCRAW suministra una aureola gris:

http://www.guillermoluijk.com/misc/sunsatvsrt.png


La parte interior que he pintado en negro es blanco puro, la región donde los 3 canales RAW estaban quemados a la vez y los reveladores no podían rescatar textura ni color.
El disco gris que rodea a la zona anterior para la imagen de DCRAW (arriba), es donde se obtuvo textura en forma de degradado monocromo. En el revelado de RawTherapee (abajo) vemos que no hay tal disco gris.
Fuera de ese disco los 3 canales RAW estaban intactos, y el revelado RAW produjo la textura y color correctos que allí debía haber (un tono azul).

El código en R por si alguien se anima a usarlo para analizar imágenes:


# Estudio de captura sobre el sol con R

# Extracción RAW con DCRAW: dcraw -v -r 1 1 1 1 -o 0 -4 -T sun.ARW
# Revelado lineal con DCRAW: dcraw -v -w -o 2 -H 2 -4 -T sun.ARW

# Librería imágenes en 16 bits
library(tiff)

# Leemos extracción RAW
sun=readTIFF("sunRAW.tiff", native=F, convert=F)

# Dibujamos gráficas
xaxis=seq(0, 1, len=1000)

plot(xaxis, log2(sun[1168,3500:(4500-1),1]), type='l', col="red", main="Canales RAW",
xlab="Eje X (línea roja)", ylab="Exposición RAW (EV)")
lines(xaxis, log2(sun[1168,3500:(4500-1),2]), col="green")
lines(xaxis, log2(sun[1168,3500:(4500-1),3]), col="blue")

# Leemos revelado RAW
sun=readTIFF("sun.tiff", native=F, convert=F)
sun=sun/max(sun)

# Dibujamos gráficas
xaxis=seq(0, 1, len=1000)

plot(xaxis, log2(sun[1168,3500:(4500-1),1]), type='l', col="red", main="Canales revelado RAW",
xlab="Eje X (línea roja)", ylab="Exposición revelado RAW (EV)")
lines(xaxis, log2(sun[1168,3500:(4500-1),2]), col="green")
lines(xaxis, log2(sun[1168,3500:(4500-1),3]), col="blue")

abline(h=c(0,-1,-2,-3), col="lightgray", lty = "dotted") # rejilla horizontal


Salu2!

jorgelopez
22/03/17, 23:46:52
Muy interesante
Muchas graciaspor el esfuerzo,

dariogf
23/03/17, 00:19:14
Un tema del que jamás habría aprendido nada en otro sitio. Gracias Guillermo.

u420067
23/03/17, 10:24:12
Muy interesante, Guillermo. Gracias por tus aportaciones.

elmenda2003
23/03/17, 11:40:56
Guillermo, Eres un hacha! eres capaz de profundizar y de sacar jugo donde la mayoria ni sabemos cómo empezar a rascar el suelo. Me encanta seguir tus explicaciones, aunque me pierda a menudo. Siempre acabo pensando: después me lo miro con más calma, a ver si lo entiendo del todo... :OK:aplausos:mmmmm

Neofito
30/03/17, 21:43:19
muchas gracias por el curro y la explicación.

Mcadol
30/03/17, 22:13:35
suscribo y me sumo a los agradecimientos