An exposure stack is a series of completely overlapping images at different exposures to capture a wider dynamic range beyond the limit of the sampling sensor.
Ideally they are fully overlapping (e.g. shot from a tripod) and the subject is static. For less than ideal conditions, hugin’s align_image_stack can correct for small perspective changes (e.g. hand held shots) and deghosting software such as the experimental hugin_hdrmerge from Jing Jin’s Google Summer of Code 2007 project can partially correct for scene movement.
There are a number of ways to merge a stack into a single image:
- Exposure Blending: many photographers load the stacked images into layers and use masks to manually reveal details from the appropriate layer, in Photoshop, Gimp, or any image editor that supports layers This is often used for manual deghosting as well.
- Exposure Fusion: For almost a year now photographers had access to completely automated exposure fusion with Andrew Mihal’s Enfuse.
- HDR/Tonemapping with tools like Qtpfsgui or Photomatix has been around for some years. While the merging of an HDR image under ideal conditions is straight forward, the tone mapping step can be computationally intensive and require human judgment/intervention, which makes the process more time consuming than exposure fusion.
… and Stitching…
Stitching is the two steps process of aligning partially overlapping images in space and blending them into a single, bigger picture.
The combination of stitching and stacking is now done inside hugin automatically. Select the desired type of output (enfused panorama for exposure fusion, or HDR panorama) and let the magic happen. Sometimes the artist wants more control over the process, e.g. to mask out which of two overlapping images will show in the stitched panorama.
There are basically two ways to control manually the rendering of a stacked panorama: stack and stitch, or stitch and stack. The result is nearly the same:
Stitching and Stacking…
In the past, the general recommendation was to stitch first. This was before Pablo d’Angelo implemented photometric adjustment in hugin and before Andrew Mihal gave us with enfuse an easy exposure blending tool.
- keep the color balance constant
- optimize alignment
- set the stage for manual deghosting across blending seams
Keeping color space constant is no longer an issue, thanks to hugin’s photometric adjustment and end-to-end HDR stitching. Enfuse is anyway not affected as it choice of pixel weight is independent of color balance. And for optimal alignment, in most cases the results of align_image_stack are better than the alternatives. Masking / deghosting can be indeed easier on a stitched panorama.
Stitching first presents the artists with a few pitfalls / disadvantages:
- The stitched layers must be aligned. The classic way to achieve this is to stitch a single layer and then use it as a template to stitch the rest.
- Blending seams within each layer may be different, resulting in visible artefacts.
- A stitching before stacking process is generally slower than a stacking before stitching process.
- Not all tools can handle seams in the stack – specifically enfuse and enblend do not handle well nadir and zenit seams (and the top and bottom edge of an equirectangular image are just that). Qtpfsgui does not handle well the 360° deam (the left and right edge of a 360° image).
Or Stacking and Stitching?
So we can stack and stitch. Running the stacks through the stacking process can be automated, for example with Erik Krause’s droplets (for Windows only) that pass an entire folder or a selection of images through hugin_align_image_stack and enfuse, or with hugin_hdrmerge if we want to stack HDR.
In many cases, stacking before stitching will yield acceptable results, even if the smaller image surface will allow for a smaller number of levels while blending / fusing. It will sure yield a shorter processing time.
As a VR artist, both processes have their place in my toolbox. I use stacking and stitching when I know I want simple, photorealistic results. Then I stack the images with enfuse (align_image_stack optional) before stitching. When I want to play with the tone mapping, I either stitch first then compose to HDR, or I let Hugin compose the HDR right from the input images in a single step. Deghosting and Masking can be applied on the input images, on the stacks, and on the stitches, as needed.