Converting an equirectangular image into another equirectangular image, and other projections
Includes Mollweide, Tobler, Hammer, Aitoff, Wagner, Eckert IV, Bottomley, Sinusoidal, Werner, Bonne projectionsWritten by Paul Bourke
June 2017, updated September 2020
The source code implementing the projections below is only available on request for a small fee. It includes a demo application and an invitation to convert an image of your choice to verify the code does what you seek. For more information please contact the author.
The following describes a utility to convert an equirectangular image into another equirectangular image. Why you might ask would one want to do that? There are at least 3 possible reasons.
The usage string for the utility, called sphere2sphere, is given below. It employs a straightforward super-sampling antialiasing to avoid the usual effects that can arise from discrete sampling. It functions internally by considering each pixel (and subpixels) in the output image and finding the best estimate of the new pixel value in the input image. As such the performance is related to the size of the output image and supersampling level, it does not depend on the size of the input image except for the image reading time.Usage string
Usage: sphere2sphere [options] sphericalimage Options -w n output image width, default = input image width -h n output image height, default = half image width -x n tilt angle (degrees), default: 0 -y n roll angle (degrees), default: 0 -z n pan angle (degrees), default: 0 -a n antialiasing level, default = 2 -cp x y center on specified pixel, default: disabled -l2 pa1 pa2 pb1 pb2 straighten to specified pair of lines, default: disabled -c clip to bounds, default: disabled -eqi create the Equirectangular projection, default = on -ham create the Hammer projection, default = off -mol create the Mollweide projection, default = off -tob create the Tobler projection, default = off -bot create the Bottomley projection, default = off -sin create the Sinusoidal projection, default = off -bon create the Bonne projection, default = off -wer create the Werner projection, default = off -ait create the Aitoff projection, default = off -wag create the Wagner projection, default = off -eiv create the Eckert IV projection, default = off -f s output file name, default: derived from input file name
Critical in any such process is the order in which the rotation operations are performed, transforming in the order of roll-tilt-pan will not in general give the same results than if the rotations were performed in a different sequence. This will become clear later in the example using a Ricoh 360 camera. When specifying the rotation on the command line, because the image mapping is performed in reverse (output to input) the rotations are applied in reverse order. So for example
sphere2sphere -x 20 -z 30 -y 40 imagename.jpg
will perform the rotations in the order roll (-y), followed by a pan (-x), and lastly tilting (-x). The coordinate axis has z pointing up, y pointing forward and x to the right, a right handed coordinate system.Example
The following image is captured using a Ricoh 360 camera "randomly" orientated.
In general if the rotations involve more than a single axis, for example a tilt which would cause the horizon to be curved, finding the correction angles would be very difficult. In this case the exif data stored in the image by this particular camera can be used to immediately level it. There are many ways of possibly extracting this information, one method is to use a tool such as "exiftool", this gives the following.
>exiftool boathouse.jpg | grep Pose Pose Heading Degrees : 60 Pose Pitch Degrees : -20 Pose Roll Degrees : -5
Running sphere2sphere as follows
sphere2sphere -z 60 -x -20 -y -5 boathouse.jpg
gives the following. Note that at the time of writing the axes and meaning of positive and negative angles has been set to correspond to the conventions used by this camera, others may vary.
A simpler example of reorientating an existing level equirectangular by rotation about up vector. Noting of course that this only applies to the presentation as a normal image, or perhaps as the initial view direction for the normal interactive viewing of such images.
Rotating by -60 degrees aligns the equirectangular image to the wool packing machine (yellow) and places the doors symmetrically about the center.
sphere2sphere -z -60 shearing.jpg
The Samsung dual fisheye 360 camera also stores the pitch and roll angles as exif data in the jpeg image. Note they don't bother with the "heading" since in reality with these image there is no "front". The axes and rotation angles are different to the Ricoh but readily supported by this utility.
>exiftool samsung.JPG | grep "Angle" Pitch Angle : 29.8 Roll Angle : -141.3
Credited to Ernst Hammer circa 1882. Boundary is 2:1 ellipse. Equal-area.
Attributed to Karl Brandan Mollweide, circa 1805. Equal area and meridians are ellipses. Also known variously as elliptical, Babinet or homolographic projections.
Also known as Tobler hyperelliptical, credited to Waldo Tobler circa 1973. Equal area.
Also known as Sanson–Flamsteed or Mercator equal-area, first references circa 1600. Both equal-area and equidistant. Meridians are sinusoids, parallels are equally spaced and distances along parallels are conserved. Very similar in concept and distortion to the Quartic authalic projection.
Credited to Henry Bottomley circa 2003. Equal-area. Parallels are elliptical arcs. Exact shape controlled by a reference latitude.
Credited to Bernardus Sylvanus circa 1510. Equal-area. Parallels are equally spaced concentric circular arcs and standard lines. Exact shape controlled by a reference latitude.
Credited to Johannes Stabius circa 1500. Parallels are equally spaced concentric circular arcs. Equal-area and equidistant.
Credited to David Aitoff curca 1890.
Credited to K. H. Wagner (first names unknown) circa 1932. Identical to the Kavrayskiy VII projection except for a vertical scaling factor of 1.5.
Credited to Max Eckert-Greifendorff circa 1906. Equal area. Outer meridians are semicircles, other meridians are semiellipses.