2008/10/19

HDR en Linux

This article is also available in English: HDR and Linux.

Desde hace ya algún tiempo, en el ordenador que uso en casa sólo tengo instalado Linux. El hecho de no utilizar MS-Windows me ha dado mucha libertad y flexibilidad en el día a día, pero también me obligado a buscar una ruta alternativa para trabajar con mis fotos; este es mi flujo de trabajo habitual, para hacer HDR en Linux.

Hacer las tomas

Siempre que puedo, utilizo un trípode para que todas las tomas estén perfectamente alineadas; aunque existe software que permite alinearlas (más abajo explico cómo hacerlo), a veces el algoritmo no siempre puede corregir correctamente el desplazamiento entre tomas, y entonces es cuando aparecen halos. Si no puedo usar un trípode, entonces activo la opción de horquillado de la cámara con el rango máximo que permite (3 tomas a -2EV, 0EV, +2EV), y el disparo en ráfaga activado. Si puedo usar trípode, entonces tengo más libertad para jugar con las exposiciones: para las fotos nocturnas, por ejemplo, últimamente suelo poner la cámara en modo "bulb", con el diafragma a f/16, y hacer nueve tomas de entre 1 segundo y 4 minutos, duplicando el tiempo entre tomas.

Lo que siempre hago es disparar en RAW, en parte porque es el formato que más información almacena, y en parte porque prefiero hacer el tratamiento después en el ordenador.

Descargar las imágenes

Evidentemente, lo primero que hago al llegar a casa es descargar las imágenes. Se puede hacer mediante un lector de tarjetas, pero la conexión de las Compact Flash me parece poco duradera; de hecho, ya se me rompió hace tiempo una de las patillas del lector (sorprendentemente, sigue funcionando).

En cambio, lo que hago es descargarlas a través del cable USB, mediante el programa gThumb. Nada más conectar la cámara al ordenador, este la detecta automáticamente y aparece una ventana, donde puedo seleccionar las fotos y descargarlas. Además, el programa deja cada conjunto de fotos en un directorio separado, ordenados por fecha y hora; esto me viene muy bien, porque normalmente uso estos directorios como carpetas de trabajos pendientes de procesar. Para el caso de imágenes en HDR, lo que hago es guardar en subcarpetas independientes cada lote de tomas.

Convertir a TIFF

El siguiente paso consiste en convertir los ficheros RAW en TIFF. He elegido el formato TIFF, sin compresión y a 16bits, porque es el que mejor preserva la información de las imágenes. Utilizo para ello el programa UFRaw. Partiendo del directorio donde estén los ficheros RAW (extensión CR2 en mi caso), hago la conversión con el siguiente comando:

ufraw-batch --wb=camera --gamma=0.45 --linearity=0.10 --exposure=0.0 --saturation=1.0 --out-type=tiff16 --overwrite IMG_????.CR2

Esto me genera un fichero TIFF para cada RAW que haya en el directorio; los valores de "gamma" y "linearity" dependen un poco de cada cámara (lo mejor es buscar en la documentación del programa), los demás son los estándares.

Alinear las imágenes

Si no he podido usar trípode, entonces tengo que alinear las imágenes generadas en el paso anterior. La manera más rápida que he encontrado consiste en usar una utilidad que viene con el programa Hugin:

align_image_stack -a AIS_ IMG_????.tif

Este comando generará imágenes con nombres del tipo AIS_????.tif, que yo renombro manualmente a IMG_????.tif (así no tengo que adaptar el resto de los pasos).

Fusión directa

Antes de entrar realmente en el territorio HDR, utilizo el programa enfuse para hacer una primera fusión de las imágenes:

enfuse -o enfuse.tif IMG_????.tif

A diferencia del HDR, este programa no intenta hacer una reconstrucción matemática de la escena; simplemente, lo que hace es tomar de cada imagen aquellas zonas que estén mejor expuestas. Y la verdad es que lo hace francamente bien: en muchos casos, el resultado es plenamente satisfactorio y no necesito continuar con los siguientes pasos.

