Ultimamente me he estado peleando con los ajustes de Gain y Offset que admiten las cámaras CCD, lo que me ha impulsado a hacer una pequeña investigación sobre el funcionamiento de los mismos.
En la web se puede encontrar bastante información al respecto, pero como está un poco dispersa me ha parecido interesante escribir este artículo para que los que se encuentren con el mismo problema también entiendan el funcionamiento y sepan cómo ajustar estos parámetros. Para los que estén interesados, en primer lugar explico los principios de funcionamiento del CCD y cómo afectan los cambios en el Offset y Gain, y al final explico cómo ajustarlos en la práctica. La buena noticia es que una vez averiguados los parámetros óptimos para la cámara no es necesario cambiarlos nunca más.
Buena parte de la información la he obtenido de la siguiente página de Stark-Labs:
http://www.stark-labs.com/blog/files/GainAndOffset.php
Principios de funcionamiento del CCD
El CCD básicamente es un mosaico de sensores que son capaces de capturar fotones. Cada sensor se corresponde con un píxel en la imagen RAW que obtendremos al final del proceso de captura de imagen.
Ante la llegada de uno o más fotones se generan electrones que quedan almacenados en el sensor. La sensibilidad del sensor viene determinada por la capacidad que tenga de transformar fotones en electrones y se mide con un parámetro llamado Eficiencia Cuántica (QE: Quantum Efficiency). En el caso óptimo (100%) por cada fotón que llega se generaría un electrón, aunque evidentemente esto es difícil de conseguir y lo normal es tener QE bastante más bajas. Para acabar de redondearlo, la eficiencia cuántica de los sensores es diferente para distintas longitudes de onda. Por eso en las cámaras RGB es habitual encontrar que el fabricante especifica la eficiencia para los canales rojo, verde y azul por separado. En el caso de una cámara monocromática seguramente dispondremos de un gráfico representando la curva de eficiencia a para diferentes longitudes de onda.
Hay que tener en cuenta además que los sensores se diseñan para ser sensibles a determinadas longitudes de onda. En una cámara en color el CCD se compone de una combinación de tres tipos de sensores, que fundamentalmente son capaces de captar los fotones cuyas longitudes de onda pertenecen al rojo, verde y azul respectivamente. Así se puede generar una imagen en color RGB mediante la combinación de lo que hayan capturado los diferentes sensores.
En cualquier caso, lo importante es que a medida que van llegando fotones se van generando electrones que quedan almacenados en el sensor. Al final de la exposición habrá una determinada cantidad de electrones. Cuántos más electrones, más brillante será la imagen final.
De cara a la explicación que voy a hacer a continuación sobre ganancia y offset hay dos factores muy importantes a tener en cuenta sobre el comportamiento de los sensores:
- Los sensores no tiene una capacidad infinita, sino que hay un máximo de electrones que pueden de almacenar (normalmente viene indicado por un parámetro llamado Full Well Depth). Si a un sensor que ya está lleno siguen llegando fotones, simplemente se ignorarán. Por tanto, si un objeto es tan brillante que supera la capacidad de almacenamiento de los sensores obtendremos una imagen saturada en la que no podremos apreciar las diferencias de brillo en distintas zonas de la misma, ya que todos los puntos tendrán el valor máximo entregado por el sensor.
- Por otra parte, en teoría si no se llega a exponer el sensor a la luz no debería contabilizarse ningún electrón ya que supuestamente no ha llegado ningún fotón que capturar. En la realidad el calentamiento de los diferentes componentes del CCD genera «ruido térmico» que también es susceptible de ser capturado por los sensores y por tanto nunca obtendríamos una imagen completamente negra, sino que habría una pequeña cantidad de «luminosidad térmica».
Conversión de los datos del CCD en una imagen
Al final del proceso de captura de la imagen dispondremos de un montón de sensores, cada uno de los cuales estará cargado con una determinada cuenta de electrones. Sin embargo, el sensor no nos va a decir directamente cuántos electrones contiene, sino que lo que nos entregará es una señal analógica en forma de tensión (diferencia de potencial) que lógicamente es directamente proporcional a la cantidad de electrones.
Por tanto necesitamos poder convertir nuestra señal analógica a un valor numérico que podamos plasmar en nuestra imagen digital. El dispositivo que se encarga de esta tarea es el conversor Analógico-Digital o DAC.
La principal limitación de los DAC es el número de diferentes salidas que pueden entregar. En un conversor de 8 bits sólo podremos obtener hasta 256 posibles valores diferentes, mientras que en uno de 16 bits podríamos diferenciar hasta 65536 diferentes valores de la tensión de entrada. Obviamente, cuanto más mejor, ya que podremos apreciar variaciones más sutiles en el brillo de la imagen.
En definitiva, la salida del DAC será el valor numérico asignado a cada píxel de nuestra imagen RAW.
Offset
Y aquí es donde interviene el parámetro del Offset. El caso es que el conversor DAC empezará a detectar la existencia de señal a partir de un cierto umbral de tensión. Si la tensión es demasiado baja entonces no la detectará y siempre entregará un valor 0 a la salida. Si por el contrario la señal está muy por encima del umbral entonces siempre generará valores por encima de 0 y no aprovecharemos todo el rango de valores que podría entregar.
Por ejemplo, supongamos que el DAC empieza a detectar señal a partir de un umbral de voltaje U, y supongamos también que la tensión a la entrada del mismo cuando no llega ninguna señal del CCD) vale Vd y es muy inferior a U.
En esta situación, cuando en el CCD no hay ningún electrón, la única tensión a la entrada del DAC es Vd, y como es inferior a U, a la salida obtendremos el valor 0. Hasta aquí bien, porque si no hemos capturado nada parece lógico obtener un valor 0 a la salida.
El problema viene cuando hay unos pocos electrones. Entonces sí que llegará cierta tensión Vccd proveniente del CCD que se sumará a la tensión Vd. Es decir, a la entrada del DAC tendremos una tensión Vd+Vccd. Ahora bien, si esta tensión sigue sin ser superior al umbral de detección del DAC seguiremos obteniendo un 0 a la salida del mismo y por tanto habremos perdido el detalle de los objetos más oscuros. Sólo comenzaremos a tener una salida distinta de 0 cuando la tensión del CCD sea lo suficientemente alta para que Vd+Vccd supere el umbral U. Cualquier señal capturada inferior a este valor se perderá, a pesar de que nuestro CCD sí que era capaz de detectarla. No hace falta decir que eso es malo, muy malo para la astrofotografía ya que las señales recibidas tienen la mala costumbre de ser muy débiles.
Pero aquí está el parámetro del Offset para acudir en nuestra ayuda. Al aumentar el valor del Offset lo que estamos haciendo es inyectar un valor «extra» de tensión a la entrada del DAC. De esta manera lo podemos ajustar para que incluso se detecte la señal generada por un solo electrón. Lo único que hay que hacer es indicar un valor de offset tal que la tensión de entrada al DAC sea siempre superior al umbral.
¡Pero ojo! No vale poner cualquier valor, ya que si nos pasamos volveremos a perder detalle, aunque ahora en los valores más brillantes. Si nos pasamos con el offset la tensión a la entrada del DAC será muy superior al umbral y por tanto a la salida del DAC siempre obtendremos un valor X superior a 0 (es decir, nunca obtendremos valores en la franja 0-X). Por otra parte, en cuanto las señales comiencen a ser lo suficientemente brillantes alcanzaremos el máximo valor que puede entregar el DAC, y cualquier señal de intensidad mayor no será diferenciada, ya que siempre obtendremos el valor máximo del DAC.
Y en este punto es donde debemos tener en cuenta la máxima capacidad de los sensores. Supongamos que un determinado sensor es capaz de almacenar hasta 44.000 electrones. Lo que nos interesa es que cuando esté completamente lleno, obtengamos un valor cuantizado que no supere el límite del DAC. En la situación óptima debería corresponderse la capacidad máxima del sensor con el valor máximo del DAC
En resumen, para ajustar el offset lo que interesa es que ante la ausencia de señal en el sensor obtengamos un valor próximo a cero en nuestra imagen, que no quede por debajo en ningún caso y que no lo supere mucho para que no lleguemos a saturar la imagen demasiado rápidamente.
Lo que conviene hacer es realizar una captura de la mínima duración posible con la cámara tapada para que no llegue señal, e ir ajustando el offset hasta que obtengamos una imagen en la que todos los píxels estén ligeramente por encima de cero (pero que no lo alcancen).
Lo que es importante tener en cuenta es que el valor del Offset puede variar en función de la ganancia.
Gain
Bien, parece que ya empezamos a llegar a algún lado. Sin embargo aún no hemos comprobado si somos capaces de detectar las mínimas diferencias en la señal detectada por el sensor.
Supongamos que ante la ausencia de señal en el sensor obtenemos un valor 0 en nuestra imagen RAW, y cuando el sensor está completamente lleno obtenemos en la imagen un valor de 1000, es decir, podremos tener una imagen en la que podremos distinguir hasta 1000 niveles de brillo diferentes. Pero» si nuestro sensor era capaz de almacenar 44.000 e- ¡Entonces estamos perdiendo una enorme cantidad de detalle que nuestro sensor es capaz de detectar, pero nuestro DAC no es capaz de reproducir! A nosotros nos interesaría que como mínimo el DAC pudiera entregar un valor de 44.000 o superior ante la máxima señal de forma que cualquier cantidad de e- en el sensor se correspondiera con un valor diferente a la salida del DAC.
En realidad, antes de la entrada del DAC hay un amplificador que permite multiplicará el valor de la señal de entrada por un determinado valor al que llamamos ganancia o gain.
Ante una misma señal de entrada, cuanto mayor sea la ganancia, mayor será el valor entregado por el DAC en su salida.
Podríamos pensar que no importa mucho el valor de la ganancia, ya que al fin y al cabo, si tengo por ejemplo 10 posibles niveles de tensión de entrada (imaginemos un hipotético sensor que sólo admite hasta 10 e-), al final obtendré 10 valores diferentes en la salida y aplicar una ganancia lo único que implicaría es que tendría igualmente 10 valores de salida pero con valores superiores. En este caso aumentar o disminuir la ganancia sería irrelevante, ya que lo importante para nosotros es poder diferenciar entre los 10 niveles sin importar mucho qué valor tengan. Pero esto no es cierto porque en función de la ganancia podemos no obtener los 10 niveles que esperamos a la salida, sino menos!
Hay que tener en cuenta que el DAC entrega siempre valores enteros, y no decimales. Entonces supongamos que la ganancia es tal que por cada voltio en la señal de entrada entrega a la salida un valor de 5. Esto significa que por cada voltio que aumente la señal de entrada, la salida se incrementará en 5 unidades. En la siguiente tabla vemos un ejemplo de las salidas que obtendría para distintas tensiones de entrada:
Tensión de entrada
|
Factor de ganancia 5
Valor esperado
|
Valor entregado por el DAC
|
1v
|
1v * 5 = 5 |
5 |
1.2V
|
1.2 * 5 = 6 |
6 |
2V
|
2v * 5 = 10 |
10 |
Todo parece funcionar correctamente, ya que para distintas tensiones de entrada obtengo distintos resultados, pero el problema aparece si puedo tener tensiones de entrada que no provoquen un cambio en la salida:
Tensión de entrada
|
Factor de ganancia 5
|
Valor entregado por el DAC
|
1.0v
|
1.0v * 5 = 5 |
5 |
1.1v
|
1.1 * 5 = 5.5 |
5 |
Ahora sí que hay un problema. En nuestra imagen final perderemos un detalle que el CCD ha podido captar pero el DAC no ha sido capaz de diferenciar. La solución parece Obvia, si aplicamos una ganancia mayor entonces se solucionaría el problema. Imaginemos que la ganancia es 10. En ese caso para ejemplo anterior obtendríamos:
Tensión de entrada
|
Factor de ganancia 10
Valor esperado
|
Valor entregado por el DAC
|
1.0v
|
1.0v * 10 = 10 |
10 |
1.1v
|
1.1 * 10 = 11 |
11 |
¡Perfecto! Ya no hay problema. No perdemos los detalles capturados por el CCD. Parece que lo mejor sería poner siempre la máxima ganancia para asegurar el tiro. Entonces… ¿por qué el fabricante no deja la ganancia establecida en el máximo siempre? Evidentemente hay algo que se nos escapa y se trata de la saturación del DAC.
Como había explicado antes, un DAC no puede entregar cualquier valor, sino que está limitado por el número de bits de la señal de salida. Si el DAC es de 8 bits, entonces sólo podremos obtener hasta 256 valores (de 0 a 255). Si es de 16 bits entonces podremos obtener 65536 valores.
Si tenemos un valor de ganancia demasiado alto puede pasar lo siguiente (supongamos que tenemos un CCD de 8 bits y por tanto la salida máxima es 255):
Tensión de entrada
|
Factor de ganancia 100
Valor esperado
|
Valor entregado por el DAC
|
2.5v
|
2.5v * 100 = 250 |
5 |
2.55v
|
2.55 * 100 = 255 |
255 |
2.6v
|
2.6v * 100 = 260 |
255 |
Ahora tenemos el problema contrario. Estamos amplificando tanto la señal que saturamos el DAC y siempre nos entrega el valor máximo. De nuevo estamos perdiendo los detalles, pero en este caso en las zonas brillantes.
Por tanto lo que nos interesa es encontrar un valor de la ganancia que no provoque saturación cuando la señal de entrada sea máxima, pero que sea capaz de detectar el más mínimo cambio en la señal del sensor.
Si un sensor CCD tiene una capacidad máxima de 44.000e- entonces tenemos que poder obtener a la salida 44.000 niveles distintos. En este ejemplo necesitaríamos un DAC de 16 bits, que es capaz de darnos hasta 65536 niveles de salida. No los aprovecharemos todos, ya que sólo hay 44.000 posibles valores de tensión posible a la entrada, pero al menos no perderemos detalle. Si hubiésemos escogido un DAC de 15 bits sólo podríamos manejar hasta 32768 niveles y por tanto perderíamos forzosamente parte de la definición del CCD.
¿Y cómo hacemos para calcular el valor de Gain que más convenga? Pues es bien sencillo, porque basta con apuntar la cámara a una luz brillante que asegure que cada sensor se llenará la máximo. En esta situación tenemos que ir ajustando la ganancia hasta que la imagen final no supere el máximo valor que puede entregar el DAC. Lo normal es que sean de 16 bits así que buscaremos que cada píxel se aproxime lo más posible a 65535, pero que no lo alcance. De esta manera garantizamos que nunca se sature la imagen debido a un valor de ganancia demasiado alto.
Ajuste de Gain y Offset en la práctica
Para los que no se hayan visto con corazón de tragarse el rollo anterior, a continuación expongo de manera resumida cómo ajustar los parámetros de Gain y Offset.
Estos valores no son siempre iguales para todas las cámaras de un mismo modelo así que son datos que el fabricante no puede ofrecer. Cada uno de nosotros deberá calcular los parámetros que se pueden aplicar a su cámara.
Antes de comenzar necesitaremos saber cuál es el valor máximo que puede entregar la cámara. Normalmente las cámaras para astrofotografía son de 16 bits, así que lo más habitual es que el valor máximo que se puede obtener sea 65535.
Paso 1: Ajuste de Offset
Recordad que para distintos valores de Gain el Offset puede variar. No hay problema si quieremos utilizar otros valores de Gain, pero entonces hay que calcular el Offset que le corresponde. Conviene hacer una tabla en la que apuntemos los valores de Offset obtenidos para diferentes valores de Gain
Vamos a realizar una captura de la menor duración posible y con la cámara tapada para que no entre nada de luz. Normalmente se ajusta el tiempo de exposición a 0 de forma que la imagen que obtengamos refleje sólo el ruido provocado por los componentes internos de la cámara (este tipo de imagen recibe el nombre de Bias). Obviamente queremos que en estas circunstancias la imagen sea completamente negra, así que modificaremos el valor de Offset hasta conseguirlo, pero sin que llegue a valer 0. Es decir, queremos que todos los píxels de la cámara tengan un valor próximo a 0 pero sin llegar a alcanzarlo. Habitualmente se considera correcto si los valores oscilan entre 100 y 1000 (para una cámara de 16bits)
Paso 2: Ajuste de Gain
Para ajustar el Gain hay que apuntar la cámara a una luz brillante y ajustar un tiempo de exposición que asegure que obtendremos una imagen completamente blanca (saturada) en todos los píxels de la imagen. Una vez hecho esto hay que comprobar qué valor tiene cada píxel de la imagen RAW obtenida (normalmente los programas de captura tienen alguna herramienta para poder verlo). Ahora sólo queda ir ajustando el gain y repitiendo la captura hasta que los valores de los píxels se acerquen lo más posible al valor máximo pero que no lo alcancen. Durante este proceso conviene indicar el parámetro de Offset calculado en el apartado anterior para la ganancia que estemos probando.
Cuidado! A veces no siempre se obtiene el máximo valor posible, sino algo menos. Por ejemplo, es posible que con la imagen completamente saturada obtengamos una lectura de 65300 (en lugar de 65535). Por tanto lo mejor es fijarse en este valor máximo y ajustar el Gain hasta asegurarse de que ningún píxel lo alcanza.
Y finalmente ya estamos listos para hacer fotos aprovechando al máximo las posibilidades de nuestra cámara. En adelante no tenemos que preocuparnos de volver a calcular los parámetros y podemos usar siempre los mismos.
Simplemente magistral !!!
Esto le va a gustar mucho a más de uno.
Está claro como el agua que gracias a tu técnica lo que se consigue es aprovechar al máximo el rango dinámico de cada cámara.