A Note on the No-Parallax Point (Not Nodal Point)

Often, people will say that you need to rotate your camera around “the nodal point” of your lens to eliminate parallax when taking panoramas. Unfortunately, this is not correct for several reasons.

Firstly, there is not a single nodal point for a lens, in fact there are 2 (front and rear). Secondly, neither of these 2 nodal points is the point around which you need to rotate the lens to avoid parallax [1]. One should rotate the lens around the entrance pupil (the apparent position of the aperture stop) to avoid parallax. This position is also called the No-Parallax Point (NPP for short).

There are complications of course. The entrance pupil position can change depending on the angle at which the light rays enters the lens. This is especially noticeable in fisheye lenses where the entrance pupil can move significantly at extreme angles off-axis.

Peleng 8mm Fisheye Entrance Pupil Shift. (Left) The entrance pupil (the bright spot in the middle) when looking near the optical axis appears to be about a cm of two back from the front bezel of the lens. (Right) At nearly 90 degrees from the optical axis, the entrance pupil is at the same plane as the front bezel.

This shift in entrance pupil can occur in “normal” lenses as well but usually to a smaller degree. A more detailed examination of where the entrance pupil is located and can be shifted can be found here (pay attention to p.10 in particular). So the next time some says “nodal point”, gently guide them to use the term “entrance pupil” or “no-parallax point” instead.

Notes

