PTOptimizer

From PanoTools.org Wiki

PTOptimizer was originally created by Helmut Dersch[*] as part of Panorama Tools[*], it is a simple wrapper program around control point optimization routines present in the pano12 library.

Source code for the original PTOptimizer was never released, however reconstruction was quite straightforward and a multi-platform version is now included with the pano12 library available at Sourceforge.

Example Script

The updated original example script with lots of comments is below. Copied from Jim Watters' page.

#############           Example Script                  ##########################
#                       to run PTOptimizer
#
#
# Only lines starting with 'p', 'v', 'i', or 'm' are read.
# So you can add comments and info as you like by using 
# other line starting characters.  
# Do not start a line with !, it is used by adjust plugin and scripts.
# the * character indicated the end of the script file.
# The script must contain:
# one 'p'- line describing the output image (eg Panorama)
# one 'i'-line for each input image
# one or several 'v'- lines listing the variables to be optimized.
# the 'm'-line is optional and allows you to specify modes for the optimization.
# one 'c'-line for each pair of control points

p-line options

# 'p'-line options
# w1000        width in pixels
# h600         height in pixels (default: width/2)
# f0            projection format,
#                  0 - rectilinear (for printing and viewing)
#                  1 - Cylindrical (for Printing and QTVR)
#                  2 - Equirectangular ( for Spherical panos), default
#                  3 - full-frame fisheye
# v360         horizontal field of view of panorama (default 360)
# nPICT        Panorama file format, one of:
#                  PICT          pict-file on macs, bmp-file on win (default)
#                  PSD           single layer Photoshop file, 48bits supported
#                  PNG           png-format, 48bits supported
#                  TIFF          tiff-format, 48bits supported
#                  PSD_mask      Photoshop file, one image per layer
#                                  + shape mask & feathered clip mask at overlap center
#                  PSD_nomask    Photoshop file, one image per layer,
#                  TIFF_mask     tiff-format, multi-file, one image per file, 48bit supported
#                                  alpha layer with feathered clip mask at overlap center
#                  TIFF_m        tiff-format, multi-file, one image per file, 48bit supported
#                                  alpha layer with non-feathered clip mask at image border
#                                  + shape mask & non-feathered clip mask at image border
#                  JPEG          Panoramic image in jpeg-format. Use with f1
#                                  for IBM Hotmedia panoramas.
#                  PAN           SmoothMove movie. Use only with f2.
#                  IVR           LivePicture IVR movie
#                                  cylindrical (format f1) or spherical (format f2)
#                  IVR_java      LivePicture Java Panorama,
#                                  cylindrical (format f1) or spherical (format f2)
#                  VRML          VRML background node, use only with f2 for panoramas, or
#                                  VRML-object for PTStereo
#                  QTVR          Apple QTVR-panomovie. Use only with f1
#                  3DMF          3DMF-object (PTStereo).
# n"QTVR w400 h300 c1"           additional viewer options in a quoted string together with format
#              the following options are recognized:
#                  w(width) and h(height) of viewer window (only QTVR on Macs)
#                  c(codec: 0-JPEG, 1-Cinepak, 2-Sorenson) (only QTVR on Macs)
#                  q(codec quality):
#                     0-high,1-normal,2-low    QTVR on Macs
#                     0-100(highest)           on other jpeg-formats (PAN, IVR, IVR_java, VRML)
#                  g  progressive jpeg (0-no, 1-yes) (PAN, IVR, IVR_java, VRML)
#                     Optimized JPEG (0-on(default), 2-disabled), (3-progressive with optimized disabled)
#                  p  initial pan angle ( QTVR on Macs, VRML, IVR)
#                  v  field of view (QTVR, VRML, IVR)
#                  Many more options can be set by editing the viewer scripts
# -buf         suppress buffer commands in the stitcher script generated by PTOptimizer.
#                  (buffer commands are now obsolete, -buf and +buf on i lines are now
#                  ignored when stitching) This option should be set if you wish
#                  to edit the final panoramic image, eg for the two PSD formats.
# a0.0 b1.0 c0.04  Options to create multiple images in PTInterpolate and PTMorpher.
#                      a denotes starting value,
#                      b end value
#                      c increment. 0 is left, 1 is right image.
#                      The above command interpolates/morphs two images and
#                      creates 25 intermediate frames.
# u10          width of feather for stitching all images. default:10
# k1           attempt color & brightness correction using image number as anchor
# b1           attempt brightness correction with no color change using image number as anchor
# d1           attempt color correction with no brightness change using image number as anchor
#                  Do not use more than one of k, d, b.This is new method of correcting


p w800 nPSD_mask -buf

i-lines

