En este artículo vamos a desgranar paso a paso la metodología clásica para calcular el Rango dinámico de un sensor digital de imagen, basándonos en mediciones precisas de ruido hechas sobre capturas RAW de parches de color uniforme.

- Sensores de 10 bits (1.024 niveles): nivel de negro 64 o 128
- Sensores de 12 bits (4.096 niveles): nivel de negro 256
- Sensores de 14 bits (16.384 niveles): nivel de negro 512 o 1.024
dcraw -v -D -t 0 -4 -T *.DNG
extraemos en formato TIFF los datos de todos los archivos RAW. Siendo la Olympus OM-1 una cámara de 12 bits lo esperable sería encontrar el nivel de negro en el valor 256, lo que comprobamos con el histograma RAW de la toma ISO800:

BLACK=256 # Olympus OM-1 black level SAT=4095 # Olympus OM-1 sat level img=readTIFF("iso25600.tiff", as.is=TRUE) img=img-BLACK img=img/(SAT-BLACK)
Rcpp
reduciendo el tiempo de cálculo por un factor 240!!!
- El nivel de Señal útil: promedio de los valores RAW
- El nivel de Ruido: desviación estándar de los valores RAW
- La Relación S/N: cociente entre los anteriores


- RD fotográfico (práctico): pasos desde saturación hasta S/N=12dB
- RD ingenieril (teórico): pasos desde saturación hasta S/N=0dB


- El canal RAW analizado (R, G1, G2, B).
- El nivel de negro del sensor usado para linealizar y normalizar los niveles RAW.
- El tamaño de los parches sobre los que hemos hecho las mediciones de ruido.


El histograma lo dice todo: el mejor candidato entero para situar el nivel de negro del sensor es 255, no 256 como hemos usado en todo el tutorial. Pero podemos ir un poco más lejos y fijarnos en que el histograma RAW tiene más píxeles con valor 254 que 256. Esto hace pensar que el verdadero nivel de negro analógico que genera el sensor no caería exactamente en ninguno de los valores enteros que arroja el conversor A/D, sino que debería estar algo por debajo de 255.
Siendo así un valor de negro aún más preciso podría ser la media de los valores RAW (BLACK=254.85). Estoy preparando un artículo donde se explica por qué ese promedio tan inmediato de obtener resulta ser una buena estimación del punto preciso dónde caería el valor de negro analógico a la entrada del conversor A/D.
Usar valores con decimales tiene sentido si el procesado se va a hacer con software que trabaje en coma flotante, como es nuestro cálculo de RD. Dudo que los reveladores comerciales estándar pudieran aprovechar tal nivel de refinamiento ya que a efectos de la imagen resultante la diferencia respecto a usar enteros tampoco se iba a notar demasiado.
Finalmente las curvas más precisas que podemos calcular (BLACK=254.85):
Repositorio con el código R: 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.