I have fallen in love with high dynamic range photography.

In his introduction to “Merge to HDR in Photoshop CS2Michael Reichmann does a great job of explaining dynamic range limitations in photography and the ways to overcome them. Photomatix provides a nice little FAQ about HDR imaging as well as a few dynamic range increase examples.

For Linux users, PFScalibration provides an implementation of a method for the recovery of high dynamic range images from a set of low dynamic range exposures such as the JPEG files produced by the generally available digital cameras.

For those who prefer a graphical user interface it is also possible to create HDR images from bracketed exposures using Cinepaint with Hartmut Sbosny’s “Bracket to HDR” Cinepaint plugin. Its output is an HDR image that like with PFScalibration can be saved in the OpenEXR HDR image format developed by Industrial Light & Magic.

With Cinepaint as well as with PFScalibration the resulting HDR image must then be tone mapped to normal dynamic range so that an image in a format such as JPEG can be produced. Tone mapping is the job of PFStmo, a package that contains the implementation of state of the art tone mapping operators.

Nicholas (alias Sunyata on Flickr) has been one of the very first Linux users to try his hand at HDR photography with Cinepaint and PFStmo and publish the results. Here are a few of his most beautiful latest results:

Stunning isn’t it ? These images show how HDR imaging liberates from the exposure constraints of traditional photography. PFScalibration and PFStmo are part of PFStools, a set of command line and graphical programs for reading, writing, manipulating and viewing high-dynamic range images. PFStools is the part of the excellent works of the Max-Planck-Institut Informatik. It is licensed under the GPL.

Because of its modular architecture owning to use of UNIX pipes, the PFStools package is quite flexible. A typical workflow would look like the following :

# Calibrate the system - this should only be done once for each camera
# Generate a listing of the calibration source files and their characteristics
jpeg2hdrgen img*.jpg > example.hdrgen
# Create the camera response curve
pfsinhdrgen example.hdrgen | pfshdrcalibrate -v -s camera.response
# Perform the actual process of converting bracketed JPEGs
# to a tone mapped HDR image
# Generate a listing of the source files and their characteristics
jpeg2hdrgen img*.jpg > example.hdrgen
# Create the HDR image in the OpenEXR format
pfsinhdrgen example.hdrgen | pfshdrcalibrate -v -f camera.response
| pfsoutexr example.exr
# Render a tone mapped image using the tone mapping operator of
# your choice (drago03 in this example).
pfsin example.exr | pfstmo_drago03 | pfsgamma 2.2 | pfsout example.jpeg

As you can see the process is quite simple. But you definitely need to read the PFScalibration documentation. Wolfsauge also paraphrased the PFScalibration documentation and sprinkled a few examples on top of it – you might want to read his article about producing HDR images to see the problem in another light.

Now let’s fetch a sturdy tripod, go out and make HDR images !