Toward a better HDR pipeline
I hacked on my HDR pipeline. What I have now provides some automation but it's still really fragile and generally ugly. Nevertheless, I can now process a few gigabytes of pictures without clicking like crazy until I get RSI.
The first part was to automatically combine multiple exposure into HDR images. Discovering which pictures are multiple exposure of the same scene is theoretically quite easy. All the exif tags should be the same except for the exposure, which should be decreasing, and the time spawn of all the pictures should be no more than exposure time plus shutter lag. It gets complicated when you add the fact that my camera sometimes implements bracketing by decreasing ISO sensitivity instead of shortening the exposure time. That and PIL's miserable support for exif.
Once I had multiple exposure auto-detection working, I had to combine them into HDR images. Giuseppe Rota, the lead developer of Qtpfsgui, gave me some tips for that. There is a neat tool in Hugin's SVN repo, aling_image_stack. It will align a set of overlapping images and combine them into an HDR image. With a bit of knobs twisting, it will anything: the tripod is optional now.
The rest of the pipeline applies tone mapping operators from pfstmo; this is the time consuming part. I typically select a massive bunch of HDR images and operator parameters then let it process all night long. In the morning I discard the junk and define more variations around the interesting settings then launch another computation while I'm at work.
What is this HDR thing anyway? When we look at a scene, our eyes dynamically recalibrate to accept more or less light depending on what we are looking at. A camera on the other hand uses a shutter speed that is global for the whole scene. We can look at something bright then at something dark without problems but if we take a picture of a scene with something very bright and something very dark, either of the bark object will end up pitch black or the bright one will be all white. There is no way around it.
This image is a bit extreme; it shows three picture shot from inside the tunel leading to the courtyard of the Château Frontenac. The roof of this tunnel features gorgeous details but the morning Sun directly strikes the buildings outside; we are blinded by the light. On the other hand, the buiding is also interesting so we want to try a shorter exposure. With a tone mapping operator, we can take the best part from each exposures.
A tone mapping operator can feel quite natural or it can fit as much information as it can in it's output, producing a surreal image, sometimes with the feeling of a painting.
The first image was tone mapped with the durand02 operator of pfstmo; it looks perfectly normal and without the reference pictures, we could assume that the image was the result of a single shot photo. The second image was tone mapped with mantiuk06; it doesn't look like a photo anymore but the texture was enhanced and we can see more details than with durand02. Let's look at more examples.
You can find more HDR images in my Flickr stream.
There is no magic wand that works everywhere. Some operators are better inside, some are better outside, and they all have many adjustable parameters. That's why an efficient pipeline is a great help. I should have something clean enough for a release soon. In the mean time, your best bet is Qtpfsgui.
By the way, Pior just upgraded to DSLR. Judging by his grin, he was long due for the upgrade. Let's hope that he puts some good stuff online soon.

Lisp has pretty good Exif support. :)
You are right. I hesitated after reading the spec: Python has no rationals until 2.6 is out. On the other hand, I really like date manipulations with Python's date-util. Can ZPB-EXIF save the exif tags? I ended up making wrappers to call exiv2 in a pipe. Exiv2 has a crappy interface but it's the only thing I found that reads, writes, and won't choke on vendor specific tags.
You might have recognized the Dieu du Ciel behind Pior. The last few times that we decided to have a cold one at the DDC, someone stoped at Lozeau and bought a new camera. Who knows where this will lead us...