Hi everybody,

Some people have recently mentioned that it would be useful to implement
new input projections in libpano/hugin to support a wider variety of
fisheye lenses (i.e. samyang stereographic lenses, and potentially fine
tune projections to fisheye lenses).

I spent some time this weekend looking at the code in libpano trying to
understand how this could be done.

In a nutshell, this is the process used to map a photo (we do it backwards):

    // Building the conversion stack
    //
    // 1- Convert  from panorama projection to equirectangular
    // 2- Rotate horizontally
    // 3- Convert to spherical from equirectangular
    // 4- Apply perspective correction (pitch and roll) in spherical coordinates
    // 5- Convert to image format (rectilinear, pano, equirectangular)
    // 6- Scale output image
    // 7- Do radial correction
    // 8- Do tilt
    // 9- Do vertical shift
    // 10- Do horizontal shift
    // 11- Do shear

Spherical coordinates are equidistant ones (think equidistant
fisheye). It is in spherical coordinates that the optimization step
happens.

To support a new input projection we need a function that maps from
spherical coordinates to the output projection (and its inverse). The
current candidates to be added as input projections are:

equisolid,
stereographic,
mirror, and
orthographic

There was some work towards supporting them, but it was incomplete (it
does not work in current version of panotools). I have gotten this far
(work not committed yet):

These two are implemented:

* Orthographic: Not tested. seems to work.

* Stereographic: Not tested, seems to work. 

This one is buggy:

* equisolid NOT WORKING: equisolid_sphere_tp, and sphere_tp_equisolid
   are implemented but they don't work. The composition of the forward
   and the inverse is not returning the original points.

* Mirror: NOT IMPLEMENTED.

In theory, we could implement a projection that fits the lens (see
http://michel.thoby.free.fr/Blur_Panorama/Nikkor10-5mm_or_Sigma8mm/Sigma_or_Nikkor/Comparison_Short_Version_Eng.html)
Given that there are not that many fisheye lenses, we could have
mappings that approximate the lens as close as possible.

But I am stumped. My geometry sucks. My main problem is that I don't
understand how the equirectangular coordinates are converted into
equidistant ones, and vice-versa. Basically, I need to learn how the
equidistant projection equations (see
http://mathworld.wolfram.com/AzimuthalEquidistantProjection.html) are
derived.

If anybody can point me to a resource, or explain it here, I'll
appreciate it.

Other things that need to be done:

In libpano:

* Implement mirror transformation. There is already a
  mirror_erect. We need its inverse. 

* Determine what is wrong with equisolid.

* Test orthographic and stereographic input projections.

In Hugin:

* Expose the projections in the user interface:

    IMAGE_FORMAT_EQUIRECTANGULAR = 4,
    IMAGE_FORMAT_MIRROR = 7,
    IMAGE_FORMAT_FISHEYE_ORTHOGRAPHIC = 8,
    IMAGE_FORMAT_FISHEYE_STEREOGRAPHIC = 10,
    IMAGE_FORMAT_FISHEYE_EQUISOLID = 21,

I am sure that there will be some issues with respect to Full-frame vs
circular fisheyes for these projections. But we can deal with them as
the need arises.

--dmg

-- 
--
Daniel M. German                  
http://turingmachine.org/
http://silvernegative.com/
dmg (at) uvic (dot) ca
replace (at) with @ and (dot) with .

-- 
You received this message because you are subscribed to the Google Groups 
"hugin and other free panoramic software" group.
A list of frequently asked questions is available at: 
http://wiki.panotools.org/Hugin_FAQ
To post to this group, send email to hugin-ptx@googlegroups.com
To unsubscribe from this group, send email to 
hugin-ptx+unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/hugin-ptx

To unsubscribe from this group, send email to 
hugin-ptx+unsubscribegooglegroups.com or reply to this email with the words 
"REMOVE ME" as the subject.

Reply via email to