Midiendo el rango dinámico de una cámara

Guillermo Luijk

Fujista de renombre
En webs como DxOMark o Photons to Photos (Bill Claff) se hacen mediciones del rango dinámico de un sensor. El procedimiento, elecciones particulares de cada uno al margen, es bastante estándar. Me ha pasado Hugo Rodríguez unos archivos de una Olympus OM-1 que permiten precisamente este cálculo. La idea es ver si el algoritmo fructifica en una app para que cada cual pueda medir el RD de su cámara (por cierto quien sepa generar ejecutables y pueda estar interesado que lo diga).

Pasos:

Se fotografían con la cámara parches de color uniforme poco expuestos: en este caso se muestra la toma a ISO12800. Se hace desenfocada sobre un monitor para no capturar la textura como ruido. El color magenta es para reducir los niveles verdes en el RAW relativos a los rojos y azules, y así tener valores más similares. En mi caso me ha dado igual porque solo tomaré el canal verde del RAW para la prueba:

parches_iso12800_carta.jpg


Del archivo RAW se extraen (con DCRAW) los datos RAW puros, es decir los valores numéricos sin revelar el RAW, y en concreto uno de los canales G de la matriz de Bayer. Con esos valores se construye una imagen monocroma a la que se corrige el error de perspectiva de la captura para poder identificar más fácilmente los parches. Aunque hay corrección geométrica no hay interpolación, todos los valores de la siguiente imagen son tal cual aparecían en el RAW (es lo que se llama "interpolación" nearest neighbour):

parches_iso12800.jpg



Acotados los parches que vana usarse, vemos que se desecha una buena parte de la imagen porque es más importante que el desenfoque no contamine los parches de sus vecinos que el disponer de muchos píxeles. Para mi gusto esta carta (es la que propone en su web Bill Claff), tiene demasiados parches. No hacen falta tantos, y con menos parches el método sería más robusto frente al desenfoque y la distorsión.

A continuación se lee en cada parche el nivel de señal útil o valor de exposición RAW (la media de valores RAW en el parche) así como el ruido (desviación estándar de los valores RAW en el parche, es una operación estadística perfectamente conocida). El cociente de ambos constituye la relación S/N:

S/N = Media(niveles en parche) / DesvEstandar(niveles en parche)

Nuestro objetivo precisamente es obtener las Curvas de relación S/N, que son las gráficas que nos dan la relación S/N (aquí la mostraremos en escala de decibelios=dB) para cada posible valor de señal (nivel de exposición RAW mostrado en pasos respecto a la saturación, la cual situamos en la referencia 0EV).

Cada parche de cada captura (Hugo me ha pasado 10 archivos RAW a todos los ISOs de la cámara) proporciona una muestra representada como un circulito rojo. La gráfica queda así:

snr_olympusOM1.png


Y qué tiene que ver esto con el Rango dinámico? todo. Sobre esas curvas, y elegido un criterio umbral de relación S/N mínima exigible para considerar el RD utilizable en fotografía, se mide cuantos pasos desde la saturación (el 0EV de la derecha en el eje X) hay hasta que se alcanza una relación S/N de 12dB (criterio fotográfico de ruido aceptable).

Por ejemplo si seguimos la curva de ISO800, vemos que cruza la línea horizontal de 12dB casi en el punto -8EV, por lo tanto la Olympus OM-1 ISO800 tiene unos 7,8-7,9 pasos de rango dinámico efectivo utilizable en fotografía.

Si os fijáis en la forma de las curvas, las de ISO200-800 van muy paralelas, y lo mismo el resto de ISO1600-ISO65535. El cambio de comportamiento no es un error, es más bien signo de que "algo se cuece" en las tripas de esta cámara, ya sea algún procesado software de ruido clandestino (malo), o por algún mecanismo hardware tipo dual-gain (bueno). Si miramos la gráfica de RD de Bill Claff para esta cámara, veremos un "salto" extraño en la tendencia justo tras ISO800:

snr_olympusOM1csClaff.png


Este tipo de cosas, que se ven mejor atendiendo al detalle de las Curvas de relación S/N, son las que explican los "saltos" y comportamientos aparentemente caprichosos del RD de ciertas cámaras vs el ISO.

Al que le guste la programación, aquí está todo:

Salu2!
 
Última edición:
Gracias guijarro. Bill confirma que la cámara cambia su comportamiento a partir de ISO800 por hardware: "Yes, the Olympus System OM-1 looks to have High Conversion Gain (HCG) starting at ISO 1000 (and Noise Reduction starting at ISO 16000)".

He añadido curvas splines de aproximación para dibujar las Curvas de relación S/N y automatizar el cálculo numérico del rango dinámico (para los 2 criterios típicos: fotográfico de 12dB e ingenieril de 0dB):

SNRcurves.png


iso200
60/77 patches used
Dynamic range for 12dB: 9.5EV
Dynamic range for 0dB: 11.9EV
iso400
66/77 patches used
Dynamic range for 12dB: 8.7EV
Dynamic range for 0dB: 11.3EV
iso800
69/77 patches used
Dynamic range for 12dB: 7.9EV
Dynamic range for 0dB: 10.5EV
iso1600
74/77 patches used
Dynamic range for 12dB: 7.1EV
Dynamic range for 0dB: 10.1EV
iso3200
74/77 patches used
Dynamic range for 12dB: 6.2EV
Dynamic range for 0dB: 9.2EV
iso6400
74/77 patches used
Dynamic range for 12dB: 5.2EV
Dynamic range for 0dB: 8.3EV
iso12800
75/77 patches used
Dynamic range for 12dB: 4.2EV
Dynamic range for 0dB: 7.3EV
iso25600
74/77 patches used
Dynamic range for 12dB: 3.2EV
Dynamic range for 0dB: 6.5EV
iso51200
43/77 patches used
Dynamic range for 12dB: 2.2EV
Dynamic range for 0dB: 5.4EV
iso65535
29/77 patches used
Dynamic range for 12dB: 1.2EV

Además he añadido restricciones a los parches para desechar el dato de aquellos que en realidad no nos interesan (nivel de señal tan bajo que su media da un valor negativo, relación S/N por debajo de -10dB, y parches que empiezan a mostrar píxeles saturados que desvirtuarían los cálculos). Ej. 43 parches/muestras usados de la toma ISO51200:

cropwithpatches_iso51200.jpg


Salu2!
 
Ya había leído que desde el ISO mínimo a los 800 los sensores se comporta an distinto que de 800 hacia arriba por la amplificación por HW que hacen. Tu explicación sirve para entender como funciona/comporta un sensor con relación al SN a distintos ISOs. ¿No tienes nada hecho con sensores Fuji?
 
Hacer una app no sería especialmente complejo, el tema es que no creo que es un procedimiento que luego vaya a seguir (casi) nadie.

Muy interesante en cualquier caso ;)
 
Lo sé, a la mayoría de la gente le gusta más estrenar cámara tras cámara que conocer a fondo la que ya tienen. Paradójicamente lo segundo es más barato e intelectualmente edificante que lo primero

En cualquier caso si alguien programa en cualquier lenguaje compilable y le gustaría intentarlo que lo diga. Es la idea que tiene Hugo en mente. A mí solo me interesa escribir los algoritmos.

Salu2!
 
Atrás
Arriba