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/sh
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
FILES=("$DIR"/*.[Cc][Rr]2)
echo "$SELF: Options:"
echo "$SELF: Directory = $DIR"
echo "$SELF: Align = $ALIGN"
echo "$SELF: Enfuse = $ENFUSE"
echo "$SELF: Tonemap = $TONEMAP"
echo "$SELF: Files = ${FILES[*]}"
echo "$SELF: Parsing EXIF information:"
dcraw2hdrgen ${FILES[*]} > "$DIR"/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 ${FILES[*]}
FILES=("$DIR"/*.tif)
if [ "$ALIGN" = "Y" ]; then
echo "$SELF: Aligning images"
align_image_stack -a "$DIR"/AIS_ ${FILES[*]} > "$DIR"/align_image_stack.log
rm -f ${FILES[*]}
FILES=("$DIR"/AIS_*.tif)
fi
if [ "$ENFUSE" = "Y" ]; then
echo "$SELF: Generating enfuse:"
enfuse -o "$DIR"/enfuse.tif ${FILES[*]} > "$DIR"/enfuse.log
fi
if [ "$TONEMAP" = "Y" ]; then
echo "$SELF: Parsing hdrgen"
i=0
> "$DIR"/pfs_tif.hdrgen
cat "$DIR"/pfs_raw.hdrgen | while read LINE; do
echo "${FILES[$i]} $LINE" | cut -d' ' -f1,3- >> "$DIR"/pfs_tif.hdrgen
i=`expr $i + 1`
done
echo "$SELF: Generating HDR:"
pfsinhdrgen "$DIR"/pfs_tif.hdrgen | pfsclamp --rgb | pfsout "$DIR"/pfs.hdr
echo "$SELF: Tone-mapping HDR:"
echo "$SELF: Operator = mantiuk06"
pfsin "$DIR"/pfs.hdr | pfstmo_mantiuk06 | pfsout "$DIR"/pfstmo_mantiuk06.jpg
echo "$SELF: Operator = fattal02"
pfsin "$DIR"/pfs.hdr | pfstmo_fattal02 | pfsout "$DIR"/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.
Continuar leyendo...
