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.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.