Difference between revisions of "The General Panini Projection"

From PanoTools.org Wiki
Jump to: navigation, search
(Distortionless Wide-Angle Photos)
(Very Wide and Ultra-Wide Views from Panoramas)
 
(14 intermediate revisions by 2 users not shown)
Line 1: Line 1:
The general Panini projection is an adjustable projection, or more properly a parameterized family of projections, that can render convincing simulated perspectives on fields of view up to 150 degrees wide, or even wider in some cases.  It was first implemented in early 2009 in the panorama viewer, Panini, and in limited form in the panotools library.  This page describes the improved version that was added to the panotools library in January 2010.
+
The general Panini projection is {{Glossary|an adjustable projection that can render convincing simulated perspective views of scenes up to 150 degrees wide, or even wider in some cases|1}}.  It was first implemented in early 2009 in the panorama viewer, Panini, and in limited form in the panotools library.  This page describes the improved version that was added to the panotools library in January 2010, and to PTStitcherNG in February 2010.  
  
For best results the general Panini projection needs to be used interactively: you adjust the control parameters until your image looks just rightThe 'fast' preview window in the 2010 version of hugin works well for that most of the time but has a few problemsHowever, it is possible to get equally good results with the 'slow' preview window, and with experience, even with scripts for the command line tool, PTmender.
+
The Pannini projection is a cylindrical projection, so it keeps vertical straight lines straight and vertical.  Unlike other cylindrical projections, it keeps radial lines through image center straight as wellThose two kinds of straight lines are the most important perspective cues in many scenes, so a Pannini view often resembles a normal rectilinear perspectiveBut the horizontal field of view can be very wide, without the peripheral distortion (stretching) that is so noticeable when a rectilinear perspective is pushed too far.
  
== Appropriate Images ==
+
The general Panini projection is suitable for architectural subjects, especially interiors.  It works best for views with a single central vanishing point -- straight down a city street, or the aisle of a church, for example.  However it is good for oblique interior and street views too.  It can make nice city-scapes, but is not suitable for close-up exterior views of buildings, especially when looking toward a corner of the building.
The general Panini projection is suitable for subjects that have a lot of architectural content, especially interiors.  It works best for views with a single central vanishing point -- straight down a city street, or the aisle of a church, for example.  However it is good for oblique interior and street views too.  It is not suitable for close-up exterior views of buildings, especially when looking toward a corner of the building.
+
  
== Visual Effects ==
+
For best results the general Panini projection should be used interactively: you adjust the control parameters until the image looks just right.  The 'fast' preview window in the 2010 version of Hugin works well for that most of the time but has a few problems.  However, it is possible to get equally good results with the 'slow' preview window, and with experience, even with scripts for the command line tools, PTStitcherNG or PTmender.
 +
 
 +
== Geometrical Description ==
 
[[File:220x120deg-panini-grid.png|thumb|400px|Standard Panini projection, 10 degree intervals]]
 
[[File:220x120deg-panini-grid.png|thumb|400px|Standard Panini projection, 10 degree intervals]]
  
A Panini perspective seems to combine telephoto and wide angle views in one imageCompared to a rectilinear view of the same width, the center is magnified and depth seems flattened (telephoto effects)At the same time, the field of view can be very wide, without the peripheral distortion (stretching) that is so noticeable when a rectilinear perspective is pushed too farAnd somehow the view tends to look even wider than it actually is.
+
The basic Panini projection -- the cylindrical stereographic projection -- renders vertical, horizontal and radial straight lines as shown in the diagram at rightVerticals are straight, a prerequisite for any perspective view.  Radial lines through the view center are also straight. That creates a convincing perspective illusion when there is a vanishing point at or near view centerBut horizontal straight lines are curves, with the strongest curvature in the middle of the image. That makes many images seem to 'bulge' at top and bottom center.
  
The general Panini projection renders vertical straight lines as straight, a prerequisite for any perspective viewIts basic form also renders radial lines through the view center as straight. That creates a convincing perspective illusion when there is a vanishing point at or near view center.   
+
The general Panini adds two adjustable parameters to the basic projection.  One sets the horizontal angle compression, so the projection can vary smoothly from rectilinear to a highly condensed formThe other reduces the curvature of horizontal lines. This can make many central perspectives look more natural, and can also improve the perspective illusion when the vanishing point is off-center.  We call this a 'squeeze' parameter because early implementations actually compressed the middle of the image; current versions stretch the sides instead.  The adjustment is purely vertical so that verticals remain straight. There are actually separate squeeze parameters for the top and bottom halves of the image.
  
