My panorama workflow

I have had many requests asking about “the making of” the panorama photos I took during my 17-day trip around Sweden this past August. I’m glad to oblige:-)


Nikon D300
Nikon 10.5mm fisheye lens
Manfrotto 055XPROB tripod
360Precision Adjuste panoramic tripod head
2.4GHz 17″ MacBook Pro with 4GB RAM

Nikon Capture NX
PTGui Pro
Photoshop CS3
Flash Panorama Player

Taking the shot: When I find a spot, I attach the camera to the tripod and fix the exposure, shutter speed, focus and color temperature so that they are all the same for each series of shots. The panoramic head is set up so that I will take 6 shots of the horizon around at 60-degree intervals and one pointing straight up. The shot pointing straight down is a bit trickier to take — I usually turn on the timer, push the shutter button, then extent the tripod horizontally in such a way that the camera is pointing down from approximately where it was before but without my or the tripod’s legs being in the picture. I usually take more than one shot for each image in a series, and more than one series for a particular location: The former gives me enough backup shots in case objects such as people move between shots; the latter lets me experiment with exposure and shutter speeds to get the best combination.

Processing the shot: Because I try to preserve as much detail from the shoot for as long as possible in my workflow, I use the raw image as my starting point — for Nikon cameras, that’s a .NEF file. I download these to my desktop, then batch process them into 16-bit TIFF files with Nikon Capture NX. The reason I use Nikon’s software here is that it automatically corrects for chromatic aberration (CA) in the fish-eye lens. I find the CA in the raw image to be quite pronounced, but also completely removable when using Capture NX. Photoshop lets you manually correct for CA, but batch processing with Capture NX saves me a lot of time.

Once I’ve chosen the definite six shots around plus one nadir and zenith shot for a particular series, I import them into PTGui Pro and get to work producing the composite panorama. I first let the program have its best go at it with its (very good) automated tools, but then I look over the results and tweak them manually. It is at this stage that a lot of voodoo happens to reduce any visible seams in the image, both by manually choosing good control points on pairs of images and by setting the correct parameters for the optimizer. A lot of the tricks here are just the result of trial and error.

Once a good-looking composite is in place (PTGui lets you preview it), I export the largest possible panorama — an image that is around 11700 by 5850 pixels large. I export to a 16-bit Photoshop .PSB file, which allows for extremely large file sizes. I also turn on PTGui’s option to export all component images as masked layers. The resulting file can be up to 1.5GB large, because it contains the blended base image in the bottom layer plus eight layers for component images, each with a mask attached.

Now I get to work in Photoshop. By removing bits of the mask of a component image layer, I can effectively paint over the base image with the contents of a component image. This makes a difference near the seams, where sometimes a person or moving object at the edge of an image may only be half visible in the blended base image. By choosing to favor one component image over another, I can paint in (or completely remove) an object near the seam.

When such conflicts have been resolved, I export the result as a single-layer 16-bit TIFF file, and open that in Photoshop for some final editing tweaks. It is at this stage that I remove any remaining blending artifacts with the clone stamp tool (for example if straight lines don’t meet correctly), and also apply global exposure adjustments. I save.

Now it is time to create this TIFF file into a viewable panorama. I fire up CubicConverter and import the TIFF file. I then convert it to a series of six cube faces, at the largest possible setting, usually around 3728 pixels square, and then save them into a folder as JPEGs (each around 3MB large). I then create a version with cube faces that are 900 pixels square, and save that into another folder (each around 250KB large). This way I will have one small version for a quick web view, and one full-resolution version for those who want to wait for the full quality view.

There are many different ways of displaying a panorama in a web browser. I have been using Flash Panorama Player, wich is a Flash application that loads six cube-face images and presents them in an interactive viewer. For each panorama, I put a copy of the Flash application, the cube faces and certain helper files into a directory on a web server. This can then be embedded into a web page via a simple <iFrame> tag. Flash Panorama Player is a very versatile tool, and I have used only a small subset of its features.

One feature I would look for in a future implementation of a panorama viewer is the ability to use one full-size panorama image, showing progressively more detailed views as a user zooms in. This way, a quick low-resolution image can be presented at once, but high-resolution images of a portion of the whole panorama can be downloaded and viewed upon zooming without loss of detail.

That’s my workflow. Do let me know if something in the above text isn’t clear or if I’ve rushed it in places.

Leave a Reply

Your email address will not be published. Required fields are marked *