ISIS Application Documentation
deltack  Standard View  TOC  Home 
Update camera pointing for a single image
Description
Categories
Groups
History
deltack can be used to correct most instances of problems with camera attitude. It adjusts camera orientation in the labels of a single Isis cube (resection). In order for deltack to work properly, the input cube must have been initialized with spiceinit using ATTACH="YES".
Like jigsaw, deltack works on both framing cameras and line scanners using the BUNDLE method. The user must supply a latitude/longitude for at least one sample/line coordinate in the image. Angles 1 and 2 of the camera orientation stored in the cube labels will be adjusted to align the coordinate with the entered latitude/longitude. To solve for all three camera angles, select the TWIST option. A second coordinate point and desired latitude/longitude must be entered if the TWIST option is used. deltack will adjust the camera orientation to align both points with their corresponding latitudes/longitudes with minimal residuals in sample and line.
The camera pointing is updated using an iterative leastsquares bundle adjustment. The number of iterations (MAXIT)and tolerance (SIGMA0) for convergence are input parameters to deltack. Solving for two angles only is similar to a translation of the image in sample and line. Solving for the twist as well will result in both a translation and a rotation.
deltack creates a set of two output files for analyzing the results. BUNDLEOUT.TXT provides an overall summary of the resection. It lists the user input parameters selected and tables of statistics for both the image and the point(s). RESIDUALS.CSV provides a table of the measured image coordinates and the final sample, line, and overall residuals in both millimeters and pixels.
The DIRECT method can be applied to cameras/instruments that are not supported by jigsaw or the viewing geometry conditions are not supported in BUNDLE. The DIRECT method is particularly useful for the Cassini VIMS (and other (spot) spectrometer type instruments) and for cases where the geometry is partially or completely off the target body. The DIRECT method primarily differs from the BUNDLE method in that it computes a rotation matrix directly from the SAMP1/LINE1 to the LAT1/LON1 surface intercept vectors from the spacecraft position reference in the J2000 coordinate system. Essentially, these are the look direction vectors from those camera coordinates in J2000 which eliminates any peculiarities within the camera coordinate system. And, most importantly, it does not require all sample/line coordinates to map to valid geometric coordinates. It does not, however, support the TWIST option or the twopoint scenario as does the BUNDLE method.
This approach works in variable acquistion time instrument systems, such as line scan, pushbroom, pushframe and (spot) spectrometers (as well as framing camera instruments) because the rotation matrix is determined independent of spacecraft position. It also works for situations where the geometry is off the target body because the look vector is always properly set in the ISIS camera model even if it does not intersect the surface. Note, however, in the later case, the LAT1/LON1 position must intersect the target body to obtain a valid sample/line coordinate.
The DIRECT method was designed to correct the pointing for the Cassini VIMS spectrometer but it is designed to be generally applicable to all cameras supported in the ISIS system. The BUNDLE method does not work on the VIMS instrument and likely many other complex camera systems with peculiar geometric configurations, such as (spot) spectrometers. The recommended procedure to determine an update to VIMS pointing is to first determine the geometric coordinate of a commmon feature in a reference image, such as a Cassini ISS observation for example, where the same latitude/longitude coordinate maps to a line/sample in the VIMS image. The VIMS geometric coordinate is expected not match the feature in the ISS image but qview and/or campt must report a valid line/sample coordinate from the latitude/longitude coordinate. The next step is to choose the best sample/line coordinate in the VIMS image that best matches the feature in the ISS image. To correctly update the pointing in the VIMS image, provide the latitude/longitude coordinate from the ISS image in the LAT1/LON1 parameters and the line/sample coordinate of the feature in the VIMS image in the SAMP1/LINE1 parameters to deltack. You may make a copy of the original image prior to running deltack if desired.
A similar procedure to the one described for VIMS will also work to update the pointing of an image where the SPICE ephemeris data does not provide a valid latitude/longitude on the target body. The distinction is that the SAMP1/LINE1 coordinate need not intersect the body. Indeed, this is a common problem encountered typically with older data sets and generally with flyby images where the target is partially or fully in the field of view of the camera. There is an alternative technique for flyby images of this type that does not require a second reference image. The case where this technique is most effective is typically used for framing cameras where the center of the target body is in view and there is at least 1 pixel in the image that maps to the surface where geometric data can be computed. Using campt, provide the sample/line coordinate of any valid geometric point in the image  it does not have to visibly intersect the target body  any sample/line coordinate will suffice. campt reports the subspacecraft latitude/longitude coordinate for every valid geometric coordinate  it will always be the same coordinate for framing cameras. If the full disk of the target body is viewable and the image is relative free of noise/artifacts, the center program computes the centroid sample/line coordinate of the target body. If this condition is not met, use qview to manually approximate the center pixel coordinate of the body. Provide the centroid sample/line in the SAMP1/LINE1 coordinate and the SubSpacecraftLatitude/SubSpacecraftLongitude values computed by campt in the LAT1/LON1 parameter to deltack.
Name  Description 

FROM  Input camera cube 
Name  Description 

METHOD  Specify the method to use to compute the pointing adjustment 
Name  Description 

