Author Topic: Script de Composición de imágenes HDR  (Read 14907 times)

Offline vicent_peris

  • PTeam Member
  • PixInsight Padawan
  • ****
  • Posts: 988
    • http://www.astrofoto.es/
Script de Composición de imágenes HDR
« on: 2008 November 15 13:37:54 »
Manejar el rango dinámico de las imágenes nunca ha sido tan fácil. En este mensaje presento una nueva herramienta para componer imágenes HDR, partiendo de datos calibrados, que permite alcanzar el resultado mostrado abajo con sólo unos cuantos clicks de ratón:



La imagen de arriba ha sido compuesta por tomas que van desde 2,5 segundos hasta media hora de exposición, y fueron tomados con una Canon 300D y dos tubos ópticos diferentes (FC100 y 80ED) por José Luis Lamadrid y Vicent Peris.

La implementación de esta herramienta se ha llevado a cabo mediante un script de Java en PixInsight, escrito por Oriol Lehmkuhl, y que se entrega con la versión 1.3 de PixInsight. Este script se basa en el algoritmo publicado por mí en este mismo foro:

http://pixinsight.com/forum/viewtopic.php?t=421
http://pixinsight.com/forum/viewtopic.php?t=426





El Algoritmo de Composición HDR

Este algoritmo compone imágenes de alto rango dinámico lineales. Esto significa que, para todo el rango dinámico de los objetos se trata de conservar la linealidad de los datos. Por lo tanto, tener una imagen HDR lineal es equivalente a tener un sensor digital con fotositos que tuvieran un pozo que diera cabida a millones de electrones.

Para componer la imagen, cada una es multiplicada por un factor para ajustarse al flujo de las otras imágenes. El resultado final es una especie de pirámide fragmentada, donde las exposiciones más cortas se superponen sobre las áreas saturadas de las más largas:



Para hallar el factor entre las imágenes, el algoritmo compara la diferencia de iluminación de las mismas regiones de la imagen entre pares de imágenes. Para el ejemplo de arriba, la exposición de 30 minutos ha sido multiplicada por 0,004 para ajustarse al nivel de iluminación de la exposición de 2,5 segundos.





El Interface del Script

El interface del script se basa en conceptos sencillos. Hay tres secciones principales:

- El interface para la selección de las imágenes a combinar.
- Los parámetros para ajustar el algoritmo de composición HDR.
- Las opciones de postprocesado para comprimir el rango dinámico de la imagen resultante.

Primero debemos decirle al script qué imagenes queremos combinar. Esto se hace simplemente apretando el botón Add y seleccionando los archivos correctos. El script determinará automáticamente qué imágenes tienen más o menos exposición.

Las imágenes a combinar deben estar debidamente calibradas y registradas, ya que este script no realiza el trabajo de calibrado ni el de registro, sino solo el de composición y compresión del rango dinámico.

Los parámetros del algoritmo se dividen en tres secciones. La primera concierne a los mapas de intensidad que se usan para comparar los niveles de iluminación entre las imágenes. Aquí debemos definiar los límites de selección para los pixel entre dos rangos de iluminación. A estos rangos los denominaremos como "highlights" and "lowlights", ya que un rango de iluminación debe ser más alto que el otro.

Normalmente se obtendrá un buen resultado con los parámetros por defecto, los cuales establecen los rangos de iluminación en [0,6 - 0,8] y [0,2 - 0,4], dentro del intervalo [0 - 1]. Hay que tener en cuenta que debemos averiguar con exactitud cuál es la diferencia de iluminación entre los dos rangos de iluminación, por lo que es conveniente establecer el límite superior de lowlights por debajo del límite inferior de highlights.

Como hemos dicho, el algoritmo superpone las exposición más cortas sobre las áreas saturadas de las más largas. Para establecer el límite de iluminación de la exposición larga donde vamos a superponer la corta, el script genera una máscara binaria. El límite de esta máscara binaria se establece en el parámetro Binarizing threshold. En la mayoría de casos, el valor de 0,8 funcionará bien.

Como siempre, la precisión está limitada por el ruido, por lo que las dos imágenes nunca se ajustarán a la perfección; el parámetro Mask smoothness suavizará la unión entre los pares de imágenes. El algoritmo suele dar resultados muy precisos, limitados por el ruido y la linealidad del sensor, por lo que un ligero suavizado quitando 2 ó 3 capas de wavelets a la máscara funcionará bien en la mayoría de los casos. Por último podemos ajustar un crecimiento de la máscara (Mask growth) para cubrir correctamente los bloomings, en caso de que estemos trabajando con sensores CCD sin antiblooming.

