# PTOptimizer

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.fh-furtwangen.de/~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.fh-furtwangen.de/~dersch/gamma/gamma.html>
    # i2           Set interpolator, See <http://www.fh-furtwangen.de/~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.

Retrieved from "http://wiki.panotools.org/PTOptimizer"