SIGMA0  Standard deviation of unit weight 
MAXITS  Iterations 
TWIST  Solve for camera twist 
Name  Description 

SAMP1  Sample coordinate, point #1 
LINE1  Line coordinate, point #1 
LAT1  Latitude, point #1 
LON1  Longitude, point #1 
RAD1  Radius, point #1 
SAMP2  Sample coordinate, point #2 
LINE2  Line coordinate, point #2 
LAT2  Latitude, point #2 
LON2  Longitude, point #2 
RAD2  Radius, point #2 
The file specification for the input cube. The cube will have its camera pointing updated.
Type  cube 

File Mode  input 
Filter  *.cub 
There are two types of methods that can be used to compute the pointing update: BUNDLE and DIRECT.
Type  string  

Default  BUNDLE  
Option List: 

Convergence is reached when the solution parameters change by less than Sigma0. Units: unitless.
Type  double 

Default  1.0e10 
Maximum number of iterations
Type  integer 

Default  10 
In addition to angle1 and angle2, if this parameter is set the program will solve for the camera twist. This requires input of a second fixed coordinate (SAMP2,LINE2) and (LAT2,LON2)
Type  boolean 

Default  False 
Inclusions 

The sample coordinate for fixed point #1 (LAT1,LON1). Units:: pixels
Type  double 

The line coordinate for fixed point #1 (LAT1,LON1). Units:: pixels
Type  double 

Desired planetocentric latitude at the image coordinate (SAMP1,LINE1). Units: degrees.
Type  double 

Minimum  90.0 (inclusive) 
Maximum  90.0 (inclusive) 
Desired east longitude at the image coordinate (SAMP1,LINE1). Units: degrees
Type  double 

Minimum  0.0 (inclusive) 
Maximum  360.0 (inclusive) 
Desired radius at the image coordinate (SAMP1,LINE1). It will be automatically computed using the shape model that was entered in the "spiceinit" application. Units: meters.
Type  double 

Internal Default  Computed 
Minimum  0.0 (exclusive) 
The sample coordinate for fixed point #2 (LAT2,LON2). Units: pixels.
Type  double 

Inclusions 

The line coordinate for fixed point #2 (LAT2,LON2). Units: pixels.
Type  double 

Inclusions 

Planetocentric latitude at the image coordinate (SAMP2,LINE2). Units: degrees.
Type  double 

Minimum  90.0 (inclusive) 
Maximum  90.0 (inclusive) 
Inclusions 

Desired east longitude at the image coordinate (SAMP2,LINE2). Units: degrees.
Type  double 

Minimum  0.0 (inclusive) 
Maximum  360.0 (inclusive) 
Inclusions 

Radius at the image coordinate (SAMP2,LINE2). It will be automatically computed using the shape model that was initialized in the "spiceinit" application. Units: meters.
Type  double 

Internal Default  Computed 
Minimum  0.0 (exclusive) 
Inclusions 

Jeff Anderson  20060906  Original version 
Tracie Sucharski  20070502  Added inclusion of TWIST to SAMP2,LINE2,LAT2,LON2,RAD2. Without this inclusion, the AML was requiring these parameters even if TWIST was false. 
Debbie A. Cook  20070712  Added pvl status report for a successful update. 
Steven Koechle  20071005  Added check to see if cube has existing polygon, if so delete it. 
Debbie A. Cook  20110606  Updated to current version of BundleAdjust class. 
Debbie A. Cook  20110607  Changed point type "Ground" to "Fixed". 
Debbie A. Cook  20110928  Updated documentation in response to Mantis issue #187. 
Brent A. Archinal  20110930  Updated documentation, mostly to indicate units. 
Debbie A. Cook  20111004  Added documentation for output files and removed creation of output csv tables because the tables are not useful for only one or two points. The information is already listed in bundleout.txt. 
Kimberly Oyama  20140328  Added check for history group in input cube. If it's there, add a new entry. If not, add a new history group. Added an app test. Fixes #1350. 
Jeannie Backer  20140723  Modified to create a bundle settings object for the bundle adjustment. 
Ian Humphrey and Makayla Shepherd  20150901  Changed code to accommodate changes in Sensor and Camera relationships. 
Jeannie Backer  20160422  Modified to use the FROM cube labels to set output control net's 'target' instead of the TargetName. Removed check for TargetName since this happens when the ControlNet target is set. References #3892 
Jeannie Backer  20160818  Removed deprecated parameter from call to BundleSettings::setSolveOptions. References #4162. 
Kris Becker  20170801  Added new DIRECT method to update the pointing for instrument with special conditions. The DIRECT method is intended for use with instrument camera models that do not work in jigsaw (more specifically, BundleAdjust) such as Cassini VIMS. Added the METHOD parameter to allow user to select which method to apply. The default is METHOD=BUNDLE which chooses preexisting behavor. Updated documentation to reflect these new changes. Fixes #4868. 
Ken Edmundson  20180523  Modifed call to bundleAdjustment>solveCholeskyBR() to return a raw pointer to a BundleSolutionInfo object. Am also deleting this pointer because jigsaw.cpp takes ownership from BundleAdjust. 