Hay tres opciones de salida para las imágenes resultantes. Para imágenes donde se cubra un rango dinámico muy extenso (como el ejemplo de M42 presentado al inicio), es conveniente trabajar con 64 bits de precisión. También pueden obtenerse las máscaras calculadas, por si fuéramos a necesitarlas en el futuro. Por último, tenemos la opción de corregir la iluminación del fondo del cielo; esto funciona muy bien con imágenes astronómicas, pero normalmente no tiene sentido utilizarlo si vamos a componer imágenes HDR "terrestres".

La tercera sección efectúa la compresión del rango dinámico a través de dos pasos básicos:

- Una modificación del histograma para elevar la iluminación de la imagen.
- Aplica el algoritmo de HDR-Wavelets para comprimir el rango dinámico de la imagen.

Al tratarse de imágenes HDR lineales, normalmente se necesita un valor muy pequeño de transferencia de medios tonos. Para la imagen del inicio, el valor aplicado ha sido de 0,0002.

Para una aplicación rápida del algoritmo de HDR-Wavelets, hemos puesto en la inteface del script los dos principales parámetros que lo rigen: el número de capas de wavelets a aplanar y el número de iteraciones que realiza el algoritmo. Si activamos las opciones de postproceso, el script nos entregará dos imágenes: la composición HDR lineal original y la imagen procesada. Estas opciones de postproceso nos permitirán ver rápidamente si todo ha ido bien, pudiendo asímismo trabajar sobre la composición HDR original para obtener posteriormente el resultado deseado, trabajando sobre las herramientas independientes de PixInsight.





Ejemplos


A continuación presentamos tres ejemplos más de los resultados alcanzados con el script. El primero es la nebulosa Ojo de Gato, con datos adquiridos por Romano Corradi con el Telescopio Óptico Nórdico del Observatorio de Roque de los Muchachos.

Los datos pueden descargarse desde aquí:

http://www.ing.iac.es/~rcorradi/HALOES/

El resultado es la combinación de varias exposiciones a través de filtros estrechos de O-III (turquesa), H-alfa (naranja) y N-II (rojo), con la cámara ALFOSC:

O-III: 6x5 min, 1x2 min and 1x30 seg.
H-alfa: 3x10 min, 1x100 seg.
N-II: 3x10min, 1x1 min.

Al aplicar dos iteraciones del algoritmo de HDR-Wavelets con tres capas pueden verse las estructuras de la nebulosa a través de todo su rango dinámico:



Para verla a resolución original:

http://forum-images.pixinsight.com/legacy/HDRscript/ngc6543not2.jpg

(Nota: El halo grande y brillante fue causado por los filtros situados cerca del plano focal del telescopio)

Abajo puede verse que el algoritmos recuperó las áreas cubiertas por los bloomings. Como las exposiciones cortas tienen una relación señal a ruido baja, puede apreciarse que estas áreas tienen una contribución mayor del ruido. Pero el escalado entre las exposiciones se ha hecho perfectamente porque no hay ningún peldaño de iluminación artificial:






El segundo ejemplo es la fotografía de la galaxia NGC 7331 que realicé con el telescopio Zeiss de 3,5 metros de Calar Alto. La imagen se adquirió con los filtros B y V de Johnson y el filtro r' de Sloan; para cada uno de los filtros se obtenieron exposiciones de 1 y 10 minutos.

Aquí pueden verse las imágenes originales con juste de medios tonos:



Y un recorte del núcleo de las imágenes lineales originales, donde pueden apreciarse los bloomings sobre el núcleo de la galaxia:



El resultado después de la composición HDR y el postprocesado con HDR-Wavelets y una subida moderada de los medios tonos es este:




El último ejemplo es una foto "terrestre" tomada por Rogelio Bernal con una cámara Canon 40D. Esta es la secuencia de imágenes originales en lineal:



Esta es la imagen compuesta con ajuste de medios tonos, donde las lámparas quedan sobreiluminadas:



Sin embargo, procesando la imagen con HDR-Wavelets y aumentando la saturación de color, podemos recuperar todo el rango tonal de la escena:







Conclusión

