Ya en su día di una pista en agilizando las cosas para poder procesar rápidamente muchas fotos. El problema es que no todo el mundo tiene una Canon y el truco no sirve para el resto de cámaras. Hoy traigo la segunda parte, más lenta, pero que permite realizar un proceso por lotes a partir de muchas fotos. También sirve en el caso de que las fotografías no estén correctamente expuestas, ya sea en Canon o en otra marca, sobre todo cuando estén  sobreexpuestas dentro de cierto límite. En caso de subexpuestas tendremos problemas de ruido. El script es el siguiente:

 

#! /bin/bash
dcraw -v -w -g 2.5 12.5 -f -H 2 -T *.CR2
for a in *.tiff;
do nombre=${a%.*}
convert ${nombre}.tiff  -auto-level -sharpen 0x3 ${nombre}.tiff
done
for a in *.tiff;
do nombre=${a%.*}
composite <marca de agua> ${nombre}.tiff ${nombre}.jpg
done
mogrify -verbose -resize 1200 *.jpg
for a in *.jpg;
do nombre=${a%.*}
exiftool -tagsfromfile ${nombre}.CR2 -overwrite_original_in_place -exif:all ${nombre}.jpg
done
rm *.tiff
Antes de nada, si, se puede optimizar, pero me gusta así de modular, también es algo más fácil de explicar. Luego podéis acortarlo y comprimirlo tanto como queráis (no dudéis en compartir). también para poder despiezarlo más fácilmente y usar las partes a placer.Veamos por partes lo que hace:
dcraw -v -w -g 2.5 12.5 -f -H 2 -T *.CR2
Lo primero es transformar el RAW en algo usable usando dcraw. Usamos los siguientes modificadores:
  • -v: verbose, es decir, que nos cuente lo que hace.
  • -w: usamos el balance de blancos de la cámara.
  • -g 2.5 12.5: esta opción nos permite definir la curva gamma.
  • -f: para interpolar RGB como si fueran 4 colores y no 3.
  • -H 2: define como recuperar las altas luces, en este caso recortamos.
  • -T: guardamos como tif.
for a in *.tiff;
do nombre=${a%.*}
convert ${nombre}.tiff  -auto-level -sharpen 0x3 ${nombre}.tiff
done
Esta segunda parte (se puede poner con la tercera todo en el mismo bucle), es para terminar de depurar la exposición, esto se nota en muy contadas ocasiones. Al mismo tiempo aumentamos ligeramente la nitidez de la imagen. Si, se que la nitidez suele ser lo último, pero lo hacemos aquí por dos razones. La primera es que no queremos “enfocar” la marca de agua (siguiente paso), por otro es que en este método se da nitidez a la imagen mezclando esto con el reescalado.
for a in *.tiff;
do nombre=${a%.*}
composite <marca de agua> ${nombre}.tiff ${nombre}.jpg
done
Este bucle agrega una marca de agua a la fotografía. Se puede poner en el mismo bucle que el anterior o eliminarlo si no queremos agregar marca de agua. <marca de agua> define la ruta donde se encuentra la imagen que queremos superponer como marca de agua. Es muy útil para no tener que ir copiando la misma en cada directório. Esta parte podemos usarla sola para firmar por lotes muchas imágenes. Al mismo tiempo estamos convirtiendo de tif a jpg. Si quisieramos simplemente firmar ficheros jpg con cambiar tiff por jpg funcionaría.
mogrify -verbose -resize 1200 *.jpg
Reescalamos la imagen, dando 1200 píxeles de lado largo.
for a in *.jpg;
do nombre=${a%.*}
exiftool -tagsfromfile ${nombre}.CR2 -overwrite_original_in_place -exif:all ${nombre}.jpg
done
Durante el proceso los datos exif de la imagen se pierden, ahora pedimos que coja los datos exif del RAW original y los agregue al jpg (¿veis que fácil es falsear datos exif?…).
rm *.tiff
Borramos los ficheros tiff usados en pasos intermedios para que no ocupar espacio.
Este script está escrito para cámaras Canon, por eso se define el fichero RAW como CR2. EN caso de usar otro tipo de cámara (por ejemplo Nikon con sus ficheros NEF) tendríais que cambiar ese dato.
Algo que hay que tener en cuenta es que este es un proceso por lotes, para poder estar haciendo otras cosas mientras el ordenador trabaja por nosotros, si queréis un resultado lo más perfecto posible toca sentarse delante y dedicarle tiempo.
Las fotos que se muestran van en este orden: el jpg sin procesar extraido del RAW (aproximadamente lo que sería el JPG de la cámara), el jpg procesado mediante el script y una mezcla de ambos.
Lo primero, hablemos de las limitaciones: subexposición y ruido. Este proceso, aunque paree que oscurece las fotos, realmente reajusta la exposición ligeramente por debajo a lo que estamos acostumbrados, pero en caso de fotos oscuras, aumenta la misma, con el riesgo de ruido que eso tiene.
Como podemos ver, en la zona interior de la caña la aparición de ruido es bastante notable (sumado a que está tomada a ISO 12800).
A continuación veremos como iguala la exposición de tres tomas de una imagen HDR (que nunca llegué a procesar) de mayor a menor exposición.
Imagen sobreexpuesta:
Imagen correctamente expuesta:
Imagen subexpuesta:
Haced un experimento: abrid las tres imágenes procesadas en tres pestañas distintas y podréis ver que la sobreexpuesta tiene una luminosidad ligeramente superior, pero las otras dos son prácticamente iguales, si no fuera por el ruido.
Donde más se nota la potencia de este script es en la recuperación de zonas quemadas en el JPG (pero no en el RAW). La parte mala es que muchas veces esa recuperación es a costa de oscurecer parte de las sombras.
Como puede verse, gran parte del cielo, perdida en el jpg se ha recuperado.
Si queréis ver más ejemplos, pasaros por la galería.
http://www.apratizando.com/wp-content/plugins/dn_iSocial/images/facebook_48.png http://www.apratizando.com/wp-content/plugins/dn_iSocial/images/linkedin_48.png http://www.apratizando.com/wp-content/plugins/dn_iSocial/images/twitter_48.png http://www.apratizando.com/wp-content/plugins/dn_iSocial/images/meneame_48.png http://www.apratizando.com/wp-content/plugins/dn_iSocial/images/barrapunto_48.png