Generar HDR

Si no estoy satisfecho con el resultado, o si quiero dar a la foto una apariencia más irreal, entonces es cuando utilizo plenamente las técnicas del HDR. Lo primero es generar el fichero HDR; este fichero contendrá una reconstrucción fiel de la iluminación real de la escena, mediante algoritmos matemáticos. Se necesitan dos programas para este paso, ambos incluidos en las PFSTools:

dcraw2hdrgen IMG_????.CR2 | sed -e "s/CR2/tif/" > hdrgen.txt
pfsinhdrgen hdrgen.txt | pfshdrcalibrate -b 16 -x  | pfsout pfs.hdr

Bien, ahora ya tengo un fichero HDR (pfs.hdr), pero que no puedo utilizar directamente; primero, es necesario volver al territorio LDR...

Mapeo tonal

Exiten muchos operadores para hacer la conversión de HDR a LDR; después de haber probado varios, he acabado por quedarme con dos, que son los que uso normalmente: Mantiuk06 y Fattal02.

pfsin pfs.hdr | pfstmo_mantiuk06 -e 1 -s 1 | pfsgamma --gamma 2.2 | pfsoutimgmagick pfstmo_mantiuk06.tif
pfsin pfs.hdr | pfstmo_fattal02 -s 1 | pfsoutimgmagick pfstmo_fattal02.tif

La versión Mantiuk es bastante usable, de hecho se parece mucho a lo que hace enfuse. La versión Fattal tiene un efecto muy exagerado, que no me gusta en absoluto; pero he encontrado una manera de sacarle provecho.

Tratamiento por capas

Con estas tres versiones de la foto (enfuse.tif, pfstmo_mantiuk06.tif y pfstmo_fattal02.tif), lo que hago es juntarlas mediante capas en GIMP. Habitualmente, empiezo por colocar la versión de enfuse abajo de todo; encima coloco la versión Mantiuk, al 50%; y arriba del todo la versión Fattal, también al 50% pero en modo "overlay". A partir de aquí, básicamente es cuestión de ajustar los niveles y la opacidad de las capas hasta conseguir el efecto que quiero. También aprovecho para hacer algún retoque con la herramienta de clonar, si hace falta.

El resultado lo vuelvo a exportar, en formato TIFF para no perder nada de información, y paso a la siguiente etapa.

Últimos retoques

Finalmente, utilizo RawTherapee para los últimos retoques, como correción del color o la nitidez, ajustes de brillo y contraste, reducción de ruido, etc,...; el resultado lo exporto a JPEG y lo doy por acabado.

Por ejemplo

Para ver un ejemplo de este flujo de trabajo en acción, podéis echarle un viztazo al artículo Un par de fotos de Barcelona.

Enlaces

Estas son las páginas principales de los programas que se comentan en este artículo:

  • gThumb: Básicamente es un programa para capturar imágenes desde una cámara y gestionarlas en carpetas. Está integrado en Gnome, y suele instalarse por defecto en todas las distribuciones de Linux.
  • UFRaw: Lo utilicé durante una temporada como conversor RAW, pero creo que ahora hay cosas mejores, y ya sólo lo uso para hacer conversiones en batch. También suele venir con las distribuciones de Linux, aunque no todas lo instalan por defecto.
  • Hugin: En mi opinión, el mejor programa para hacer panorámicas, correcciones de prespectiva, y muchas otras cosas; realmente es una navaja suiza para estas cosas. Aquí sólo lo he usado para una alineación muy básica, pero pronto escribiré otro artículo donde se usará plenamente. Es otro paquete que está en los repositorios de las principales distribuciones, pero en este caso suelo usar el del propio proyecto, porque está más actualizado.
  • PFSTools: La referencia en el HDR; es un conjunto de programas, que funcionan en línea de comandos, y contemplan todas las etapas del trabajo en HDR. Aunque viene en algunas distribuciones, prefiero acudir directamente a la página web del proyecto y compilar yo mismo los fuentes. Hay una interfase gráfica, llamada Qtpfsgui, que no acaba de gustarme.
  • GIMP: ¿Quién no ha oído hablar de GIMP? Es similar al PhotoShop, aunque le faltan muchas funcionalidades, sobre todo el el campo profesional; sin embargo, para los aficionados como yo es más que suficiente.
  • RawTherapee: Este es el programa que uso actualmente para editar los ficheros RAW. Es el único software del artículo que no es libre, pero al menos es gratuito.

