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.