Este script ofrece una solución a uno de los problemás más difíciles en el procesado de imágenes astronómicas. Pero todavía más importante, esta solución se da a través de algoritmos sencillos, buscando siempre un respeto absoluto a los datos recogidos. La intervención humanda se reduce al mínimo y el proceso de composición da como resultado una imagen del objeto "tal como es". Ya no son necesarios más procedimientos de "expertos" (aunque dudosos): simplemente tenemos nuestros datos reales con unos pocos clicks de ratón. Ahora sólo tenemos que preocuparnos de extraer toda la belleza de nuestras imágenes.





Agradecimientos

Un agradecimiento especial para Rogelio Bernal, por habernos cedido sus datos RAW, y para Juan Conejero por haber revisado el código fuente del script.



Vicent.

Offline Astrocava

  • PixInsight Addict
  • ***
  • Posts: 180
    • Astrocava.com
Script de Composición de imágenes HDR
« Reply #1 on: 2008 November 16 05:46:26 »
Fantástico :D  Tiene una pinta increíble y justo para empezar la temporada de orión.

Sergio
Moonfish ED80 over a Meade LX200GPS 8"

Offline caliu

  • PixInsight Addict
  • ***
  • Posts: 210
    • http://www.caliu.fotografiaastronomica.com
Script de Composición de imágenes HDR
« Reply #2 on: 2008 November 16 07:13:18 »
Quote from: "cavamen"
Fantástico :D  Tiene una pinta increíble y justo para empezar la temporada de orión.

Sergio


Exacto, y no solo para Orion, creo que el 100% de objetos admiten esto, haremos unas tomas cortas para las estrellas y unas largas para el objeto...genial!!, yo lo estoy probando con unas imagenes de m31 que descarté por un error en el adaptador que me daba unas estrellas muy malas en las esquinas, cuando tenga algo lo subo.

Offline ManoloL

  • PixInsight Addict
  • ***
  • Posts: 220
Script de Composición de imágenes HDR
« Reply #3 on: 2008 November 22 11:09:55 »
Hola:

El problema es que parece que el script es un gran devorador de memoria.
Procesando 3 imágenes de la 400d, calibradas y alineadas con DSS con 32 bits de profundidad, se ha quedado fuera de memoria, en mis dos portátiles. He tenido que hacer una reducción a la mitad de tamaño para lograr que se ejecutara.

Saludos.
Saludos.

Manolo L.

Offline C. Sonnenstein

  • PixInsight Addict
  • ***
  • Posts: 262
    • http://astrosurf.com/astro35mm
Script de Composición de imágenes HDR
« Reply #4 on: 2008 November 23 02:58:12 »
Grandes algoritmos requieren grandes máquinas :D

Ahora en serio, quizás el problema sea la gestión de memoria. Windows en su versión 32-bits solo es capaz de manipular unas 3.25 Gb de memoria RAM. Si a esto sumamos que el sistema operativo Windows Vista ya consume alrededor de 1 Gb de RAM, pues quedan luego pocos recursos. Una forma de sobrepasar esta barrera es corriendo a 64-bit en Windows, o mejor aún, usar Linux, que es la versión de la plataforma que mayores prestaciones ofrece.

Por supuesto el procesador es también determinante, por que PI usa procesos paralelizados en procesadores multinúcleo. Los Dual Core y Quad son hoy en día casi imprescindibles.

(mensaje escrito y enviado en Kubuntu 64-bit :P)

Salu2,
Carlos Sonnenstein

Offline ManoloL

  • PixInsight Addict
  • ***
  • Posts: 220
Script de Composición de imágenes HDR
« Reply #5 on: 2008 December 07 10:07:41 »
Hola de nuevo:

He aplicado el proceso a tres series de exposiciones de Orión que capté en Tiermes el pasado Octubre ( 2, 5 y 15 minutos en un campo muy amplio con un objetivo de 20 mm)
Reduciendo el tamaño de los RAW originales a la mitad he conseguido que el proceso se ejecute sin que se colapse la memoria.
Pero me he encontrado en la imagen obtenida que la relación entre los "picos" del histogramas de los canales me parece que no guardan la misma relación que tenían los RAW originales. Creo que la introducción del pedestal de 0,05 es él, o uno de los causantes de este hecho, hasta donde he conseguido entender, Y se me plantea un dilema:
¿Cual es el momento oportuno de realizar el ajuste cromático?
¿Antes o después de ejecutar el Script?.

Saludos.
Saludos.

Manolo L.

Offline Ignacio.R.

  • PixInsight Enthusiast
  • **
  • Posts: 77
