ISIS Application Documentation
jigsaw | Printer Friendly View | TOC | Home |
Improves camera pointing and a whole lot more!
Overview | Parameters | Example 1 | Example 2 | Example 3 | Example 4 |
DescriptionThe jigsaw application performs a bundle adjustment on a group of overlapping Isis, level 1, cubes from framing and/or line-scan cameras. The adjustment simultaneously defines the selected image geometry information (camera pointing, spacecraft position) and control point coordinates (x,y,z or lat,lon,radius) to reduce boundary mismatches in mosaics of the images. This functionality is demonstrated below in a zoomed-in area of a mosaic of a pair of overlapping Messenger images. In the before jigsaw mosaic on the left (uncontrolled), the features on the edges of the images do not match. In the after jigsaw mosaic on the right (controlled), the crater edges meet correctly and the seam between the two images is no longer visible. ![]() ![]() The jigsaw application assumes spiceinit has been run on the input cubes so that SPICE is included in the Isis cube labels in the Kernels group. In order to run the program, the user must provide a list of input cubes, an input control net, the name of an output control net, and the adjustment parameters. jigsaw outputs a new control net that includes the initial state of the points in the network and their final state after the adjustment. The initial states of the points are tagged as a priori in the control net, and their final states are tagged as adjusted. The measured sample/line positions associated with the control points in the net are not changed. SPICE in the cube labels is updated at the end of the adjustment only if the bundle converges and the UPDATE parameter is selected. Optional output files can be selected to provide more information for analyzing the results. BUNDLEOUT_TXT provides an overall summary of the bundle adjustment. It lists the user input parameters selected and tables of statistics for both the images and the points. The image statistics can also be written to a separate CSV file and likewise for the point statistics with the OUTPUT_CSV option selected. RESIDUALS_CSV provides a table of the measured image coordinates and the final sample, line, and overall residuals in both millimeters and pixels. The functional model for the bundle adjustment is the collinearity condition. It stipulates that the camera perspective center, a ground point, and its associated image point measurement be collinear. The diagram below demonstrates the collinear condition in a bundle adjustment. The vectors formed by connecting each object space point (target surface x,y,z) and its corresponding image space points (sample,line) form a bundle of light rays. ![]() Kraus, Karl., 1993. Photogrammetry Vol. I., Fundamentals and Standard Processes, Der. Dümmler Verlag, Bonn, Germany, ISBN 3-427-78684-6, 397 pages. Relevant DocumentationFor information on what the original jigsaw code was based on checkout Rand Notebook Known IssuesRunning jigsaw with a control net containing JigsawRejected flags may result in bundle failure Solving for the target body radii (triaxial or mean) is NOT possible and likely increases error in the solve. CategoriesRelated Objects and DocumentsApplicationsHistory
|
U.S. Department of the Interior | U.S. Geological Survey ISIS | Privacy & Disclaimers | Astrogeology Research Program To contact us, please post comments and questions on the USGS Astrogeology Discussion Board To report a bug, or suggest a feature go to: ISIS Github File Modified: 02/21/2025 21:48:36 |
Parameter GroupsFiles
Solve Options
Maximum Likelihood Estimation
Convergence Criteria
Camera Pointing Options
Spacecraft Options
Community Sensor Model Options
Target Body
Control Point Parameters
Parameter Uncertainties
Output Options
|
U.S. Department of the Interior | U.S. Geological Survey ISIS | Privacy & Disclaimers | Astrogeology Research Program To contact us, please post comments and questions on the USGS Astrogeology Discussion Board To report a bug, or suggest a feature go to: ISIS Github File Modified: 02/21/2025 21:48:36 |
This file contains a list of all cubes in the control network
Type | filename |
---|---|
File Mode | input |
Filter | *.txt *.lis |
This file contains a list of all cubes whose orientation and position will be held in the adjustment. These images will still be included in the solution, but their camera orientation and spacecraft position will be constrained to keep the values from changing. This is an optional parameter and the default is to not hold any of the images. Note that held images must not overlap each other to work properly.
Type | filename |
---|---|
File Mode | input |
Internal Default | none |
Filter | *.txt *.lis |
This file is a control network generated from programs such as autoseed or qnet. It contains the control points and associated measures.
Type | filename |
---|---|
File Mode | input |
Filter | *.net |
This output file contains the updated control network with the final coordinates of the control points and residuals for each measurement.
Type | filename |
---|---|
File Mode | output |
Filter | *.net |
This file contains the Camera/Spacecraft parameters to use when processing images from different sensors. This file should be in PVL format. It should contain an object called SensorParameters with one group per spacecraft/instrument combination. The SpacecraftName and InstrumentId keywords in the Instrument group of an image file are used to create the name of each group in the PVL file. The group pertaining to each spacecraft/instrument should contain the keyword/value pairs needed to process images taken with that sensor: CKDEGREE, CKSOLVEDEGREE, CAMSOLVE, TWIST, OVEREXISTING, SPKDEGREE, SPKSOLVEDEGREE, SPSOLVE, OVERHERMITE, SPACECRAFT_POSITION_SIGMA, SPACECRAFT_VELOCITY_SIGMA, SPACECRAFT_ACCELERATION_SIGMA, CAMERA_ANGLES_SIGMA, CAMERA_ANGULAR_VELOCITY_SIGMA, CAMERA_ANGULAR_ACCELERATION_SIGMA. If any of these keywords are missing, then their defaults will be used. There is an example template at $ISISROOT/appdata/templates/jigsaw/SensorParameters.pvl that can be used as a guide.
Type | filename |
---|---|
File Mode | input |
Exclusions |
|
Filter | *.pvl |
This option will solve for SPICE on all cubes with a matching observation number as though they were a single observation. For most missions, the default observation number is equivalent to the serial number of the cube, and a single cube is an observation. However, for the Lunar Orbiter mission, an image has a defined observation number that is a substring of its serial number. This feature allows the three subframes of a Lunar Orbiter High Resolution frame to be treated as a single observation when this option is used; otherwise, each subframe is adjusted independently.
Type | boolean |
---|---|
Default | No |
Select this option to solve for the local radius of each control point. If this button is not turned on, the radii of the points will not change from the cube's shape model.
Type | boolean |
---|---|
Default | No |
Inclusions |
|
When this option is selected, the application will update the labels of the individual cubes in the FROMLIST with the final values from the solution if the adjustment converges. The results are written to the SPICE blobs attached to the cube, overwriting the previous values. If this option is not selected, the cube files are not changed. All other output files are still created.
Type | boolean |
---|---|
Default | No |
Select this option to perform automatic outlier detection and rejection.
Type | boolean |
---|---|
Default | No |
Exclusions |
|
Inclusions |
|
Rejection multiplier
Type | double |
---|---|
Default | 3.0 |
Inclusions |
|
Select this option to compute the variance-covariance matrix of the parameters. The parameter uncertainties can be computed from this matrix.
Type | boolean |
---|---|
Default | No |
A maximum likelihood estimation model selection.
Type | string | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Default | NONE | ||||||||||||
Option List: |
|
The tweaking constant has different meanings depending on the model being used: Huber models: The point at which the transformation motion from L2 to L1 norms takes place. Recommended quantile: 0.5 Welsch model: Residuals whose absolute value is twice the tweaking constant are approaching negligible significance. Recommended quantile: 0.7 Chen model: Residuals whose absolute value is greater than the tweaking constant are totally ignored. Recommended quantile: > 0.9
Type | double |
---|---|
Default | 0.5 |
Minimum | 0 (exclusive) |
Maximum | 1 (exclusive) |
A maximum likelihood estimation model selection.
Type | string | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Default | NONE | ||||||||||||||||||
Option List: |
|
The tweaking constant has different meanings depending on the model being used: Huber models: The point at which the transformation motion from L2 to L1 norms takes place. Recommended quantile: 0.5 Welsch model: Residuals whose absolute value is twice the tweaking constant are approaching negligible significance. Recommended quantile: 0.7 Chen model: Residuals whose absolute value is greater than the tweaking constant are totally ignored. Recommended quantile: > 0.9
Type | double |
---|---|
Default | 0.5 |
Minimum | 0 (exclusive) |
Maximum | 1 (exclusive) |
A maximum likelihood estimation model selection.
Type | string | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Default | NONE | ||||||||||||||||||
Option List: |
|
The tweaking constant has different meanings depending on the model being used: Huber models: The point at which the transformation motion from L2 to L1 norms takes place. Recommended quantile: 0.5 Welsch model: Residuals whose absolute value is twice the tweaking constant are approaching negligible significance. Recommended quantile: 0.7 Chen model: Residuals whose absolute value is greater than the tweaking constant are totally ignored. Recommended quantile: > 0.9
Type | double |
---|---|
Default | 0.5 |
Minimum | 0 (exclusive) |
Maximum | 1 (exclusive) |
Converges on stabilization of Sigma0. Convergence occurs when the change in sigma0 between iterations is less than or equal to Sigma0.
Type | double |
---|---|
Default | 1.0e-10 |
Minimum | 0 (exclusive) |
Maximum number of times to iterate. The application stops iterating at MAXIT, or when convergence is reached.
Type | integer |
---|---|
Default | 50 |
Minimum | 1 (inclusive) |
The degree of the polynomial fit to the original camera angles and used to generate a priori camera angles for the first iteration.
Type | integer |
---|---|
Default | 2 |
Minimum | 0 (inclusive) |
The degree of the polynomial being fit to in the bundle adjust solution. This polynomial can be different from the one used to generate the a priori camera angles used in the first iteration. In the case of an instrument with a jitter problem, a higher degree polynomial fit to each of the camera angles might provide a better solution (smaller errors). For framing cameras, the application automatically sets degree to 0.
Type | integer |
---|---|
Default | 2 |
Minimum | 0 (inclusive) |
This parameter is used to specify which, if any, camera pointing parameters to include in the adjustment.
Type | string | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Default | ANGLES | ||||||||||||||||||
Option List: |
|
If this option is selected, the twist angle will be adjusted in the bundle adjustment solution.
Type | boolean |
---|---|
Default | Yes |
This option will fit a polynomial over the existing pointing data. This data is held constant in the adjustment, and the initial value for the each of the coefficients in the polynomials is 0. When this option is used, the current pointing is used as a priori in the adjustment.
Type | boolean |
---|---|
Default | No |
The degree of the polynomial fit to the original camera position and used to generate a priori camera positions for the first iteration.
Type | integer |
---|---|
Default | 2 |
Minimum | 0 (inclusive) |
The degree of the polynomial being fit to in the bundle adjust solution. This polynomial can be different from the one used to generate the a priori camera positions used in the first iteration. In the case of an instrument with a jitter problem, a higher degree polynomial fit for the camera position might provide a better solution (smaller errors). For framing cameras, the application automatically sets degree to 0.
Type | integer |
---|---|
Default | 2 |
Minimum | 0 (inclusive) |
This parameter is used to specify which, if any, spacecraft position parameters to include in the adjustment.
Type | string | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Default | NONE | ||||||||||||||||||
Option List: |
|
This option will fit a polynomial over the existing Hermite cubic spline used to interpolate the coordinates of the spacecraft position. The spline is held constant in the adjustment, and the initial value for the each of the coefficients in the polynomials is 0. When this option is used, the current positions are used as a priori in the adjustment.
Type | boolean |
---|---|
Default | No |
Specify one of the parameter sets from the CSM GeometricModel API to solve for. All parameters belonging to the specified set will be solved for.
Type | string | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Internal Default | none | ||||||||||||
Option List: |
|
||||||||||||
Exclusions |
|
Specify a parameter type from the CSM GeometricModel API to solve for. All parameters of the specified type will be solved for.
Type | string | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Option List: |
|
|||||||||||||||
Exclusions |
|
All CSM parameters in this list will be solved for. Trailing and leading whitespace will be stripped off. Use standard ISIS parameter array notation to specify multiple parameters.
Type | string |
---|---|
Exclusions |
|
Solve for target body parameters. The parameters, their a priori values, and uncertainties are input using a PVL file specified by TBPARAMETERS below. An example template PVL file is located at $ISISROOT/appdata/templates/jigsaw/TargetBodyParameters.pvl.
Type | boolean |
---|---|
Default | false |
Inclusions |
|
This file contains target body parameters to solve for in the bundle adjustment, their a priori values, and uncertainties. The file must be in PVL format. An example template PVL file is located at $ISISROOT/appdata/templates/jigsaw/TargetBodyParameters.pvl. Instructions for the PVL structure are given in the template.
Type | filename |
---|---|
File Mode | input |
Filter | *.pvl |
This parameter indicates which coordinate type will be used to present the control points in the bundle adjustment and bundle output.
Type | string | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
Default | LATITUDINAL | |||||||||
Option List: |
|
This parameter indicates which coordinate type will be used to present the control points in the bundle adjustment and bundle output.
Type | string | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
Default | LATITUDINAL | |||||||||
Option List: |
|
This optional value will be used as the global latitude uncertainty for all points. Units are meters.
Type | double |
---|---|
Internal Default | none |
Minimum | 0 (inclusive) |
This optional value will be used as the global longitude uncertainty for all points. Units are meters.
Type | double |
---|---|
Internal Default | none |
Minimum | 0 (inclusive) |
This value will be used as the global radius uncertainty for all points. Units are meters.
Type | double |
---|---|
Internal Default | none |
Minimum | 0 (inclusive) |
Inclusions |
|
This optional value will be used as the global uncertainty for all points. Units are meters.
Type | double |
---|---|
Internal Default | none |
Minimum | 0 (inclusive) |
This optional value will be used as the global uncertainty for all points. Units are meters.
Type | double |
---|---|
Internal Default | none |
Minimum | 0 (inclusive) |
This optional value will be used as the global uncertainty for all points. Units are meters.
Type | double |
---|---|
Internal Default | none |
Minimum | 0 (inclusive) |
This value will be used as the global uncertainty for spacecraft coordinates. Units are meters.
Type | double |
---|---|
Internal Default | none |
Minimum | 0 (inclusive) |
This value will be used as the global uncertainty for spacecraft velocity. Units are meters/second.
Type | double |
---|---|
Internal Default | none |
Minimum | 0 (inclusive) |
This value will be used as the global uncertainty for spacecraft acceleration. Units are meters/second/second.
Type | double |
---|---|
Internal Default | none |
Minimum | 0 (inclusive) |
This value will be used as the global uncertainty for camera angles. Units are decimal degrees.
Type | double |
---|---|
Internal Default | none |
Minimum | 0 (inclusive) |
This value will be used as the global uncertainty for camera angular velocity. Units are decimal degrees/second.
Type | double |
---|---|
Internal Default | none |
Minimum | 0 (inclusive) |
This value will be used as the global uncertainty for camera angular acceleration. Units are decimal degrees/second/second.
Type | double |
---|---|
Internal Default | none |
Minimum | 0 (inclusive) |
File prefix to prepend for the generated output files. Any prefix that is not a file path will have an underscore placed between the prefix and file name.
Type | string |
---|---|
Internal Default | none |
Selection of this parameter flags generation of the standard bundle output file
Type | boolean |
---|---|
Default | yes |
Selection of this parameter flags output of image data (in body-fixed coordinates) to a csv file.
Type | boolean |
---|---|
Default | yes |
Selection of this parameter flags output of point and image data (in body-fixed coordinates) to csv file.
Type | boolean |
---|---|
Default | yes |
Selection of this parameter flags output of image coordinate residuals to a csv file
Type | boolean |
---|---|
Default | yes |
Example 1Simple run of jigsaw with images from a linescanner DescriptionThis example runs jigsaw in a very simple way using four MRO CTX images. Only the required parameters are entered, with all other parameters left at their default settings. This bundle solution only solves for the camera orientation (see the CAMSOLVE and TWIST parameters). This command does not update the SPICE information attached to the four cubes. A possible use for this simple run would be to test a network to identify control points that are not well placed. Command Line
jigsaw
fromlist=ctx.lis cnet=hand_dense.net onet=hand_dense-jig.net
This command line only sets the three required parameters.
GUI ScreenshotData FileLinks open in a new window.
|
U.S. Department of the Interior | U.S. Geological Survey ISIS | Privacy & Disclaimers | Astrogeology Research Program To contact us, please post comments and questions on the USGS Astrogeology Discussion Board To report a bug, or suggest a feature go to: ISIS Github File Modified: 02/21/2025 21:48:36 |
Example 2Run of jigsaw parameterized for Kaguya Terrain Camera (TC) images and a relative control network covering the Apollo 15 landing site. DescriptionA relative network is a network that connects overlapping images with tie points but has no tie points connected to a ground source. Since there is no connection to ground in the network, this bundle will only solve for camera specific parameters. The bundle could still solve for other parameters and be correct relative to the camera position, but it would increase the complexity of the bundle. The proceeding two examples will include grounded networks, so we will wait to increase the complexity of the bundle until ground points are included. Additionally, in this example we are evaluating the solution and do not want to apply it to the images yet, therefore, update is set to ‘no’. This relative bundle turns on and parameterizes the camera twist and camera acceleration solve parameters. Camera twist is a flag that allows the bundle to solve for the camera's rotation around the bore sight axis and uses the same uncertainty estimation as the other two rotations. Setting the camera solve parameter to acceleration, however, does require uncertainties to be set for the angles (deg), angular velocity (deg/s), and angular accelerations (deg/s**2). These values were set with increasing constraint because of the increasing affect alterations of higher order parameters have on the bundle solution. The ‘overexisting’ flag tells the bundle solution to approximate the camera rotation with a zero polynomial function added to the existing rotation data (adding the polynomial over the existing data). Without the ‘overexisting’ flag, the bundle fits a polynomial to the existing rotations, throws out the existing data points, and uses the polynomial to calculate the approximate ephemerides when needed. This bundle also lowers the max iterations to 10 (from default 50). Lowering the max iterations does not affect the bundle solution. However, setting a lower iteration limit can serve as a flag if you expect your network to bundle quickly. Finally, the sigma0 convergence criteria was not changed from its default value, it was only explicitly stated in this call. Command Line
jigsaw
fromlist=cubes.lis cnet=relative_reg_jig4_edit.net onet=relative_reg_jig5.net update=no file_prefix=jig5 sigma0=1.0e-10 maxits=10
twist=yes camsolve=accelerations overexisting=yes camera_angles_sigma=.25 camera_angular_velocity_sigma=.1 camera_angular_acceleration_sigma=.01
|
U.S. Department of the Interior | U.S. Geological Survey ISIS | Privacy & Disclaimers | Astrogeology Research Program To contact us, please post comments and questions on the USGS Astrogeology Discussion Board To report a bug, or suggest a feature go to: ISIS Github File Modified: 02/21/2025 21:48:36 |
Example 3Run of jigsaw parameterized for Kaguya Terrain Camera (TC) images and an intermediate ground control network covering the Apollo 15 landing site. DescriptionThis example jigsaw bundle is run directly after adding ground control points to the previous relative network. With ground control points inserted into the bundle solution, we will expand the bundle solve parameters to attempt solving for point radius values and the position of the spacecraft. Ground points are weighted more heavily in the bundle than relative control points and adding parameters adds more complexity to the bundle solution. Therefore, it is common to create and refine a network with only relative points and add ground point in after the relative network (and its bundle solution) is of sufficient quality. The purpose of this bundle is to ensure the network bundle converges with the added ground points and solve parameters, before committing to updating the camera pointing on the images, so update is set to 'no'. In addition to the previous solve parameters, this bundle turns on the point radius and spacecraft position solve parameters. Applying the point radius solve parameter requires the point_radius_sigma to be set. This value is a representation the uncertainty (in meters) of the cameras apriori pointing corresponding to the correct elevation on the shape model; this value is not a hard constraint. Often this value can be set, and the appropriateness of the set value can be checked using the 'POINTS DETAIL' section of the bundleout.txt file output by jigsaw. If more than half of the radius total corrections exceed the provided sigma, the uncertainty may need to be increased. Applying the space craft position solve parameter requires an uncertainty estimation through spacecraft_position_sigma (again this value is not a hard constraint). The appropriateness of the provided sigma can be evaluated through the bundleout_images.csv X Correction, Y Correction, and Z Correction columns. The 'overhermite' flag allows an estimation the spacecraft position like the 'overexisting' flag estimates the camera pointing, with a zero-polynomial added over the existing data (for spacecraft position this is a cubic Hermite spline). These options require more memory but provide a solution more representative of small variations in the original ephemeris data. Command Line
jigsaw
fromlist=cubes_for_ground_update.lis cnet=grounded_relative_reg.net onet=grounded_rr_jig1.net update=no file_prefix=jig1rr sigma0=1.0e-10 maxits=10
twist=yes camsolve=accelerations overexisting=yes camera_angles_sigma=.25 camera_angular_velocity_sigma=.1 camera_angular_acceleration_sigma=.01
radius=yes point_radius_sigma=500 spsolve=positions overhermite=yes spacecraft_position_sigma=1000
Data FileLinks open in a new window.
|
U.S. Department of the Interior | U.S. Geological Survey ISIS | Privacy & Disclaimers | Astrogeology Research Program To contact us, please post comments and questions on the USGS Astrogeology Discussion Board To report a bug, or suggest a feature go to: ISIS Github File Modified: 02/21/2025 21:48:36 |
Example 4Run of jigsaw parameterized for Kaguya Terrain Camera (TC) images and a final ground control network covering Apollo 15 landing site. DescriptionThis last example is of a final jigsaw run of a grounded network. In this example all network adjustments are done, the bundle is converging, the resulting residuals are acceptable, and therefore we are ready to update the camera pointing on the cubes. During the final run we turn on the error propagation flag, this provides the variance-covariance matrix of the parameters, from which uncertainties can be computed. This is valuable if you plan to compute certainties for your update cubes camera pointing (or any kernels resulting from these updated camera pointings). If you want to double check the update was completed, see cathist or catlab (search for ‘Jigged’). Command Line
jigsaw
fromlist=cubes_for_ground_update.lis cnet=grounded_relative_reg.net onet=grounded_rr_jig1_ErrProp.net update=yes file_prefix=jig1rrEP sigma0=1.0e-10 maxits=10
twist=yes camsolve=accelerations overexisting=yes camera_angles_sigma=.25 camera_angular_velocity_sigma=.1 camera_angular_acceleration_sigma=.01
radius=yes point_radius_sigma=500 spsolve=positions overhermite=yes spacecraft_position_sigma=1000 errorpropagation=yes
Data FilesLinks open in a new window.
|
U.S. Department of the Interior | U.S. Geological Survey ISIS | Privacy & Disclaimers | Astrogeology Research Program To contact us, please post comments and questions on the USGS Astrogeology Discussion Board To report a bug, or suggest a feature go to: ISIS Github File Modified: 02/21/2025 21:48:36 |