But it renders horizontal straight lines as curves, with the strongest curvature in the middle of the image. That makes many images seem to 'bulge' at top and bottom centerAdding a vertical adjustment, designed to reduce this curvature, can make many central perspectives look more natural and improve the perspective illusion when the vanishing point is off-centerWe call those adjustments 'squeezes' because early implementations actually compressed the middle of the imageCurrent versions stretch the sides instead.
+
There are two kinds of squeeze, 'hard' and 'soft'A hard squeeze can fully straighten horizontal lines, but only works on fields of view well under 180 degrees. A soft squeeze provides less complete straightening but works for wider fields of viewOf course nothing is free: reducing the curvature of horizontal lines comes at the cost of increasing the curvature of radial linesFortunately that curvature is strongest far from image center, and typically unnoticeable on fields of view of 130 degrees or less.  
  
There are two kinds of squeeze, 'hard' and 'soft'.  A hard squeeze can fully straighten horizontal lines, but only works on fields of view well under 180 degrees. A soft squeeze provides less complete straightening but works for wider fields of view.  Of course nothing is free: reducing the curvature of horizontal lines comes at the cost of increasing the curvature of radial lines, mainly in areas far from image center.  
+
For more detailed technical and historical information, visit http://vedutismo.net/Pannini/.
  
 
{{clr}}
 
{{clr}}
Line 32: Line 33:
 
[[image:TKS-Mmm-obliquev120-recti.png|thumb|right|250px|Rectilinear, hfov 120 deg.]]
 
[[image:TKS-Mmm-obliquev120-recti.png|thumb|right|250px|Rectilinear, hfov 120 deg.]]
 
[[image:TKS-Mmm-obliquev120-gP70_50_50.png|thumb|left|250px|Panini(70,50,50), hfov 120 deg.]]
 
[[image:TKS-Mmm-obliquev120-gP70_50_50.png|thumb|left|250px|Panini(70,50,50), hfov 120 deg.]]
One of the best uses of the general Panini projection is simulating rectilinear perspective, without peripheral distortion, on fields of view typical of wide angle to super-wide angle camera lenses, say in the range of 75 to 120 degrees.  A compression well under 100 is usually enough, plus a hard squeeze to straighten prominent transverse lines.  The appropriate squeeze strength depends on the inclination of those lines:  100% if they are horizontal, less as the slope increases.
+
One of the best uses of the general Panini projection is simulating rectilinear perspective, without peripheral distortion, on fields of view typical of wide angle to super-wide angle camera lenses, say in the range of 75 to 120 degrees.  A compression well under 100 is usually enough, plus a hard squeeze to straighten prominent transverse lines.  The appropriate squeeze strength depends on the inclination of those lines:  100% if they are horizontal, less as the slope increases
 +
 
 +
Compare the shapes of the rose window (and other features) in the mild Panini perspective at left and the true rectilinear one at right.
  
 
{{clr}}
 
{{clr}}
Line 41: Line 44:
 
Hugin with the general Panini projection is an excellent 'de-fishing' tool.  Load a fisheye photo, adjust pitch and roll angles to align the true vertical with the vertical axis of the view, then adjust the general Panini parameters for a pleasing perspective -- anything from rectilinear to highly compressed and squeezed.  Note that you can adjust pitch and roll by dragging in the fast preview window.
 
Hugin with the general Panini projection is an excellent 'de-fishing' tool.  Load a fisheye photo, adjust pitch and roll angles to align the true vertical with the vertical axis of the view, then adjust the general Panini parameters for a pleasing perspective -- anything from rectilinear to highly compressed and squeezed.  Note that you can adjust pitch and roll by dragging in the fast preview window.
  
