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".
BUNDLE Method
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 least-squares 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.
DIRECT Method
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
two-point 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 sub-spacecraft 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.
Jeff Anderson | 2006-09-06 |
Original version
|
Tracie Sucharski | 2007-05-02 |
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 | 2007-07-12 |
Added pvl status report for a successful update.
|
Steven Koechle | 2007-10-05 |
Added check to see if cube has existing polygon, if so delete it.
|
Debbie A. Cook | 2011-06-06 |
Updated to current version of BundleAdjust class.
|
Debbie A. Cook | 2011-06-07 |
Changed point type "Ground" to "Fixed".
|
Debbie A. Cook | 2011-09-28 |
Updated documentation in response to Mantis issue #187.
|
Brent A. Archinal | 2011-09-30 |
Updated documentation, mostly to indicate units.
|
Debbie A. Cook | 2011-10-04 |
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 | 2014-03-28 |
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 | 2014-07-23 |
Modified to create a bundle settings object for the bundle adjustment.
|
Ian Humphrey and Makayla Shepherd | 2015-09-01 |
Changed code to accommodate changes in Sensor and Camera relationships.
|
Jeannie Backer | 2016-04-22 |
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 | 2016-08-18 |
Removed deprecated parameter from call to BundleSettings::setSolveOptions.
References #4162.
|
Kris Becker | 2017-08-01 |
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 pre-existing
behavor. Updated documentation to reflect these new changes. Fixes #4868.
|
Ken Edmundson | 2018-05-23 |
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.
|