This article is also available in English: Script to make HDRs with Linux.
En el artículo HDR en Linux expliqué mi flujo de trabajo para hacer HDR en Linux. Continuando con ese tema, en este artículo presento el script uso habitualmente para automatizar este proceso en una única llamada.
El código del script en cuestión es el siguiente:
#! /bin/bash
set -e
SELF=`basename $0`
DIR=.
ALIGN=N
ENFUSE=N
TONEMAP=N
echo "$SELF: `date`"
while [ "$1" != "" ]; do
case "$1" in
"-a")
ALIGN=Y
;;
"-e")
ENFUSE=Y
;;
"-t")
TONEMAP=Y
;;
"-d")
DIR="$2"
shift
;;
*)
echo "$SELF: Parameters"
echo "$SELF: -d -> Directory"
echo "$SELF: -a -> Align images"
echo "$SELF: -e -> Create enfuse"
echo "$SELF: -t -> Create and tonemap HDR"
exit
;;
esac
shift
done
HDR="$DIR"/HDR
FILES=("$DIR"/*.[Cc][Rr]2)
COUNT=${#FILES[@]}
echo "$SELF: Options:"
echo "$SELF: Directory = $DIR"
echo "$SELF: Output = $HDR"
echo "$SELF: Align = $ALIGN"
echo "$SELF: Enfuse = $ENFUSE"
echo "$SELF: Tonemap = $TONEMAP"
echo "$SELF: Files = ${FILES[*]}"
if [ $COUNT -eq 0 ]; then
echo "$SELF: No files found!!!"
exit 1
fi
echo "$SELF: Creating output directory:"
mkdir "$HDR"
echo "$SELF: Parsing EXIF information:"
dcraw2hdrgen ${FILES[*]} > "$HDR"/pfs_raw.hdrgen
echo "$SELF: Generating TIFFs"
ufraw-batch --wb=camera --gamma=0.45 --linearity=0.10 --exposure=0.0 --saturation=1.0 --out-type=tiff --out-depth=16 --overwrite --out-path="$HDR" ${FILES[*]}
FILES=("$HDR"/*.tif)
if [ "$ALIGN" = "Y" -a $COUNT -gt 1 ]; then
echo "$SELF: Aligning images"
align_image_stack -a "$HDR"/AIS_ ${FILES[*]} > "$HDR"/align_image_stack.log
rm -f ${FILES[*]}
FILES=("$HDR"/AIS_*.tif)
fi
if [ "$ENFUSE" = "Y" ]; then
if [ $COUNT -gt 1 ]; then
echo "$SELF: Generating enfuse:"
enfuse -o "$HDR"/enfuse.tif ${FILES[*]} > "$HDR"/enfuse.log
else
echo "$SELF: By-passing enfuse:"
ln ${FILES[*]} "$HDR"/enfuse.tif
fi
fi
if [ "$TONEMAP" = "Y" ]; then
echo "$SELF: Parsing hdrgen"
i=0
> "$HDR"/pfs_tif.hdrgen
cat "$HDR"/pfs_raw.hdrgen | while read LINE; do
echo "${FILES[$i]} $LINE" | cut -d' ' -f1,3- >> "$HDR"/pfs_tif.hdrgen
i=`expr $i + 1`
done
echo "$SELF: Generating HDR:"
pfsinhdrgen "$HDR"/pfs_tif.hdrgen | pfsout "$HDR"/pfs.hdr
echo "$SELF: Tone-mapping HDR:"
echo "$SELF: Operator = mantiuk06"
pfsin "$HDR"/pfs.hdr | pfstmo_mantiuk06 -e 1 -s 1 | pfsgamma -g 2.2 | pfsout "$HDR"/pfstmo_mantiuk06.jpg
echo "$SELF: Operator = fattal02"
pfsin "$HDR"/pfs.hdr | pfstmo_fattal02 -s 1 | pfsout "$HDR"/pfstmo_fattal02.jpg
fi
echo "$SELF: Cleanning:"
rm -f ${FILES[*]}
Es script está preparado para usarse con los ficheros RAW generados por una Canon 400D, pero creo que es fácilmente adaptable a otras cámaras. En concreto, donde dice "FILES=("$DIR"/*.[Cc][Rr]2)" se están seleccionando los ficheros con extensión "CR2", que son los que generan todas las cámaras Canon (Nikon utiliza la extensión "NEF", por ejemplo); y los parámetros "--gamma=0.45 --linearity=0.10" que se le pasan a "ufraw-batch" son específicos de la 400D. El resto creo que debería ser bastante genérico.
Lo primero que hay que hacer es bajarse el código al ordenador y guardarlo en un fichero que podamos ejecutar. Supongo que lo más sencillo es conectarse como usuario "root" y crear un fichero llamado "hdr.sh" en el directorio "/usr/local/bin/". Entonces seleccionamos y copiamos el código, lo pegamos en el fichero, y lo guardamos; finalmente hay que ir a la línea de comandos y dar permisos de ejecución con "chmod +x /usr/local/bin/hdr.sh".
Para utilizarlo, el primer paso es descargar en un directorio vacío todas las exposiciones de una escena que queramos juntar. Entonces ejecutamos el script con "hdr.sh -d _directorio_ -a -e -t". Lo dejamos que trabaje un rato, y cuando acabe tendremos tres ficheros nuevos en nuestro directorio: "enfuse.tif", "pfstmo_mantiuk06.jpg", y "pfstmo_fattal02.jpg".
El parámetro "-a" sirve para alinear automáticamente las imágenes; si hemos hecho las fotos con trípode y estamos completamente seguros de que están perfectamente alineadas, podemos quitarlo y el script acabará antes. Con "-e" indicamos que debe generarse la versión enfuse, y también podemos quitarlo si sabemos que no vamos a usarla; análogamente, podemos quitar el parámetro "-t" si no queremos que se haga el mapeo de tonos.
2009/07/27: He actualizado el artículo, para mejorar el paso del mapeo tonal, usando parámetros que generan un mejor resultado; también lo he ampliado para poder generar HDRs a partir de una única foto.
2009/09/21: Vincent Tassy ha publicado una versión mejorada de este script; su versión genera autoáticamente el fichero GIMP al final del proceso (un detalle muy interesante), y puede generar HDRs a partir de ficheros JPEG (yo no suelo usar JPEG, sólo RAW, sin embargo). Su versión es mejor que la mia, yo iría allí y la cogería: Linux script to generate HDR images from bracketed images.

0 commentarios:
Publicar un comentario en la entrada