If vertical lines look curved in the general Panini projection view, you should adjust the lens focal length or FOV until they are straight.  The same applies to horizontal lines when the squeeze parameter is set to +100%, or indeed to straight lines in the rectilinear projection, verticals in the cylindrical projections, etcThis curvature results when the panotools lens model does not match the actual projection function of your lens. Adjusting the fov provides a first order correction that is usually 'close enough for jazz'; but for even better results, you could set the lens fov and a,b,c distortion parameters to values that were optimized on a well-aligned spherical panorama made with the same lens.
+
If vertical lines look curved, you should adjust the lens focal length or FOV until they are straight.  Temporarily switching to the rectilinear projection may make it easier to do thisThe curvature results when the panotools lens model does not match the actual projection function of your lens. Adjusting the fov provides a first order correction that is usually 'close enough'; but for even better results, you could set the lens fov and a,b,c distortion parameters to values that were optimized on a well-aligned spherical panorama made with the same lens.
  
=== Ultra-Wide Views from Panoramas ===
+
{{clr}}
With a properly aligned panorama as the source image, the general Panini projection can be used like any other projection to render views in various directions.  However it is best for views where the line of sight is level, not tilted up or down.  You can use hugin's cropping feature to eliminate unwanted areas at the top or bottom, but to get a perfectly framed view it may be necessary to render oversize and crop later.
+
  
It is often possible to render a convincing view more than 180 degrees wide, if the subject has a strong central perspective.  Because of the 'basic bulge' it is best to limit the vertical FOV on ulta-wide viewsOnly a soft squeeze can be used here, as the hard squeeze has singularities (goes to infinity) at +/- 90 degrees.
+
=== Very Wide and Ultra-Wide Views from Panoramas ===
 +
 
 +
[[File:Pantheon-150x100-rect-panini.jpg|right|360px]]
 +
 
 +
With a panorama as the source image, the general Panini projection can be used like any other projection to render views in various directions.  However it is best for views where the line of sight is not tilted up or down.  It is important to align the vertical direction carefully in "roll" as well.  Both pitch and roll alignment can be done by dragging the image in Hugin's fast preview window.  To get a perfectly framed view, it may be necessary to render oversize and crop later.
 +
 
 +
The image at right compares rectilinear (top) and general Pannini (bottom) projections of a panoramic view 150 degrees wide by 100 degrees high in the Pantheon (Rome), a large, perfectly circular space.  The point of view here is well away from the middle of the room.  Notice how the Pannini perspective both magnifies the center, so that people in the middle look closer, and condenses the periphery, so that people near the edges have more natural shapes -- for example, the man taking a picture at far right.  A 50 percent "soft squeeze" has been applied at both top and bottom to improve the perspective of the floor and dome.
 +
 
 +
It is often possible to render a convincing view more than 180 degrees wide, if the subject has a strong central perspective.  The spectacular image of the main concourse at New York's Grand Central Station, below, is 220 degrees wide.  The slanted walls at the sides are actually the ends of a transverse wall that stands well behind the point of view.  This is a standard Pannini projection without any "squeeze".
 +
 
 +
{{clr}}
 +
 
 +
[[File:C Marchi-GrandCentral-adj.jpg|thumb|center|800px|Grand Central Terminal by Cristian Marchi; Panini projection, hFOV 220 degrees]]
  
 
== Software Versions ==
 
== Software Versions ==
Your panotools and hugin must have been built after 20 January 2010, from panotools source version SVN 1237 or later and hugin source version SVN 4920 or later.
+
Your libpano13 and hugin must have been built after 20 January 2010, from panotools source version SVN 1237 or later and hugin source version SVN 4920 or later.  You have to build pre-release versions, or download them from a test builder's site, as the first official 2010 release of Hugin does not include the general Panini projection.  You can get a self installing Win32 binary at http://tksharpless.net [click 'Panoramic Software', then double-click 'hugin-2010.1.0.4920.exe'.  Running this creates a new self contained installation that won't interfere with any existing installation.]
 +
 
 +
In the first versions of hugin that support the general Panini projection, the 'fast' preview window sometimes has trouble displaying general Panini views, usually parts go black, occasionally it shows an apparently complete but incorrect view. The 'slow' preview window shows the true view in all cases; use it if the fast preview display seems garbled or unreliable.
  
