Flat Fields: Como resolver el problema del viñeteado

El viñeteado afecta a cualquier sistema óptico. En particular, los telescopios se ven muy afectados cuando se utilizan con una cámara fotográfica. Eso se debe a que los telescopios están calculados para generar un campo lo más nítido posible de un diámetro ridículo: una fracción de un grado o como mucho, en los refractores de gran campo de gama alta, un poco más de un grado.

En cuanto ponemos una cámara fotográfica detrás de un telescopio, le estamos pidiendo al mismo sistema óptico que nos ilumine adecuadamente un campo de varios grados. Evidentemente no funciona. Veámoslo en la siguiente imagen:

m27

Este es el resultado típico de una muy buena sesión de astrofotografía. Hemos conseguido enfocar perfectamente, hemos logrado alinear la montura del telescopio con suficiente precisión, el seguimiento ha sido muy bueno y pese a todo, la imagen no termina de convencernos. Y la causa es evidente: el viñeteado del sistema óptico nos estropea la toma en su conjunto. Lo que debería ser un cielo oscuro y uniforme, se ha transformado en una mancha lechosa que ocupa la región central de la imagen (por no hablar de las motas de polvo sobre el sensor y su presencia en forma de discos oscuros más o menos desenfocados).

Para resolver este problema, los astrónomos profesionales utilizan una técnica conocida como flat field o campo de respuesta plano. La idea es tomar una imagen de una superficie uniformemente iluminada con el mismo sistema óptico con el que se ha realizado la imagen, a la misma distancia focal y con la misma apertura. De ese modo, puesto que partimos de una superficie uniforme, ese flat field representará fielmente la respuesta de todo el sistema óptico. En general se suelen utilizar flats tomados durante el amanecer o el atardecer, en una región del cielo libre de estrellas y nubes.

En este momento, es necesario avisar a los lectores: este no va ha ser un tratamiento estricto de problema de los flat fields, ni mucho menos del calibrado de las imágenes astronómicas con fines científicos. Voy a plantear un método sucio y rápido para obtener una imagen más agradable y vistosa. El tratamiento completo requeriría trabajar además de con flats reales, con darks y por supuesto con varias imágenes para reducir la cantidad de ruido en la imagen final. Este tratamiento completo, será objeto de otro artículo, pero de momento fijemonos en el caso concreto de una imagen con gran viñeteado y sin un flat field adecuado.

En la practica, si somos aficionados que nos dedicamos ocasionalmente a esto, suele ocurrir que no tengamos ningún flat válido para la escena. En estas ocasiones es posible "construir" un flat sintético que represente estas variaciones. El autor de la imagen inicial, mi amigo José Antonio Soldevilla, me describía con estas palabras como había creado ese flat sintético:

El método es pasarle en PS el filtro surface Blur en plan bruto. Los cuatro detallitos que quedan me los cargo con la herramienta parche o tirita.

flat

Y este es el resultado de este procedimiento: el flat sintético generado a partir de la imagen original en Photoshop. Como puede observarse, ahora resulta más evidente la variación de luminosidad media a lo largo de todo el campo, que es precisamente el efecto del viñeteado que pretendemos eliminar.

Para ello, lo primero que hacemos es transformar las imágenes dentro del Iris a su formato nativo, tal y como se ha explicado en el artículo de introducción al Iris. En resumen, suponiendo que las imágenes se llamen m27.jpg y flat.jpg respectivamente y que estén dentro del directorio de trabajo del Iris (recomendable), el procedimiento sería ir tecleando las siguientes instrucciones dentro de la consola de comandos:

>loadjpg m27
>mult 128
>save i1
>loadjpg flat
>mult 128
>save flat

Con eso ya tenemos preparadas las imágenes i1.pic y flat.pic en formato Iris, con sus valores extendidos a lo largo de todo el rango dinámico listas para operar. En este caso, lo más sencillo es precisamente no utilizar la consola de comandos. La opción de menú Preprocessing > Divide by a flat field... nos abre la siguiente ventana para el procesado de una secuencia de imágenes:

flat

Al ver esta imagen, se entiende porque he utilizado un nombre tan extraño (i1.pic) al guardar la imagen original, sabía que teníamos que procesar una secuencia. En cuanto lancemos este comando obtendremos en pantalla la imagen corregida por el flat field, es decir, sin viñeteado. Al mismo tiempo se guardará en el directorio de trabajo esa misma imagen con el nombre k1.pic.