Notas

Este artículo continúa en: Un script para hacer HDR en Linux

2009/07/27: He actualizado el artículo, para mejorar el paso del mapeo tonal, usando parámetros que generan un mejor resultado.

2010/09/21: Gracias al consejo de un lector anónimo, he conseguido que funcione la salida a TIFF en el paso del mapeo de tonos; espero que con esto se ganará algo de calidad en la imagen final.

2011/01/20: He corregido un bug en la creación del HDR (usar "pfshdrcalibrate" en lugar de "pfsclam"), y el resultado mejora mucho.

11 comentarios :

Juan Antonio dijo...

¡Hola! gracias por el artículo, estoy empezando en HDR y tengo un problema... Tengo hugin instalado y entiendo que enfuse está integrado en este, porque lo veo en el panel de costura. Intento utilizarlo por consola pero no reconoce el comando. ¿sabes si hay alguna manera de utilizarlo, aunque sea a traves de hugin? lo he intentado y no soy capaz.

eduperez dijo...

En la última pestaña de Hugin hay una opción para hacer exactamente lo que tú comentas: "Panorama fusionado (enfuse)".

Juan Antonio dijo...

Gracias!! Voy a probarlo ahora mismo...

Sandra dijo...

Muchisimas gracias por este tutorial! De parte de una linuxera que empieza sus pinitos con la Fotografía. Justo lo que andaba buscando. Gracias por tomarte el tiempo de compartir tus conocimientos.

Un abrazo!

eduperez dijo...

@Sandra:

Gracias por tus palabras, me alegra saber que estos artículos son útiles; a ver si encuentro pronto un poco de tiempo para escribir más.

Manolo dijo...

Hola Edu,

¡Estupendo artículo! He puesto en práctica tu manual con buenos resultados.

Te quería además comentar que he "personalizado" tu método para un único RAW y trabajando la mezcla de imágenes a 16 bits (con imagemagick). Lo he publicado en fotolibre.net, en concreto aquí, con mención expresa (y repetida) a este mismo artículo.

Gracias por tu dedicación y tu "manuelillo" ;-)

Anónimo dijo...

Gracias por la información, eso es lo bueno de linux siempre hay alguien a aporta con lo sabido.

Anónimo dijo...

Hola Edu:

Estoy intentando utilizar tu script y me encuentro con un mensaje de error que dice

pfshdrcalibrate: error: input value higher than defined number of input levels (adjust the number of bits per pixel)

Debido a este error no se crea el archivo pfs.hdr y la ejecución del script se interrumpe.

Me ha costado llegar hasta aquí pero ya no sé seguir ¿me podrías dar una idea?

Un saludo.

eduperez dijo...

@Anónimo:

No se me ocurre qué puede ser; si ejecutas todos los pasos (o el script) tal cual, los ficheros que le llegan a pfshdrcalibrate deberían tener siempre el mismo formato, no entiendo de qué se puede quejar.

Siento no poder ser de más ayuda...

Anónimo dijo...

Hola:

Gracias por la asistencia.

Yo no sé si el error se puede encontrar en la línea 97, con el número que se da al modificador -b.

Un saludo y gracias por compartir tu trabajo.

eduperez dijo...

@Anónimo:

Hay una discusión abierta en el grupo de pstools sobre este tema; de momento, el autor ha creado una nueva versión de la herramienta, que en principio corrige este problema: http://sourceforge.net/projects/pfstools/files/pfstools/1.8.5/.

Publicar un comentario en la entrada