In the first versions of hugin that support the general Panini projection, the 'fast' preview window has trouble displaying 'squeezed' general Panini views when stitching a panorama from mulitple images, but works correctly when reformatting a single imageThe 'slow' preview window shows the true view in all cases; use it if the fast preview display seems garbled.
+
Helmut Dersch's PTStitcherNG implements the general Panini projection just like libpano13It only runs from scripts and provides no interactive preview; however it is so fast that an iterative adjustment of the script parameters is feasible.
  
-- T. K. Sharpless, 18 January 2010 - 20 January 2010 --
+
-- T. K. Sharpless, 18 January 2010 - 21 June 2010 --

Latest revision as of 01:18, 11 July 2010

The general Panini projection is an adjustable projection that can render convincing simulated perspective views of scenes up to 150 degrees wide, or even wider in some cases. It was first implemented in early 2009 in the panorama viewer, Panini, and in limited form in the panotools library. This page describes the improved version that was added to the panotools library in January 2010, and to PTStitcherNG in February 2010.

The Pannini projection is a cylindrical projection, so it keeps vertical straight lines straight and vertical. Unlike other cylindrical projections, it keeps radial lines through image center straight as well. Those two kinds of straight lines are the most important perspective cues in many scenes, so a Pannini view often resembles a normal rectilinear perspective. But the horizontal field of view can be very wide, without the peripheral distortion (stretching) that is so noticeable when a rectilinear perspective is pushed too far.

The general Panini projection is suitable for architectural subjects, especially interiors. It works best for views with a single central vanishing point -- straight down a city street, or the aisle of a church, for example. However it is good for oblique interior and street views too. It can make nice city-scapes, but is not suitable for close-up exterior views of buildings, especially when looking toward a corner of the building.

For best results the general Panini projection should be used interactively: you adjust the control parameters until the image looks just right. The 'fast' preview window in the 2010 version of Hugin works well for that most of the time but has a few problems. However, it is possible to get equally good results with the 'slow' preview window, and with experience, even with scripts for the command line tools, PTStitcherNG or PTmender.

Geometrical Description

Standard Panini projection, 10 degree intervals

The basic Panini projection -- the cylindrical stereographic projection -- renders vertical, horizontal and radial straight lines as shown in the diagram at right. Verticals are straight, a prerequisite for any perspective view. Radial lines through the view center are also straight. That creates a convincing perspective illusion when there is a vanishing point at or near view center. But horizontal straight lines are curves, with the strongest curvature in the middle of the image. That makes many images seem to 'bulge' at top and bottom center.

The general Panini adds two adjustable parameters to the basic projection. One sets the horizontal angle compression, so the projection can vary smoothly from rectilinear to a highly condensed form. The other reduces the curvature of horizontal lines. This can make many central perspectives look more natural, and can also improve the perspective illusion when the vanishing point is off-center. We call this a 'squeeze' parameter because early implementations actually compressed the middle of the image; current versions stretch the sides instead. The adjustment is purely vertical so that verticals remain straight. There are actually separate squeeze parameters for the top and bottom halves of the image.

There are two kinds of squeeze, 'hard' and 'soft'. A hard squeeze can fully straighten horizontal lines, but only works on fields of view well under 180 degrees. A soft squeeze provides less complete straightening but works for wider fields of view. Of course nothing is free: reducing the curvature of horizontal lines comes at the cost of increasing the curvature of radial lines. Fortunately that curvature is strongest far from image center, and typically unnoticeable on fields of view of 130 degrees or less.

For more detailed technical and historical information, visit http://vedutismo.net/Pannini/.


Parameters

The general Panini projection is controlled by three parameters.

The main parameter, called compression and labelled 'Cmpr' in the hugin previews, has a range of 0 to 150 (you can think of that as percent). It adjusts the form of the projection between the completely uncompressed rectilinear projection (Cmpr = 0) and the maximally compressed cylindrical orthographic projection (Cmpr = 150) with the standard Pannini (cylindrical stereographic) projection at Cmpr = 100.

The maximum horizontal field of view varies with compression, from 160 degrees at Cmpr = 0 to 320 degrees at Cmpr = 100, then back to 180 degrees at Cmpr = 150. Hugin's FOV sliders automatically respect these limits. If you enter an infeasible hfov value in a script (for PTmender, for example) the actual field of view will be the largest feasible value.