¿Podríamos hacer esta transformación desde la consola? Si, evidentemente, con los comandos div y div2 (el primero para la imagen cargada en pantalla y el segundo para una secuencia completa). Pero existe un pequeño problema... veamos la sintaxis de div. Si consultamos el manual vemos que es

>div [name] [coefficient]

name es el nombre de la imagen que vamos a aplicar como flat a la imagen cargada, pero ¿que es coefficient?. Veamos, para aplicar un flat field, lo que se hace es dividir cada pixel de la imagen original por el correspondiente pixel del flat field. Esto hace que en las zonas más brillantes del flat field dividimos por un número grande, mientras que en las zonas oscuras, dividimos por un número pequeño. El resultado es que las zonas oscuras del flat field reciben un incremento de luminosidad respecto a las brillantes. Justo lo que queremos. El problema es que la división nos cambia de manera radical el rango de brillos. Para recuperarlo se multiplican todos los pixeles por un factor constante. Ese es el coefficient del comando div o div2.

¿Que valor debemos utilizar? En general es recomendable utilizar el valor máximo de brillo en la imagen del flat field. De ese modo, las zonas más brillantes de la imagen original se multiplican por 1.0, es decir no se modifican en absoluto. Solo las regiones más oscuras se ven multiplicadas por valores mayores que 1.0 (es decir, se dividen por valores menores de 1.0)

Al final ya tenemos la imagen corregida. Sin embargo, antes de exportarla debemos asegurarnos de que no tiene valores "extraños". A veces Iris, al procesar imágenes utiliza todo el rango de 16 bits y eso nos produciría resultados con valores negativos. Para comprobarlo, en la ventana de control de niveles de gris, pulsamos el botón Auto y vemos el valor mínimo que aparece. Si este valor es negativo, lo añadimos en positivo a toda la imagen, para trasladar los valores de los pixeles al rango positivo.

Supongamos que tras pulsar Auto vemos que el valor mínimo de la imagen es -207. Introducimos en la consola

>offset 210

Con esto sumamos el valor 210 a cada canal de cada pixel y hacemos que todos los valores pasen a ser positivos. Podemos perder ese mismo offset en la zona más brillante de la imagen, pero en estos momentos eso no nos preocupa.

Ahora procedemos a guardar la imagen en un formato que conserve toda su calidad, por ejemplo el PSD de 16bits por canal. Para ello introducimos:

>savepsd fichero

Y ya está, ahora solo queda abrir el fichero con Photoshop, aplicar los niveles adecuados, los balances de color deseados y cualquier otra transformación estética que convenga y podemos llegar al siguiente resultado:

m27

Comparando esta imagen con la original, podemos ver como ha mejorado el aspecto total de la misma. Ha desaparecido en gran medida el gradiente circular provocado por el viñeteado. Ahora la nebulosa destaca claramente sobre un fondo negro uniforme y se ven estrellas a lo largo de todo el campo, incluso en las esquinas, donde anteriormente parecía no haber nada.

Si nos fijamos en detalle veremos una linea horizontal cerca del borde inferior de la imagen. Esa misma banda estaba presente en la imagen original y seguramente se debe a un problema de desplazamiento entre las imágenes originales que ha sumado el autor de la toma. Con el procesado completo, en el que se hubiese aplicado el flat original a cada una de las imágenes antes de sumarlas, estos problemas no aparecerían.

Por cierto que lo que se ve en la imagen es la Nebulosa Dumbell, también conocida como Messier 27 o más coloquialmente M27. Se trata de una nebulosa planetaria en la constelación de Vulpécula. La imagen es el fruto de tres tomas de cinco minutos cada una, tomadas con una Canon 20D puesta en el foco primario de un telescopio reflector de 250mm de diámetro a f/5, lo que equivale a un teleobjetivo de 1250mm f/5. Las imágenes están tomadas por José Antonio Soldevilla desde su observatorio particular en Canyelles a pocos kilómetros de Villanova i la Geltrú. En esa noche, la luna llena estaba a pocos grados de la nebulosa. No esta nada mal la cantidad de detalle que pude observarse en el objeto cuando observamos un recorte de la misma al 100% ¿verdad?

detalle