Script de Composición de imágenes HDR
« Reply #6 on: 2008 December 08 04:31:49 »
Despues del Script e incluso despues de un DBE si fuese necesario.

Saludos

Offline Simon Hicks

  • PixInsight Old Hand
  • ****
  • Posts: 333
Script de Composición de imágenes HDR
« Reply #7 on: 2008 December 08 05:52:02 »
Hi Carlos,

I'm really keen to use this script....I'm just trying to get the images for it.   :D

But I am quite worried about MonoloL's comments about not being able to run 3 Canon 400D images through it because of memory issues. I too am using the Canon 400D, stacking in DSS and then the rest in PI. And I too have a lowly laptop with 1.5Gb RAM and running WinXPPro.

So I have the following question......assuming I will run into memory problems trying to combine 3 different exposure length images, can I get around this by doing the process in two seperate stages. In other words, if I have 1min, 10min and 30min images, could I run the 1 and 10min images through the HDRComposition script, and then run the output of this with the 30min image through the script a second time?

Regards
                Simon

Offline ManoloL

  • PixInsight Addict
  • ***
  • Posts: 220
Script de Composición de imágenes HDR
« Reply #8 on: 2008 December 08 06:00:12 »
Quote from: "simonhicks"


But I am quite worried about MonoloL's comments about not being able to run 3 Canon 400D images through it because of memory issues. I too am using the Canon 400D, stacking in DSS and then the rest in PI. And I too have a lowly laptop with 1.5Gb RAM and running WinXPPro.



Hola:
Mi portatil solo tiene 500 Mb de RAM.
Posiblemente con 1,5 Gb no haya problemas.

Saludos.
Saludos.

Manolo L.

Offline OriolLehmkuhl

  • PixInsight Addict
  • ***
  • Posts: 177
    • http://www.astrosurf.com/brego-sky
Script de Composición de imágenes HDR
« Reply #9 on: 2008 December 08 06:07:07 »
Hola Manolo,

el script debería mantener el balance de color de las tomas originales siempre y cuando este actuando sobre pixeles lineales.

Como ya has deducido, el script neutraliza el background de manera automática usando un algoritmo parecido al que Vicent te contaba el otro día (esto ultimo se puede deshabilitar con checkbox que hay pero no es recomendable hacerlo en imágenes astronómicas :) ).

Para que el script funcione correctamente las imágenes deben estar debidamente calibradas y libres de gradientes (ya que los gradientes de polución lumínica son distintos en cada toma (dependen de la duración de las tomas)), así que si esto no se cumple veras que no se realiza correctamente la composición HDR. Así pues, si estas en ese caso primero tendrías que hacer un DBE a cada una de las tomas.

Lo del balance de color depende (ahora pienso en voz alta ;) ). Si aplicas un balance de color pre establecido (una correcion constante siempre) puedes realizarlo antes del script. Si pretendes usar algo parecido a un g2v o usar el centro de alguno de los elementos que emiten mas luz de tus tomas para deducir el balance de color, lo suyo seria después, así te aseguras que usas pixeles lineales en el proceso.

Bueno, un saludo,

Offline ManoloL

  • PixInsight Addict
  • ***
  • Posts: 220
Script de Composición de imágenes HDR
« Reply #10 on: 2008 December 08 10:05:09 »
Hola Oriol:

Muchas gracias por tus indicaciones.
Retomaré las tres imágenes que he calibrado y apilado con el DSS sin alterar el resto de las características, para lo cual  he deshabilitado la calibración de fondo para cada canal y RGB, aunque si he dejado activada la alineación de canales RGB en la imagen final, dado que en caso contrario tendría por la periferia de la imagen una estrella de cada color en vez de una blanca, y como he comentado no me siento con ánimos para alinear a mano los tres canales, aunque ahora con el nuevo proceso de StarAlignment parece una labor mas sencilla y pudiera ser interesante probar a extraer los tres canales, alinearlos y recomponerlos, aunque solo sea con propósitos didacticos.
Creo que es el procedimiento, entre los posibles con DSS, que mejor respeta la distribución de colores y fondos originales dejando al usuario la posibilidad de dar, después, el tratamiento al respecto que considere oportuno.
A estas tres imágenes intentaré aplicarlas un DBE que neutralice los gradientes, aunque es una labor harto dificultosa, pues entre la Vía Láctea y las nebulosas del entorno de Orión hay pocas zonas de cielo que puedan considerarse como adecuadas para tomar muestras. Pero como tengo unos días de vacaciones que no me tomé en el verano y el tiempo no invita a salir, puede ser una ocupación interesante.