Two secondary parameters, labeled 'Tops' and 'Bots', control vertical squeeze adjustments applied to the top and bottom halves of the image, for the purpose of reducing the curvature of horizontal lines. These have a range of -100 to 100. There is no squeeze when the parameter is zero. Positive values invoke a 'hard' squeeze, that can exactly straighten horizontal lines, but only over a limited range of about 160 degrees. Negative values invoke a 'soft' squeeze that works for wider fields of view but cannot eliminate all curvature.

Applications

Distortionless Wide-Angle Photos

Rectilinear, hfov 120 deg.
Panini(70,50,50), hfov 120 deg.

One of the best uses of the general Panini projection is simulating rectilinear perspective, without peripheral distortion, on fields of view typical of wide angle to super-wide angle camera lenses, say in the range of 75 to 120 degrees. A compression well under 100 is usually enough, plus a hard squeeze to straighten prominent transverse lines. The appropriate squeeze strength depends on the inclination of those lines: 100% if they are horizontal, less as the slope increases.

Compare the shapes of the rose window (and other features) in the mild Panini perspective at left and the true rectilinear one at right.


Perspective Views from Fish-Eye Photos

Panini view
Fisheye snapshot

Hugin with the general Panini projection is an excellent 'de-fishing' tool. Load a fisheye photo, adjust pitch and roll angles to align the true vertical with the vertical axis of the view, then adjust the general Panini parameters for a pleasing perspective -- anything from rectilinear to highly compressed and squeezed. Note that you can adjust pitch and roll by dragging in the fast preview window.

If vertical lines look curved, you should adjust the lens focal length or FOV until they are straight. Temporarily switching to the rectilinear projection may make it easier to do this. The curvature results when the panotools lens model does not match the actual projection function of your lens. Adjusting the fov provides a first order correction that is usually 'close enough'; but for even better results, you could set the lens fov and a,b,c distortion parameters to values that were optimized on a well-aligned spherical panorama made with the same lens.


Very Wide and Ultra-Wide Views from Panoramas

Pantheon-150x100-rect-panini.jpg

With a panorama as the source image, the general Panini projection can be used like any other projection to render views in various directions. However it is best for views where the line of sight is not tilted up or down. It is important to align the vertical direction carefully in "roll" as well. Both pitch and roll alignment can be done by dragging the image in Hugin's fast preview window. To get a perfectly framed view, it may be necessary to render oversize and crop later.

The image at right compares rectilinear (top) and general Pannini (bottom) projections of a panoramic view 150 degrees wide by 100 degrees high in the Pantheon (Rome), a large, perfectly circular space. The point of view here is well away from the middle of the room. Notice how the Pannini perspective both magnifies the center, so that people in the middle look closer, and condenses the periphery, so that people near the edges have more natural shapes -- for example, the man taking a picture at far right. A 50 percent "soft squeeze" has been applied at both top and bottom to improve the perspective of the floor and dome.

It is often possible to render a convincing view more than 180 degrees wide, if the subject has a strong central perspective. The spectacular image of the main concourse at New York's Grand Central Station, below, is 220 degrees wide. The slanted walls at the sides are actually the ends of a transverse wall that stands well behind the point of view. This is a standard Pannini projection without any "squeeze".


Grand Central Terminal by Cristian Marchi; Panini projection, hFOV 220 degrees

Software Versions

Your libpano13 and hugin must have been built after 20 January 2010, from panotools source version SVN 1237 or later and hugin source version SVN 4920 or later. You have to build pre-release versions, or download them from a test builder's site, as the first official 2010 release of Hugin does not include the general Panini projection. You can get a self installing Win32 binary at http://tksharpless.net [click 'Panoramic Software', then double-click 'hugin-2010.1.0.4920.exe'. Running this creates a new self contained installation that won't interfere with any existing installation.]

In the first versions of hugin that support the general Panini projection, the 'fast' preview window sometimes has trouble displaying general Panini views, usually parts go black, occasionally it shows an apparently complete but incorrect view. The 'slow' preview window shows the true view in all cases; use it if the fast preview display seems garbled or unreliable.

Helmut Dersch's PTStitcherNG implements the general Panini projection just like libpano13. It only runs from scripts and provides no interactive preview; however it is so fast that an iterative adjustment of the script parameters is feasible.

-- T. K. Sharpless, 18 January 2010 - 21 June 2010 --