[1] From Wikipedia: “The nodal points are widely misunderstood in photography, where it is commonly asserted that the light rays “intersect” at “the nodal point”, that the iris diaphragm of the lens is located there, and that this is the correct pivot point for panoramic photography, so as to avoid parallax error. These claims generally arise from confusion about the optics of camera lenses, as well as confusion between the nodal points and the other cardinal points of the system. (A better choice of the point about which to pivot a camera for panoramic photography can be shown to be the centre of the system’s entrance pupil.”

London Calling

I had the opportunity to visit London and managed to find some time to shoot some panoramas. The weather wasn’t ideal with scattered showers and cloudy skies but the rain managed to hold off for the time I had available. In the lead up to Christmas, festivities were in full swing so Christmas lights, trees, and markets would provide colourful subjects.

Piccadilly Circus

Piccadilly Circus at Dusk. This is a popular area for panoramas. The residual wet sheen gives some interesting reflections. It was very busy so I had to take many shots to try to get frames that would stitch together without too many mismatched seams. The high contrast in the scene means that bracketing is required to capture the highlights.

Irving Street

Irving St, off Leicester Square, Luckily the foot traffic wasn’t too heavy so I could set up my tripod without being in the way. The dynamic range of the A7m3 is sufficient to be able to cope with the contrast in this scene without bracketing.

Trafalgar Square

Trafalgar Square. It was a challenge to find a spot where there were no strong shadows to complicate the stitch. I chose a spot directly under one of the lamps. Some bracketing could have been useful to deal with the extreme contrast between the lit stalls and the rest of the night scene. Focus bracketing could also have been used to make the lamp post sharper.
Centre of Trafalgar Square. I’ve tried to balance the Christmas tree and Nelson’s Column. Luckily the plaque in the centre was at just the right position.

London Eye

London Eye. This is a retaken pano of a previous one taken many years ago. This was a straightforward shoot, 4+1+1 and no bracketing. The latitude of the A7m3 was impressive.

Waterloo Place

Waterloo Place off Pall Mall. Another straightforward pano shoot. Main issue was shadows cast by spotlights on the corner buildings. These were removed in Photoshop.

Covent Garden

St Paul’s Church, Covent Garden. St Paul’s is also known as the “Actor’s Church”. Some flare spots due to the bright lights were removed in Photoshop prior to stitching.

Shooting Details

I use a Sony A7m3 “fullframe mirrorless” camera. Previously I used a Sony A5100 with an APS-C sized sensor. They both have 24 megapixels but the A7m3 has considerably better dynamic range and high ISO performance.

I use the Samyang 12mm/2.8 Fisheye lens. This is a “fullframe fisheye” lens, “fullframe” refers to the fact that the image circles covers the entire sensor. Previously I used the Samyang 8mm/2.8 Fisheye lens that is a “fullframe fisheye” on the A5100 APS-C camera. The 12mm/2.8 has better flare resistance that is noticeable on night scenes.

I use the Nodal Ninja 3 Mk III panohead with Rotator Mini and Nadir Adapter. I upgraded from the Nodal Ninja 3 Mk I/II hybrid that had served me well shooting the Konica-Minolta 7D, Sony A700, A580, A77, NEX-7, and A5100 with a Peleng 8mm, Sigma 10mm, Samyang 8mm/3.5, and Samyang 8mm/2.8 over the years. The new panohead fits my upgraded rig a bit better and the Nadir Adapter is a time saver. I use a Benro C-169M8 Travel Tripod with a Manfrotto 496 ballhead.

Processing Details

The raw files were imported in Capture One 20 Express (for Sony). I selected the frames that would be assembled. There were many spare frames since I would shoot extra shots to capture moving objects (people, cars etc,), high contrast scenes (usually base exposure and -2EV), and to fill in shadows.

Capture One 20 Express for Sony

The selected frames were then adjusted in a batch. First thing is to apply the same white balance setting. Shots taken at night under a variety of mixed lighting can be challenging to get the white balance “right”. Usually, I try to balance the colour temperatures throughout the scene, taking care with the green-magenta shifts that can occur with fluorescent and LED lights. Other common settings include chromatic aberration correction, black level point, sharpness fall-off, and clarity.

Each frame is then adjusted for exposure, It is critical to preserve the highlights, this is done by a combination of highlight recovery and overall exposure. Some shadow recovery can be used to prevent the darker areas being crushed to black but there is no need to fully recover shadows at this stage.

I usually leave the saturation and contrast untouched. These can be adjusted after stitching. Occasionally, I may need to reduce the contrast of the nadir shot so that it blends in with the edges of the other shots.

The adjusted raw files are now exported as 16-bit TIFFs in Adobe RGB colour profile. These are then imported into Hugin for assembly and stitching. There are other good programs for creating panoramas including PTGUI but Hugin has the advantage of being free. Hugin is also quite powerful, allowing detailed control of the alignment and exposure optimisation process. For a more automated solution, PTGUI is probably a better choice.

Masking the source images to remove the tripod and panohead as well as deal with moving objects in the frame.

After the images have been imported into Hugin, the first step is to mask the images to remove the panoramic head and tripod that may intrude into the edges of the frame. The Zenith and Nadir are also cropped to circular regions. It is useful to define the focal length and projection type of the lens, 13.1mm and full-frame fisheye are used for the Samyang 12mm/2.8 Fisheye. I assign the same lens to the horizontal frames and separates ones to each of the Zenith and Nadir. The Nadir in particular will need to be optimised differently to the other frames in order to compensate for the likely shift in position.

Adding control points (CPs) between pairs of overlapping images. It is only necessary to place CPS along the middle of the region of overlap.

Next step is to add control points (CPs) between overlapping frames. There are automatic methods but I prefer to manually add points. I find that I spend more time fixing automatically generated CPs than if I had added them manually. I start off by connecting the horizontal frames. To get a good stitch, all that is needed is that the frames match along a seam line, generally placed along the middle of the overlap region. Hence, I only add CPs along a line that stretches from the top to the bottom of the overlap. For the Nadir, I add 2 to 3 CPs per overlap with the horizontal frames. Extreme distortion parameters will usually need to be used to get it to match up with the rest of the pano.

After the CPs have been added, then the position optimisation process than begin. I start with optimising just the position. Next I optimise position, angle of view, and barrel. Finally, I optimise all parameters except translation. Throughout, I check for any CPs that have large errors as this might indicate that they may be incorrectly placed. I either correct the placement or delete them if there are sufficiently many other CPs.

Images are optimised for position and lens geometry. Brightness differences remain but will be dealt with in the next stage.

Hopefully, after several rounds of optimisation and tweaking of the CPs, the errors will be small (maximum of a few pixels in a 14Kx7K pano) and visually the pano looks aligned with no obvious errors in the preview window. Additional masks may be added to remove moving objects or else control what elements from each frame end contribute to the final pano.

Brightness across frames has been optimised to reduce differences. The zenith does not quite match the other frames since the sky had become much darker over the course of shooting. It still blends in quite well.

The next stage is photometric optimisation. For many years now, panoramic software have been able to cope with source photos shot at difference exposure values and stitch them together in a seamless manner. This allows a more flexible and arguably optimum manner to capture the initial source photos [1]. I will use autoexposure to create a base layer together with bracketing of selected frames to capture blown highlights. In the exposure optimisation stage, Hugin can exposure match all the frames in a near seamless way. I can then export the full pano at various brightnesses which have shadow, mid, and highlight detail separately. These are then combined using Enfuse to produce a single pano that incorporates the detail in both shadows and highlights in a process called exposure fusion.

(Top-Bottom) Over, mid, under-exposed panorama, final exposure fused image.

The exported pano (exposure fused if necessary) from Hugin in equirectangular formal is then post-processed. I use Picture Windows Pro 7 as my main image editor [2], with Photoshop 6 for cases where I need to do spot removal or extensive cloning. First step is to adjust the contrast using curves. I’ll first bring up the shadows as these will be a bit dark as I try to protect the highlights in the previous steps. Then I’ll apply an S-curve to boost mid-range contrast and compress the highlights. The preserved highlights can look unnaturally dark so I’ll bring them up near the top of the histogram without blowing them out.

Curves Adjustment

Sharpening of the image is very important. I’ll perform a large radius unsharp mask, coarse sharpen, and a fine sharpen. The sharpening process utilises pixels in a region hence problems can occur at the +/-180 degree boundary of the equirectangular image. To avoid a visible seam arising from such non-global adjustments, I’ll create a pano 720 degrees (or 1080 degrees) wide before apply the filters. Then I’ll crop out a central 360 degree section to get back to a regular equirectangular projection.

Duplicating the image across the +/-180 degree boundary prevents any seams from being visible due to adjustments such as large radius sharpening (local contrast enhancement).

Final colour adjustment is applied, both selective and global saturation. Any touch up (spots, shadows, or minor stitching errors) are then performed in Photoshop. I produce both a final TIFF and a JPG that is in sRGB for export to the web.

Final image cropped back to 360×180 equirectangular. This is a different version from the panorama at the beginning of the post, I have brightened this one more.

Footnotes

[1] Instead of using the same exposure value for all source frames, you can expose each shot optimally. For example, a scene may have 20 stops of contrast between one direction and the opposite, e.g. sun and shadow. The traditional method would be to use manual exposure and bracket, e.g. -6, -3, 0, +3, +6EV and use the camera DR to capture the ends of the contrast range. The +6EV shot would cover the shadow and the +6EV shot would cover the highlight. But this method is wasteful since usually the contrast in a single shot is less than the full bracket range. Often only a single shot in that direction is required, or else a second bracketed shot will cover the remaining fraction of high contrast cases. Instead of 30 shots (4+1+1 shoot pattern times 5 bracketed shots), it is usually possible to only use 7 or 8 shots in total. The final result is as good as the fully bracketed version but with a considerable reduction in shooting time, this can be significant in low light conditions but can also be a major factor in situations where there are moving objects and/or changing lighting conditions.

[2] Picture Windows Pro 7 is now free. A newer version has been developed by version 7 is still a very useful image editing program. The paradigm is different to that of Photoshop so at first glance it may look to be fairly crude. But it is small, quick, and easy to use for many routine image adjustment tasks.

[3] I have no commercial relationship with any companies or their products mentioned in this post, other than being a satisfied customer of some of them.