Saludos.

Manolo L
Saludos.

Manolo L.

Offline ManoloL

  • PixInsight Addict
  • ***
  • Posts: 220
Script de Composición de imágenes HDR
« Reply #11 on: 2008 December 08 11:59:51 »
Hola de nuevo:
Me he puesto a realizar el tratamiento HDR a mis tres imágenes después de aplicar  DBE y me ha dado este error:

Reading image:
G:/FotosNuevas/A2008/10Octubre/081026Tiermes/Tiermes081026/400d/Orion/HDR/NO15mr2.tif
Reading TIFF: 32-bit integers, 3 channel(s), 1953x1301 pixels, chunky: 100%

PixelMath: Processing view: hdr
Writing swap files...
3.13 MB/s
Calculating view statistics...
Solved 1 invariant subexpression(s)
* Using 2 logical processors.
Executing PixelMath expression: $T - Med(bA2) + 0.05: 100%
Truncating to [0.0000000000,1.0000000000]: 100%
1.297 s

PixelMath: Processing view: NO15mr21
Writing swap files...
4.71 MB/s
Calculating view statistics...
Solved 1 invariant subexpression(s)
* Using 2 logical processors.
Executing PixelMath expression: $T - Med(bA3) + 0.05: 100%
Truncating to [0.0000000000,1.0000000000]: 100%
0.828 s
*** Error [000]: C:/PCL/src/scripts/HDRComposition.js, line 328: Image.sample(): coordinate(s) out of range..


Hace un par de días el proceso se completó. Era la versión 1.3 y no habia aplicado DBE.
Por cierto he visto que los archivos intermedios se almacenan en el directorio temporal de Windows en vez del que he fijado para PixInsight. Se puede hacer algo para cambiarlo.

Saludos.

Manolo L.
Saludos.

Manolo L.

Offline OriolLehmkuhl

  • PixInsight Addict
  • ***
  • Posts: 177
    • http://www.astrosurf.com/brego-sky
Script de Composición de imágenes HDR
« Reply #12 on: 2008 December 08 23:59:10 »
Hola Manolo,

solo encontramos logico este error si las imagenes no estan alineadas entre si :-? es eso asi? el script no alinea, solo realiza la composicion y asume que la alinacion ya esta realizada...

Un saludo

Offline ManoloL

  • PixInsight Addict
  • ***
  • Posts: 220
Script de Composición de imágenes HDR
« Reply #13 on: 2008 December 09 06:23:26 »
Quote from: "OriolLehmkuhl"
Hola Manolo,

solo encontramos logico este error si las imagenes no estan alineadas entre si :-? es eso asi? el script no alinea, solo realiza la composicion y asume que la alinacion ya esta realizada...

Un saludo


Hola de nuevo Oriol:
En principio las imágenes estaban inicialmente alineadas. No obstante luego las recorté para eliminar los bordes procedentes de la alineación y lo mismo he realizado el recorte de forma distinta a alguna de las imágenes. Hoy voy a tener un día muy ocupado, por lo que mañana las repasaré por si, como parece previsible, he metido la pata.

Saludos.
Saludos.

Manolo L.

Offline ManoloL

  • PixInsight Addict
  • ***
  • Posts: 220
Script de Composición de imágenes HDR
« Reply #14 on: 2008 December 10 00:48:42 »
Quote from: "ManoloL"
Quote from: "OriolLehmkuhl"
Hola Manolo,

solo encontramos logico este error si las imagenes no estan alineadas entre si :-? es eso asi? el script no alinea, solo realiza la composicion y asume que la alinacion ya esta realizada...

Un saludo


Hola de nuevo Oriol:
En principio las imágenes estaban inicialmente alineadas. No obstante luego las recorté para eliminar los bordes procedentes de la alineación y lo mismo he realizado el recorte de forma distinta a alguna de las imágenes. Hoy voy a tener un día muy ocupado, por lo que mañana las repasaré por si, como parece previsible, he metido la pata.

Saludos.


Hola de nuevo:

Efectivamente una de las imágenes no tenia los bordes recortados y consecuentemente era de un tamaño distinto al de las otras dos, lo que seguramente generó el error como muy bien sospechabas.

Gracias por tan rápida aclaración.

Saludos.

Manolo L.
Saludos.

Manolo L.