Compensar canales de una imagen

Imagen con descompensación de canales

En muchas ocasiones ocurre que cuando sacamos una imagen con una cámara a color, esta no tiene la misma intensidad en todos sus canales.

También ocurre cuando combinamos los canales capturados por separado con cámaras monocromo en una imagen RGB, y se nota en que la imagen tiene alguna tonalidad que domina en la imagen y que muchas veces tiñe el fondo con ese color.

Esto se debe principalmente a que los sensores de las cámaras tanto réflex como astronómicas, no tienen la misma sensibilidad en todo el rango de longitudes de onda que captan. En la imagen se puede ver cómo el canal verde de la imagen tiene una mayor intensidad y por ello toda la imagen tiene un tinte verde.

Imagen con descompensación de canales

Es por eso que durante el procesado de algunas de las imágenes que he ido tomando durante el tiempo que llevo haciendo astrofotografía, he tenido que hacer muchas veces el mismo proceso para ajustar el color de las imágenes antes de comenzar con el procesado.

Para ello, lo primero que suelo hacer es seguir el procedimiento que se describe en esta página. Es un proceso muy simple, pero es algo tedioso.

Funcionamiento del proceso

Resumiendo, la idea es separar la imagen en los tres canales R, G y B, calcular cuál de ellos tiene menos ruido y usar el procedimiento LinearFit en los dos canales restantes usando como referencia el canal que menos ruido tenía.

Lo que LinearFit hace es generar un conjunto de parejas de píxeles entre la imagen a la que vamos a aplicar el LinearFit y una imagen escogida como referencia.

Usando ese conjunto de valores, se genera una línea que representa la media de la diferencia entre las dos imágenes, y la función que representa a esa línea es la que se aplica a toda la imagen para "acercar" los valores a los de la imagen de referencia.

Una vez aplicado el LinearFit, se recompone la imagen con los tres canales ya modificados y ya tenemos una imagen mejor calibrada para empezar con el procesado.

Automatización

El procedimiento está muy bien definido, y es simple y repetitivo. Es un caso claro en el que automatizando las tareas ahorraríamos mucho tiempo a la larga, así que decidí ponerme a ello y escribir un script de PixInsight que simplificase este proceso.

El resultado ha sido un script que ejecuta todo el proceso de forma continua y que en unos segundos hace el trabajo que manualmente tardaría mucho más tiempo (además de evitar posibles errores durante el proeso por el mero hecho de ser ejecutado manualmente).

Si quieres ver el script en funcionamiento, puedes verlo en el siguiente video.

¿Dónde lo consigo?

He aprovechado para montar un repositorio de actualizaciones de PixInsight que permite instalar el script muy fácilmente.

El procedimiento para instalar el script es el siguiente:

  • Ir al menú RESOURCES > Updates > Manage repositories
  • Hacer click en Add para añadir un nuevo repositorio.
  • Introducir la siguiente dirección URL: https://starlighthunter.com/pixinsight-updates/ y hacer click en Ok
  • Ir al menú RESOURCES > Updates > Check for updates.
  • Una vez PixInsight comprueba las actualizaciones mostrará que hay una actualización disponible de StarlightHunter.com scripts.
  • Hacer click en Ok. Aparecerá un mensaje avisando de las actualizaciones descargadas.
  • Salir de PixInsight. Aparecerá un menú preguntando si queremos instalar las actualizaciones. Seleccionamos "Yes" y comenzará la actualización.
  • Una vez finalizada aparecerá un diálogo en el que podemos ver el resultado de la actualización o continuar.
  • Reiniciamos PixInsight y en el menú SCRIPTS aparecerá una nueva categoría de scripts llamada StarlightHunter.com scripts.

A partir de ese momento, cuando añada más scripts o mejore los ya existentes, PixInsight podrá descargar dichas actualizaciones de forma fácil.

Código fuente

También he publicado el código fuente del script en GitHub para que si alguien quiere ayudar a mejorarlo pueda mandar parches.