# The 'i' lines describe input images. One line per image is required
# unneeded paramiters for optimizing but needed for stitching can be 
# set here and the optimizer will automaticaly add them to the o lines
# ----------------
# f0           projection format,
#                               0 - rectilinear (normal lenses)
#                               1 - Panoramic (Scanning cameras like Noblex)
#                               2 - Circular fisheye
#                               3 - full-frame fisheye
#                               4 - PSphere (equirectangular)
#                               8 - Orthographic. This is only allowed in PTStereo and
#                                      for the first image. This indicates a map or ground plan.
# w600         width in pixels
# h1000        height in pixels
# v82          horizontal field of view of image (required, but ignored for f8)
# y0           initial yaw angle (required)
# p43          initial pitch angle (required)
# r0           initial roll angle (required)
# a,b,c        initial lens correction coefficients (defaults a0 b0 c0, optional)
#                  (see http://www.panotools.org/dersch/barrel/barrel.html)
# d,e          initial lens offset in pixels(defaults d0 e0, optional).
#                  Used to correct for offset from center of image
#                  d - horizontal offset,
#                  e - vertical offset
# g,t          initial lens shear.  Use to remove slight misalignment
#                  of the line scanner relative to the film transport
#                  g - horizontal shear
#                  t - vertical shear
# u10          (obsolete, globally used on p line) specify width of feather for stitching. default:10
# S100,600,100,800   Selection(l,r,t,b), Only pixels inside the rectangle will be used for conversion.
#                       Original image size is used for all image parameters
#                       (e.g. field-of-view) refer to the original image.
# C100,600,100,800   Crop(l,r,t,b), Only pixels inside the rectangle will be used for conversion.
#                       Cropped image size is used for all image parameters
#                       (e.g. field-of-view) refer to the cropped part of the image.
# m20          (obsolete, use S & C) ignore a frame 20 pixels wide. default: 0
# mx100        (obsolete, use S & C) crop to brightest rectangle with size 100x200;
# my200        (obsolete, use S & C) used only for circular fisheye images (f2)
# s0           (obsolete, ignored, always blend) specify placement of seam between buffer and image:
#                   0-middle of overlap('blend' ,default)
#                   1- at edge of image ('paste').
# o            (the small letter). Morph-to-fit using control points.
# k0           (obsolete, use p line correction still used with plugin)
#                  attempt color/brightness correction when merging image and buffer, one of:
#                  0 - no correction(default);
#                  1 - change image;
#                  2 - change buffer;
#                  3 - change both
#                  this feature does not work very well!
# X10          World coordinates of camera position, only used for PTStereo
# Y200         If the camera is aligned (yaw = pitch = roll = 0.0),
# Z-13.5       X is coordinate to the right, Y vertically up and
#              -Z is forward viewing direction.
# nName        Name of image (ignored by PTOptimizer used in PTStitcher)
#
#      Parameters in different images can be linked using '='
#      followed by the image number starting with 0.
#      Example 'v=0' sets horizontal field of view as in
#      image number 0. This feature works for the variables
#      v, a, b, c, (r, p, y with caution) d, e, g, and t


i f2 r0      p0    y0     v183    a0 b-0.1 c0  mx400 my400 
i f2 r-0.5   p1    y182   v=0     a0 b-0.1 c0  mx400 my400 

v-line options

# 'v'-line options:
# -----------------
# Please note: the 'v'-line must come after the the 'i'-lines.
# Optimization variables are listed together with the image number
# starting at 0. There can be several v-lines.
#
# y0           Optimize yaw in image 0
# p1           Optimize pitch in image 1
# r2           Optimize roll in image 2
# v0           Optimize field of view in image 0
# a2           Optimize lens correction parameter 'a' in image 2
#                  b and c can be equally optimized.
# X1           Optimize x-coordinate of image 1, only for PTStereo
# Y2           Optimize y-coordinate of image 2, only for PTStereo
# Z6           Optimize z-coordinate of image 6, only for PTStereo
#
#      If a image has a parameter linked to another image only
#      need to optimize the master.
v v0 r0 p0 r1 p1 y1

m-line options

# 'm'-line options
# ----------------
# Set mode for stitcher, not required
#
# g2.5         Set gamma value for internal computations (default 1.0)
#                  See <http://www.panotools.org/dersch/gamma/gamma.html>
# i2           Set interpolator, See <http://www.panotools.org/dersch/interpolator/interpolator.html>
#                one of:
#                   0 - poly3 (default)
#                   1 - spline16,
#                   2 - spline36,
#                   3 - sinc256,
#                   4 - spline64,
#                   5 - bilinear,
#                   6 - nearest neighbor,
#                   7 - sinc1024
#              \/ antialiasing filters \/ See <http://www.pano2qtvr.com/dll_patch/>
#                   8 - Box
#                   9 - Bartlett/Triangle
#                   10 - Hermite
#                   11 - Hanning
#                   12 - Hamming
#                   13 - Blackmann
#                   14 - Gaussian 1/sqrt(2)
#                   15 - Gaussian 1/2
#                   16 - Quadardic
#                   17 - Cubic
#                   18 - Catmull-Rom
#                   19 - Mitchell
#                   20 - Lanczos2
#                   21 - Lanczos3
#                   22 - Blackman/Bessel
#                   23 - Blackman/sinc
#
# p0           Create panorama after optimizing control points
#                  0 no(default), 1 yes
m g1.5 i6

c-lines

#
# 'c' lines
# ----------------
# Control point lines
# One line per point pair
# about one pair of points per image per variable being optimized.
# The more variables being optimized the more control points needed.
#
# n0           first image
# N1           second image
# x1066.5       first image x point position
# y844.333      first image y point position
# X239.52       second image x point position
# Y804.64       second image y point position
# t0           type of control point (optional)
#                  0 - normal (default)
#                  1 - optimize horizontally only
#                  2 - optimize vertically only
#                  3+ (all other numbers) - straight line



*
Every thing after * is ignored.