Isis 3 Programmer Reference
|
An image bundle adjustment object. More...
#include <BundleAdjust.h>
Public Slots | |
bool | solveCholesky () |
Compute the least squares bundle adjustment solution using Cholesky decomposition. More... | |
void | abortBundle () |
Flag to abort when bundle is threaded. More... | |
void | outputBundleStatus (QString status) |
Slot for deltack and jigsaw to output the bundle status. More... | |
ControlNetQsp | controlNet () |
Returns a pointer to the output control network. More... | |
SerialNumberList * | serialNumberList () |
Returns a pointer to the serial number list. More... | |
QString | fileName (int index) |
Return the ith filename in the cube list file given to constructor. More... | |
QString | iterationSummaryGroup () const |
Returns the iteration summary string. More... | |
bool | isConverged () |
Returns if the BundleAdjust converged. More... | |
Table | cMatrix (int index) |
Return a table cmatrix for the ith cube in the cube list given to the constructor. More... | |
Table | spVector (int index) |
Return a table spacecraft vector for the ith cube in the cube list given to the constructor. More... | |
int | numberOfImages () const |
Returns the number of images. More... | |
double | iteration () const |
Returns what iteration the BundleAdjust is currently on. More... | |
Signals | |
void | statusUpdate (QString) |
void | error (QString) |
void | iterationUpdate (int) |
void | pointUpdate (int) |
void | statusBarUpdate (QString) |
void | resultsReady (BundleSolutionInfo *bundleSolveInformation) |
void | finished () |
Public Member Functions | |
BundleAdjust (BundleSettingsQsp bundleSettings, const QString &cnetFile, const QString &cubeList, bool printSummary=true) | |
Construct a BundleAdjust object from the given settings, control network file, and cube list. More... | |
BundleAdjust (BundleSettingsQsp bundleSettings, QString &cnet, SerialNumberList &snlist, bool printSummary=true) | |
Construct a BundleAdjust object with held cubes. More... | |
BundleAdjust (BundleSettingsQsp bundleSettings, Control &cnet, SerialNumberList &snlist, bool bPrintSummary) | |
Constructs a BundleAdjust object using a Control object. More... | |
BundleAdjust (BundleSettingsQsp bundleSettings, ControlNet &cnet, SerialNumberList &snlist, bool printSummary=true) | |
Constructs a BundleAdjust object using a ControlNet object. More... | |
BundleAdjust (BundleSettingsQsp bundleSettings, ControlNetQsp cnet, const QString &cubeList, bool printSummary=true) | |
Constructs a BundleAdjust from an already created ControlNet within a shared pointer. More... | |
BundleAdjust (BundleSettingsQsp bundleSettings, Control &control, QList< ImageList *> imgList, bool printSummary) | |
Thread safe constructor. More... | |
~BundleAdjust () | |
Destroys BundleAdjust object, deallocates pointers (if we have ownership), and frees variables from cholmod library. More... | |
BundleSolutionInfo * | solveCholeskyBR () |
Compute the least squares bundle adjustment solution using Cholesky decomposition. More... | |
QList< ImageList * > | imageLists () |
This method returns the image list used in the bundle adjust. More... | |
bool | isAborted () |
Returns if the BundleAdjust has been aborted. More... | |
Private Member Functions | |
void | init (Progress *progress=0) |
Initialize all solution parameters. More... | |
bool | initializeNormalEquationsMatrix () |
Initialize Normal Equations matrix (m_sparseNormals). More... | |
bool | validateNetwork () |
control network validation - on the very real chance that the net has not been checked before running the bundle More... | |
bool | solveSystem () |
Compute the solution to the normal equations using the CHOLMOD library. More... | |
void | iterationSummary () |
Creates an iteration summary and an iteration group for the solution summary. More... | |
BundleSolutionInfo * | bundleSolveInformation () |
Create a BundleSolutionInfo containing the settings and results from the bundle adjustment. More... | |
bool | computeBundleStatistics () |
Compute Bundle statistics and store them in m_bundleResults. More... | |
void | applyParameterCorrections () |
apply parameter corrections for solution. More... | |
bool | errorPropagation () |
Error propagation for solution. More... | |
double | computeResiduals () |
This method computes the focal plane residuals for the measures. More... | |
bool | computeRejectionLimit () |
Compute rejection limit. More... | |
bool | flagOutliers () |
Flags outlier measures and control points. More... | |
bool | formNormalEquations () |
Form the least-squares normal equations matrix via cholmod. More... | |
bool | computePartials (LinearAlgebra::Matrix &coeffTarget, LinearAlgebra::Matrix &coeffImage, LinearAlgebra::Matrix &coeffPoint3D, LinearAlgebra::Vector &coeffRHS, BundleMeasure &measure, BundleControlPoint &point) |
Compute partial derivatives and weighted residuals for a measure. More... | |
bool | formMeasureNormals (boost::numeric::ublas::symmetric_matrix< double, boost::numeric::ublas::upper > &N22, SparseBlockColumnMatrix &N12, boost::numeric::ublas::compressed_vector< double > &n1, LinearAlgebra::Vector &n2, LinearAlgebra::Matrix &coeffTarget, LinearAlgebra::Matrix &coeffImage, LinearAlgebra::Matrix &coeffPoint3D, LinearAlgebra::Vector &coeffRHS, int observationIndex) |
Form the auxilary normal equation matrices for a measure. More... | |
bool | formPointNormals (boost::numeric::ublas::symmetric_matrix< double, boost::numeric::ublas::upper > &N22, SparseBlockColumnMatrix &N12, LinearAlgebra::Vector &n2, LinearAlgebra::Vector &nj, BundleControlPointQsp &point) |
Compute the Q matrix and NIC vector for a control point. More... | |
bool | formWeightedNormals (boost::numeric::ublas::compressed_vector< double > &n1, LinearAlgebra::Vector &nj) |
Apply weighting for spacecraft position, velocity, acceleration and camera angles, angular velocities, angular accelerations if so stipulated (legalese). More... | |
void | productAB (SparseBlockColumnMatrix &A, SparseBlockRowMatrix &B) |
Perform the matrix multiplication C = N12 x Q. More... | |
void | accumProductAlphaAB (double alpha, SparseBlockRowMatrix &A, LinearAlgebra::Vector &B, LinearAlgebra::Vector &C) |
Performs the matrix multiplication nj = nj + alpha (Q x n2). More... | |
bool | invert3x3 (boost::numeric::ublas::symmetric_matrix< double, boost::numeric::ublas::upper > &m) |
Dedicated quick inverse of 3x3 matrix. More... | |
bool | productATransB (boost::numeric::ublas::symmetric_matrix< double, boost::numeric::ublas::upper > &N22, SparseBlockColumnMatrix &N12, SparseBlockRowMatrix &Q) |
Perform the matrix multiplication Q = N22 x N12(transpose) More... | |
void | productAlphaAV (double alpha, boost::numeric::ublas::bounded_vector< double, 3 > &v2, SparseBlockRowMatrix &Q, LinearAlgebra::Vector &v1) |
bool | initializeCHOLMODLibraryVariables () |
Initializations for CHOLMOD sparse matrix package. More... | |
bool | freeCHOLMODLibraryVariables () |
Free CHOLMOD library variables. More... | |
bool | cholmodInverse () |
Compute inverse of normal equations matrix for CHOLMOD. More... | |
bool | loadCholmodTriplet () |
Load sparse normal equations matrix into CHOLMOD triplet. More... | |
bool | wrapUp () |
Compute the residuals for each adjusted point and store adjustment results in m_bundleResults. More... | |
Private Attributes | |
BundleSettingsQsp | m_bundleSettings |
Contains the solve settings. More... | |
BundleResults | m_bundleResults |
Stores the results of the bundle adjust. More... | |
Statistics | m_xResiduals |
x residual statistics. More... | |
Statistics | m_yResiduals |
y residual statistics. More... | |
Statistics | m_xyResiduals |
xy residual statistics. More... | |
ControlNetQsp | m_controlNet |
Output control net. More... | |
QString | m_cnetFileName |
The control net filename. More... | |
QVector< BundleControlPointQsp > | m_bundleControlPoints |
BundleObservationVector | m_bundleObservations |
!< Vector of control points. More... | |
SerialNumberList * | m_serialNumberList |
!< Vector of observations. More... | |
BundleTargetBodyQsp | m_bundleTargetBody |
bool | m_abort |
!< Contains information about the target body. More... | |
QString | m_iterationSummary |
bool | m_printSummary |
!< Summary of the most recently completed iteration. More... | |
bool | m_cleanUp |
!< If the iteration summaries should be output to the log file. More... | |
int | m_rank |
!< If the serial number lists need to be deleted by the destructor. More... | |
int | m_iteration |
The current iteration. More... | |
int | m_numberOfImagePartials |
number of image-related partials. More... | |
QList< ImageList * > | m_imageLists |
boost::numeric::ublas::symmetric_matrix< double, boost::numeric::ublas::upper, boost::numeric::ublas::column_major > | m_normalInverse |
!< The lists of images used in the bundle. More... | |
cholmod_common | m_cholmodCommon |
LinearAlgebra::Vector | m_RHS |
!< Contains object parameters, statistics, and workspace used by the CHOLMOD library. More... | |
SparseBlockMatrix | m_sparseNormals |
!< The right hand side of the normal equations. More... | |
cholmod_triplet * | m_cholmodTriplet |
!< The sparse block normal equations matrix. More... | |
cholmod_sparse * | m_cholmodNormal |
!< The CHOLMOD triplet representation of the sparse normal equations matrix. More... | |
cholmod_factor * | m_L |
!< The CHOLMOD sparse normal equations matrix used by cholmod_factorize to solve the system. More... | |
LinearAlgebra::Vector | m_imageSolution |
!< The lower triangular L matrix from Cholesky decomposition. More... | |
int | m_previousNumberImagePartials |
!< The image parameter solution vector. More... | |
An image bundle adjustment object.
BundleAdjust is used to perform a bundle adjustment on overlapping ISIS 3 cubes. Using the collineariy condition, BundleAdjust can construct a system of normal equations and then using the CHOLMOD library, solve that system.
2005-05-30 Jeff Anderson, Debbie A. Cook & Tracie Sucharski - Original version
2007-05-29 Debbie A. Cook - Added new method iterationSummary and changed points on held images to held instead of ground.
2007-07-12 Debbie A. Cook - Fixed bug in iteration statistics calculations in the case of a single control point that was causing a divide by zero error.
2007-08-25 Debbie A. Cook - Added methods and members to support instrument position solution.
2007-09-17 Debbie A. Cook - Added ability to process in observation mode for Lunar Orbiter.
2007-11-17 Debbie A. Cook - Added method SetSolution Method.
2007-12-21 Debbie A. Cook - Added member p_Degree and methods m_nsolveCamDegree and ckDegree.
2008-01-11 Debbie A. Cook - Added observation mode functionality for spacecraft position and upgraded ObservationNumber methods for compatability.
2008-01-14 Debbie A. Cook - Added code to solve for local radii.
2008-04-18 Debbie A. Cook - Added progress for ControlNet.
2008-06-18 Christopher Austin - Fixed ifndef.
2008-11-07 Tracie Sucharski - Added bool to constructors to indicate whether to print iteration summary info to the session log. This was needed for qtie which has no session log.
2008-11-22 Debbie A. Cook - Added code to wrap longitude to keep it in [0.0, 360.0].
2008-11-22 Debbie A. Cook - Added new call to get timeScale and set for the observation along with basetime.
2008-11-26 Debbie A. Cook - Added check to applyHeldList for Ignored points and measures.
2009-01-08 Debbie A. Cook - Revised AddPartials and PointPartial to avoid using the camera methods to map a body-fixed vector to the camera because they compute a new time for line scan cameras based on the lat/lon/radius and the new time is used to retrieve Spice. The updated software uses the Spice at the time of the measurement.
2009-02-15 Debbie A. Cook - Corrected focal length to include its sign and removed obsolete calls to X/Y direction methods. Also modified PointPartial to use lat/lon/radius from the point instead of the camera.
2009-08-13 Debbie A. Cook - Corrected calculations of cudx and cudy so that they use the signed focal length also.
2009-10-14 Debbie A. Cook - Modified AddPartials method to use new CameraGroundMap method, GetXY.
2009-10-30 Debbie A. Cook - Improved error message in AddPartials.
2009-12-14 Debbie A. Cook - Updated SpicePosition enumerated partial type constants.
2010-03-19 Debbie A. Cook - Moved partials to GroundMap classes to support Radar sensors and modified argument list for GroundMap method ComputeXY since it now returns cudx and cudy.
2010-06-18 Debbie A. Cook - Added p_cnetFile as member since it was taken out of ControlNet.
2010-07-09 Ken Edmundson - Added Folding in solution method (SPECIALK), error propogation, statistical report, etc.
2010-08-13 Debbie A. Cook - Changed surface point from lat/lon/radius to body-fixed XYZ.
2010-12-17 Debbie A. Cook - Merged Ken Edmundson version with system and updated to new binary control net.
2011-02-01 Debbie A. Cook - Moved code to create point index map into its own method to be called after the solution method has been set.
2011-02-17 Debbie A. Cook - Updated to use new parameter added to SpicePosition, p_timeScale.
2011-03-05 Debbie A. Cook - Put point index creation back in init. This will prevent QRD and SVD from working if ground points are in the control net.
2011-03-29 Ken Edmundson - Fixed bug in observation mode when solving for spacecraft position and improved output.
2011-04-02 Debbie A. Cook - Updated to ControlPoint class changes regarding target radii. Also separated out 2 sets of calculations to test later for efficiency.
2011-06-05 Debbie A. Cook - Changed checks for solution type to match change from SPARSE to SPARSE-LU.
2011-06-07 Debbie A. Cook - and Tracie Sucharski - Modified point types from Ground to Fixed and from Tie to Free.
2011-06-14 Debbie A. Cook - added method isHeld(int index) for preventing any updates to held images.
2011-06-27 Debbie A. Cook - and Ken Edmundson Added names to top header fields of .csv output and fixed bugs in sparse output.
2011-07-12 Ken Edmundson - Segmentation fault bugfix in OutputHeader method. Previously was attempting to output camera angle sigmas when none had been allocated.
2011-07-14 Ken Edmundson and Debbie Cook - Added new member, m_bDeltack to indicate calling application was deltack (or qtie) and has potential to have a single ControlPoint and ControlMeasure.
2011-08-08 Tracie Sucharski - Added method to return the iteration summary to be used in qtie which does not have a log file. In SetImages, clear the cameraMavtpv_targetBodyp and cameraList. Added this back in (was originally added on 2011-01-19), was deleted somewhere along the line.
2011-09-28 Debbie A. Cook - Renamed SPARSE solve method to OLDSPARSE and CHOLMOD to SPARSE.
2011-10-14 Ken Edmundson - Added call to m_pCnet->ClearJigsawRejected() to the init() method to set all measure/point JigsawRejected flags to false prior to bundle.
2011-12-09 Ken Edmundson - Memory leak fix in method cholmodInverse. Need call to "cholmod_free_dense(&x,&m_cholmodCommon)" inside loop.
2011-12-20 Ken Edmundson - Fixes to outlier rejection. Added rejection multiplier member variable, can be set in jigsaw interface.
2012-02-02 Debbie A. Cook - Added SetSolvePolyOverHermite method and members m_bSolvePolyOverHermite and m_positionType.
2012-03-26 Orrin Thomas - Added maximum likelihood capabilities.
2012-05-21 Debbie A. Cook - Added initialization of m_dRejectionMultiplier.
2012-07-06 Debbie A. Cook - Updated Spice members to be more compliant with Isis coding standards. References #972.
2012-09-28 Ken Edmundson - Initialized variables for bundle statistic computations. The bundleout.txt file was modifed to show N/A for RMS, Min, Max of Radius Sigmas when not solving for radius. References #783.
2013-11-12 Ken Edmundson - Programmers Note. References #813, #1521, #1653 #813 - Info echoed to screen when using Maximum Likelihood methods are now printed to print.prt file. #1521 - The cout debug statements that appear on screen when updating images were removed from SpiceRotation.cpp #1653 - Constraints were being applied for "Free" points that have constrained coordinates. Also found that a priori coordinates for these points were not being computed in ControlPoint::ComputeApriori, this has also been fixed.
2013-12-18 Tracie Sucharski - The ControlNet::GetNumberOfMeasuresInImage was renamed to ControlNet::GetNumberOfValidMeasuresInImage and only returns the number of valid (Ignore= False) measures.
2014-02-25 Ken Edmundson - Speed up and memory improvements to error propagation. References #2031.
2014-05-16 Jeannie Backer - Added BundleSettings object to constructor inputs. Cleaned and organized code. Updated to be more compliant with ISIS coding standards.
2014-07-14 Kimberly Oyama - Added support for correlation matrix. Covariance matrix is now written to a file and the location is saved as part of the CorrelationMatrix object.
2014-07-23 Jeannie Backer - Modified to print "N/A" for rejection multiplier if outlier rejection is turned off.
2014-09-18 Kimberly Oyama - Added a constructor for running the bunlde in a separate thread.
2014-11-05 Ken Edmundson - Fixed memory bug. Wasn't releasing cholmod_factor m_L every iteration. Now release every iteration but the last since we
2015-02-20 Jeannie Backer - Updated to be more compliant with ISIS coding standards.
2015-08-17 Jeannie Backer - Updated to be more compliant with ISIS coding standards.
2015-09-03 Jeannie Backer - Changed the name of the output correlation matrix file from ["inverseMatrix" + random unique code + ".dat"] to [BundleSettings::outputFilePrefix() + "inverseMatrix.dat"]. So that the prefix can be used to specify the path of the location where the matrix file should be written. Some improvements made to comply with coding standards.
2015-09-10 Ian Humphrey - Fixed include for cholmod header after updating v005 libraries.
2016-07-11 Jesse Mapel - Changed m_bundleControlPoints to be a vector of QSharedPointers to BundleControlPoints instead of a BundleControlPointVector. Fixes #4099.
2016-07-11 Jeannie Backer - Removed initialize(). Implementation was moved the the bottom of init() method. Fixes #4161.
2016-08-03 Jesse Mapel - Changed BundleObservationVector to a vector of QSharedPointers. Fixes #4150.
2016-08-10 Jeannie Backer - Replaced boost vectors and matrices with Isis::LinearAlgebra::Vector and Isis::LinearAlgebra::Matrix, respectively. References #4163.
2016-08-15 Jesse Mapel - Moved write methods to BundleSolutionInfo. Changed constructors to always construct a new control network. Fixes #4159.
2016-08-15 Ian Humphrey - Replaced ISIS ControlPoint and ControlMeasure uses with BundleControlPoint and BundleMeasure. No longer need to check if the BundleControlPoint or BundleMeasure is ignored before use, since we only add non-ignored ControlPoints to the BundleControlPoint, and we only add non-ignored ControlMeasures to the BundleControlPoint. Fixes #4173, #4201.
2016-08-16 Jesse Mapel - Added error throw when covariance matrices are not symmetric due to unstable data and settings. Fixes #2302.
2016-08-17 Jesse Mapel - Moved all method implementations to the cpp file. Fixes #4185.
2016-08-18 Jeannie Backer - Removed all references to deprecated solve methods SpeckialK and OldSparse. Fixes #4162.
2016-08-23 Jesse Mapel - Removed output file calls. Apps and objects that use BundleAdjust must call output methods from BundleSolutionInfo. Fixes #4279.
2016-08-24 Jesse Mapel - Updated documentation and member variable names. Brought closer to ISIS 3 coding standards. Fixes #4183, #4188, #4235.
2016-08-28 Kelvin Rodriguez - Remvoed useless register keywords to squash warnigns in clang. Part of porting to OS X 10.11.
2016-09-22 Ian Humphrey - Modified validateNetwork() so that validation status messages are logged to stdout. Fixes #4313.
2016-10-05 Ian Humphrey - Modified errorPropagation_CHOLMOD() to check bundle settings to see if it should generate the inverseMatrix.dat file. References #4315.
2016-10-13 Ian Humphrey - Added constructor that takes a ControlNetQsp, so that when jigsaw modifies a control net for a held image, the control net can be passed as a shared pointer. Removed m_pHeldSnList, isHeld(), checkHeldList(), applyHeldList(), two constructors that used heldList parameters. Modified destructor to not delete m_pHeldSnList, since it was removed. Fixes #4293.
2016-10-17 Adam Paquette - Cleaned up terminal output for readability and cohesion Fixes #4263, #4311, #4312.
2016-10-18 Ian Humphrey - Modified iterationSummary() to always output Rejected_Measures kewyord, regardless of outlier rejection being on or off. Fixes #4461.
2016-10-25 Ian Humphrey - Modified iterationSumary() to always output Rejected_Measures keyword, regarldess of outlier rjection being on or off. Fixes #4461. Modified solveCholesky() and computeRejectionLimit() so jigsaw's std out for Rejection Limit, Sigma0, and Elapsed Time match ISIS production's jigsaw std out. Fixes #4463.
2016-10-28 Ian Humphrey - Modified solveCholesky() and errorPropagation() to change spacing in terminal output, so that it matches production. References #4463.
2016-11-16 Ian Humphrey - Modified solveCholesky() to throw caught exceptions that occur. Removed bundleException(QString) signal. Fixes #4483.
2016-12-01 Ian Humphrey - Modified outputBundleStatus()'s printf() call so that there is no longer a -Wformat-security warning.
2017-05-01 Makayla Shepherd - Added imageLists() to track and return the images bundled. Fixes #4818.
2017-05-09 Tracie Sucharski - Fixed an empty pointer in ::imgeLists method.
2017-05-09 Ken Edmundson - Speed improvements and error propagation bug fix. Separated initializations for Normal Equations matrix out of ::initializeCholmodLibraryVariables() into ::initializeNormalEquationsMatrix(). Added m_previousNumberImagePartials to avoid unnecessary resizing of the "coeffImage" matrix in ::computePartials. New m_startColumn member in SparseBlockColumnMatrix eliminates costly computation of leading colums and rows. In ::errorPropagation method, call to get Q matrix from BundleControlPoint was creating a copy instead of getting a reference. References #4664.
2017-06-08 Makayla Shepherd - Modified imageLists() to close the image cube after adding it to the image list. Fixes #4908.
2017-08-09 Summer Stapleton - Added a try/catch around the m_controlNet assignment in each of the constructors to verify valid control net input. Fixes #5068.
2017-09-01 Debbie A. Cook - Added BundleSettingsQsp as argument to BundleControlPoint constructor and moved setWeights call from BundleAdjust::init to BundleControlPoint constructor. Don't allow solving for triaxial radii when coordinate type is not Latitudinal. Added new optional argument controlPointCoordType to ControlNet constructor call. References #4649 and #501.
2018-05-31 Debbie A. Cook - Moved productAlphaAV and control point parameter correction code to BundleControlPoint. Earlier revised errorPropagation to compute the sigmas via the variance/covariance matrices instead of the sigmas. This should produce more accurate results. References #4649 and #501.
2018-05-22 Ken Edmundson - Modified methods bundleSolveInformation() and solveCholeskyBR() to return raw pointers to a BundleSolutionInfo object. Also modified resultsReady signal to take a raw pointer to a BundleSolutionInfo object. This was done to avoid using a copy constructor in the BundleSolutionInfo class because it is derived from QObject. Note that we ultimately want to return a QSharedPointer instead of a raw pointer.
2018-06-14 Christopher Combs - Added getter method to tell if a bundle adjust was aborted. Added emits for status updates to the run widget.
2018-06-18 Makayla Shepherd - Stopped command line output for ipce BundleAdjust. Fixes #4171.
2018-09-06 Debbie A. Cook - (added to BundleXYZ branch on 2017-09-01) Added BundleSettingsQsp as argument to BundleControlPoint constructor and moved setWeights call from BundleAdjust::init to BundleControlPoint constructor. Don't allow solving for triaxial radii when coordinate type is not Latitudinal. Added new optional argument controlPointCoordType to ControlNet constructor call. References #4649 and #501.
2018-09-06 Debbie A. Cook and Ken Edmundson - (added to BundleXYZ branch on (2018-05-31). Moved productAlphaAV and control point parameter correction code to BundleControlPoint. Earlier revised errorPropagation to compute the sigmas via the variance/ covariance matrices instead of the sigmas. This should produce more accurate results. References #4649 and #501.
2018-09-06 Debbie A. Cook - Removed obsolete member variables: m_radiansToMeters, m_metersToRadians, and m_bodyRadii which have been replaced with the local radius of a control point for converting point sigmas to/from radians from/to meters. References #4649 and #501.
2019-05-15 Debbie A. Cook - The call to CameraGroundMap::GetXY in method ComputePartials was modified to not check for points on the back side of the planet when computing instrument coordinates during the bundle adjustment. In the future a control net diagnostic program might be useful to detect any points not visible on an image based on the exterior orientation of the image. References #2591.
Definition at line 333 of file BundleAdjust.h.
Isis::BundleAdjust::BundleAdjust | ( | BundleSettingsQsp | bundleSettings, |
const QString & | cnetFile, | ||
const QString & | cubeList, | ||
bool | printSummary = true |
||
) |
Construct a BundleAdjust object from the given settings, control network file, and cube list.
bundleSettings | A shared pointer to the BundleSettings to be used. |
cnetFile | The filename of the control network to be used. |
cubeList | The list of filenames of the cubes to be adjusted. |
printSummary | If summaries should be printed each iteration. |
Definition at line 94 of file BundleAdjust.cpp.
Isis::BundleAdjust::BundleAdjust | ( | BundleSettingsQsp | bundleSettings, |
QString & | cnetFile, | ||
SerialNumberList & | snlist, | ||
bool | printSummary = true |
||
) |
Construct a BundleAdjust object with held cubes.
bundleSettings | A shared pointer to the BundleSettings to be used. |
cnetFile | The filename of the control network to be used. |
cubeList | The list of filenames of the cubes to be adjusted. |
heldList | The list of filenames of the held cubes. Held cubes must be in both heldList and cubeList. |
printSummary | If summaries should be printed each iteration. |
Definition at line 132 of file BundleAdjust.cpp.
Isis::BundleAdjust::BundleAdjust | ( | BundleSettingsQsp | bundleSettings, |
Control & | cnet, | ||
SerialNumberList & | snlist, | ||
bool | printSummary | ||
) |
Constructs a BundleAdjust object using a Control object.
A new control network object will be created as a copy of the Control's control network.
bundleSettings | A shared pointer to the BundleSettings to be used. |
cnet | The Control object whose control network will be copied. The Control will not be modified by the BundleAdjust. |
snlist | A serial number list containing the cubes to be adjusted. |
printSummary | If summaries should be printed each iteration. |
Definition at line 169 of file BundleAdjust.cpp.
References Isis::Control::fileName().
Isis::BundleAdjust::BundleAdjust | ( | BundleSettingsQsp | bundleSettings, |
ControlNet & | cnet, | ||
SerialNumberList & | snlist, | ||
bool | printSummary = true |
||
) |
Constructs a BundleAdjust object using a ControlNet object.
A copy of the ControlNet will be used.
bundleSettings | A shared pointer to the BundleSettings to be used. |
cnet | The ControlNet that will be copied. The original ControlNet will not be modified. |
snlist | A serial number list containing the cubes to be adjusted. |
printSummary | If summaries should be printed each iteration. |
Definition at line 206 of file BundleAdjust.cpp.
Isis::BundleAdjust::BundleAdjust | ( | BundleSettingsQsp | bundleSettings, |
ControlNetQsp | cnet, | ||
const QString & | cubeList, | ||
bool | printSummary = true |
||
) |
Constructs a BundleAdjust from an already created ControlNet within a shared pointer.
bundleSettings | QSharedPointer to the bundle settings to use. |
cnet | QSharedPointer to the control net to adjust. |
cubeList | QString name of list of cubes to create serial numbers for. |
printSummary | Boolean indicating whether to print application output summary. |
Definition at line 240 of file BundleAdjust.cpp.
Isis::BundleAdjust::BundleAdjust | ( | BundleSettingsQsp | bundleSettings, |
Control & | control, | ||
QList< ImageList *> | imgLists, | ||
bool | printSummary | ||
) |
Thread safe constructor.
bundleSettings | A shared pointer to the BundleSettings to be used. |
control | The Control object whose control network will be copied. The Control will not be modified by the BundleAdjust. |
snlist | A serial number list containing the cubes to be adjusted. |
printSummary | If summaries should be printed each iteration. |
Definition at line 272 of file BundleAdjust.cpp.
References Isis::SerialNumberList::add(), Isis::Control::fileName(), and Isis::Image::fileName().
Isis::BundleAdjust::~BundleAdjust | ( | ) |
Destroys BundleAdjust object, deallocates pointers (if we have ownership), and frees variables from cholmod library.
Definition at line 320 of file BundleAdjust.cpp.
|
slot |
Flag to abort when bundle is threaded.
Flag is set outside the bundle thread, typically by the gui thread.
Definition at line 675 of file BundleAdjust.cpp.
Referenced by Isis::JigsawRunWidget::closeEvent().
|
private |
Performs the matrix multiplication nj = nj + alpha (Q x n2).
alpha | A constant multiplier. |
Q | A sparse block matrix. |
n2 | A vector. |
nj | The output accumulation vector. |
Definition at line 1502 of file BundleAdjust.cpp.
|
private |
apply parameter corrections for solution.
Definition at line 2105 of file BundleAdjust.cpp.
|
private |
Create a BundleSolutionInfo containing the settings and results from the bundle adjustment.
Definition at line 998 of file BundleAdjust.cpp.
References Isis::BundleSolutionInfo::setRunTime().
|
private |
Compute inverse of normal equations matrix for CHOLMOD.
The inverse is stored in m_normalInverse.
This seems to be unused. JAM
Definition at line 1727 of file BundleAdjust.cpp.
|
slot |
Return a table cmatrix for the ith cube in the cube list given to the constructor.
i | The index of the cube |
Definition at line 2986 of file BundleAdjust.cpp.
Referenced by Isis::JigsawRunWidget::on_JigsawAcceptButton_clicked().
|
private |
Compute Bundle statistics and store them in m_bundleResults.
Sets: m_rmsImageSampleResiduals m_rmsImageLineResiduals m_rmsImageResiduals
m_rmsImageXSigmas m_rmsImageYSigmas m_rmsImageZSigmas m_rmsImageRASigmas m_rmsImageDECSigmas m_rmsImageTWISTSigmas
m_maxSigmaLatitude m_maxSigmaLatitudePointId m_maxSigmaLongitude m_maxSigmaLongitudePointId m_maxSigmaRadius m_maxSigmaRadiusPointId
m_minSigmaLatitude m_minSigmaLatitudePointId m_minSigmaLongitude m_minSigmaLongitudePointId m_minSigmaRadius m_minSigmaRadiusPointId
m_rmsSigmaLat m_rmsSigmaLon m_rmsSigmaRad
Definition at line 3155 of file BundleAdjust.cpp.
References Isis::Statistics::AddData(), Isis::Distance::meters(), and Isis::Statistics::Rms().
|
private |
Compute partial derivatives and weighted residuals for a measure.
coeffTarget, coeffImage, coeffPoint3D, and coeffRHS will be filled with the different partial derivatives.
coeffTarget | A matrix that will contain target body partial derivatives. |
coeffImage | A matrix that will contain camera position and orientation partial derivatives. |
coeffPoint3D | A matrix that will contain point lat, lon, and radius partial derivatives. |
coeffRHS | A vector that will contain weighted x,y residuals. |
measure | The measure that partials are being computed for. |
point | The point containing measure. |
IException::User | "Unable to map apriori surface point for measure" |
Definition at line 1823 of file BundleAdjust.cpp.
References _FILEINFO_, Isis::BundleControlPoint::adjustedSurfacePoint(), Isis::BundleMeasure::camera(), Isis::BundleMeasure::cubeSerialNumber(), Isis::CameraGroundMap::EllipsoidPartial(), Isis::BundleMeasure::focalPlaneMeasuredX(), Isis::BundleMeasure::focalPlaneMeasuredY(), Isis::Camera::GetCameraType(), Isis::CameraGroundMap::GetdXYdOrientation(), Isis::CameraGroundMap::GetdXYdPoint(), Isis::CameraGroundMap::GetdXYdPosition(), Isis::CameraGroundMap::GetdXYdTOrientation(), Isis::CameraGroundMap::GetXY(), Isis::Camera::GroundMap(), Isis::BundleControlPoint::id(), Isis::BundleMeasure::line(), Isis::CameraGroundMap::MeanRadiusPartial(), Isis::BundleMeasure::observationSolveSettings(), Isis::BundleMeasure::parentBundleObservation(), Isis::SurfacePoint::Partial(), Isis::Camera::PixelPitch(), Isis::BundleMeasure::sample(), and Isis::Camera::SetImage().
|
private |
Compute rejection limit.
Computes the median and the median absolute deviation (M.A.D.) of the residuals. Then, sets the rejection limit in m_bundleResults to median + RejectionMultiplier * M.A.D.
should this be in BundleResults?
Definition at line 2305 of file BundleAdjust.cpp.
|
private |
This method computes the focal plane residuals for the measures.
Definition at line 2168 of file BundleAdjust.cpp.
|
slot |
Returns a pointer to the output control network.
Definition at line 2931 of file BundleAdjust.cpp.
|
private |
Error propagation for solution.
IException::User | "Input data and settings are not sufficiently stable for error propagation." |
2016-10-05 Ian Humphrey - Updated to check to see if bundle settings is allowing us to create the inverse matrix correlation file. References #4315.
2016-10-28 Ian Humphrey - Added extra newline between Error Propagation: Inverse Blocking and Filling point covariance messages. References #4463.
2018-09-06 Debbie A. Cook and Ken Edmundson - (added to BundleXYZ branch on (2018-05-31). Moved productAlphaAV and control point parameter correction code to BundleControlPoint. Earlier revised errorPropagation to compute the sigmas via the variance/ covariance matrices instead of the sigmas. This should produce more accurate results. References #4649 and #501.
Definition at line 2583 of file BundleAdjust.cpp.
References _FILEINFO_, Isis::iTime::CurrentLocalTime(), Isis::SparseBlockColumnMatrix::numberOfColumns(), Isis::SparseBlockColumnMatrix::numberOfRows(), and Isis::SurfacePoint::SetMatrix().
|
slot |
Return the ith filename in the cube list file given to constructor.
i | The index of the cube. |
Definition at line 2964 of file BundleAdjust.cpp.
|
private |
Flags outlier measures and control points.
How should we handle points with few measures.
Definition at line 2404 of file BundleAdjust.cpp.
|
private |
Form the auxilary normal equation matrices for a measure.
N22, N12, n1, and n2 will contain the auxilary matrices when completed.
N22 | The normal equation matrix for the point on the body. |
N12 | The normal equation matrix for the camera and the target body. |
n1 | The right hand side vector for the camera and the target body. |
n2 | The right hand side vector for the point on the body. |
coeffTarget | The matrix containing target body pertial derivatives. |
coeffImage | The matrix containing camera position and orientation partial derivatives. |
coeffPoint3D | The matrix containing point lat, lon, and radius partial derivatives. |
coeffRHS | The vector containing weighted x,y residuals. |
observationIndex | The index of the observation containing the measure that the partial derivative matrices are for. |
Definition at line 1148 of file BundleAdjust.cpp.
References Isis::SparseBlockColumnMatrix::insertMatrixBlock().
|
private |
Form the least-squares normal equations matrix via cholmod.
Each BundleControlPoint will stores its Q matrix and NIC vector once finished. The covariance matrix for each point will be stored in its adjusted surface point.
Definition at line 1019 of file BundleAdjust.cpp.
References Isis::SparseBlockColumnMatrix::wipe().
|
private |
Compute the Q matrix and NIC vector for a control point.
The inputs N22, N12, and n2 come from calling formMeasureNormals() with the control point's measures. The Q matrix and NIC vector are stored in the BundleControlPoint. R = N12 x Q is accumulated into m_sparseNormals.
N22 | The normal equation matrix for the point on the body. |
N12 | The normal equation matrix for the camera and the target body. |
n2 | The right hand side vector for the point on the body. |
nj | The output right hand side vector. |
bundleControlPoint | The control point that the Q matrixs are NIC vector are being formed for. |
Definition at line 1284 of file BundleAdjust.cpp.
References Isis::SurfacePoint::SetMatrix(), and Isis::SparseBlockRowMatrix::zeroBlocks().
|
private |
Apply weighting for spacecraft position, velocity, acceleration and camera angles, angular velocities, angular accelerations if so stipulated (legalese).
n1 | The right hand side vector for the camera and the target body. |
nj | The right hand side vector |
Definition at line 1356 of file BundleAdjust.cpp.
|
private |
Free CHOLMOD library variables.
Frees m_cholmodTriplet, m_cholmodNormal, and m_L. Calls cholmod_finish when complete.
Definition at line 644 of file BundleAdjust.cpp.
This method returns the image list used in the bundle adjust.
If a QList<ImageList *> was passed into the constructor then it uses that list, otherwise it constructs the QList using the m_serialNumberList
Definition at line 2534 of file BundleAdjust.cpp.
References _FILEINFO_, Isis::ImageList::append(), and Isis::Image::closeCube().
|
private |
Initialize all solution parameters.
This method is called by constructors to
progress | A pointer to the progress of creating the cameras. |
IException::Programmer | "In BundleAdjust::init(): image is null." |
IException::Programmer | "In BundleAdjust::init(): observation is null." |
2011-08-14 Debbie A. Cook - Opt out of network validation for deltack network in order to allow a single measure on a point
2016-10-13 Ian Humphrey - Removed verification of held images in the from list and counting of the number of held images. References #4293.
remove printf statements
answer comments with questions, TODO, ???, and !!!
Definition at line 362 of file BundleAdjust.cpp.
References Isis::Camera::Camera().
|
private |
Initializations for CHOLMOD sparse matrix package.
Calls cholmod_start, sets m_cholmodCommon options.
Definition at line 572 of file BundleAdjust.cpp.
References Isis::cholmodErrorHandler().
|
private |
Initialize Normal Equations matrix (m_sparseNormals).
Ken NOTE: Currently we are explicitly setting the start column for each block in the normal equations matrix below. I think it should be possible (and relatively easy) to make the m_sparseNormals smart enough to set the start column of a column block automatically when it is added to the matrix.
Definition at line 602 of file BundleAdjust.cpp.
|
private |
Dedicated quick inverse of 3x3 matrix.
m | The 3x3 matrix to invert. Overwritten with the inverse. |
Move to LinearAlgebra
Definition at line 1776 of file BundleAdjust.cpp.
bool Isis::BundleAdjust::isAborted | ( | ) |
Returns if the BundleAdjust has been aborted.
Definition at line 3086 of file BundleAdjust.cpp.
Referenced by Isis::JigsawRunWidget::notifyThreadFinished().
|
slot |
Returns if the BundleAdjust converged.
Definition at line 3076 of file BundleAdjust.cpp.
|
slot |
Returns what iteration the BundleAdjust is currently on.
Definition at line 2974 of file BundleAdjust.cpp.
|
private |
Creates an iteration summary and an iteration group for the solution summary.
Definition at line 3011 of file BundleAdjust.cpp.
References Isis::toString().
|
slot |
Returns the iteration summary string.
Definition at line 3098 of file BundleAdjust.cpp.
|
private |
Load sparse normal equations matrix into CHOLMOD triplet.
Blocks from the sparse block normal matrix are loaded into a CHOLMOD triplet. Before the triplet can be used with CHOLMOD, it must be converted to a CHOLMOD sparse matrix via cholmod_triplet_to_sparse.
Definition at line 1612 of file BundleAdjust.cpp.
References Isis::SparseBlockColumnMatrix::startColumn().
|
slot |
Returns the number of images.
Definition at line 2951 of file BundleAdjust.cpp.
References Isis::SerialNumberList::size().
|
slot |
Slot for deltack and jigsaw to output the bundle status.
status | The bundle status string to output. |
Definition at line 3112 of file BundleAdjust.cpp.
|
private |
Perform the matrix multiplication C = N12 x Q.
The result, C, is stored in m_sparseNormals.
N12 | A sparse block matrix. |
Q | A sparse block matrix |
Definition at line 1457 of file BundleAdjust.cpp.
|
private |
Perform the matrix multiplication Q = N22 x N12(transpose)
N22 | A symmetric matrix |
N12 | A sparse block matrix |
Q | The output sparse block matrix |
Definition at line 1427 of file BundleAdjust.cpp.
References Isis::SparseBlockRowMatrix::insertMatrixBlock().
|
slot |
Returns a pointer to the serial number list.
Definition at line 2941 of file BundleAdjust.cpp.
|
slot |
Compute the least squares bundle adjustment solution using Cholesky decomposition.
2016-10-25 Ian Humphrey - Spacing and precision for Sigma0 and Elapsed Time match ISIS production's jigsaw std output. References #4463."
2016-10-28 Ian Humphrey - Updated spacing for Error Propagation Complete message. References #4463."
2016-11-16 Ian Humphrey - Modified catch block to throw the caught exception, so a message box will appear to the user when running jigsaw in GUI mode. Fixes #4483.
Definition at line 694 of file BundleAdjust.cpp.
References _FILEINFO_, Isis::IException::errorType(), Isis::SurfacePoint::GetLatitude(), Isis::SurfacePoint::GetLongitude(), and Isis::SurfacePoint::ResetLocalRadius().
BundleSolutionInfo * Isis::BundleAdjust::solveCholeskyBR | ( | ) |
Compute the least squares bundle adjustment solution using Cholesky decomposition.
make solveCholesky return a BundleSolutionInfo object and delete this placeholder ???
Definition at line 665 of file BundleAdjust.cpp.
|
private |
Compute the solution to the normal equations using the CHOLMOD library.
IException::Programmer | "CHOLMOD: Failed to load Triplet matrix" |
Definition at line 1541 of file BundleAdjust.cpp.
References _FILEINFO_, and Isis::toString().
|
slot |
Return a table spacecraft vector for the ith cube in the cube list given to the constructor.
i | The index of the cube |
Definition at line 2998 of file BundleAdjust.cpp.
Referenced by Isis::JigsawRunWidget::on_JigsawAcceptButton_clicked().
|
private |
control network validation - on the very real chance that the net has not been checked before running the bundle
checks implemented for ... (1) images with 0 or 1 measures
IException::User | "Images with one or less measures:" |
2011-08-04 Debbie A. Cook - Changed error message to indicate it fails with one measure as well as no measures.
2016-09-22 Ian Humphrey - Replaced statusUpdate signal emits with direct calls to outputBundleStats() so the validation messages are printed to stdout. References #4313.
Definition at line 534 of file BundleAdjust.cpp.
References _FILEINFO_, and Isis::toString().
|
private |
Compute the residuals for each adjusted point and store adjustment results in m_bundleResults.
Definition at line 2276 of file BundleAdjust.cpp.
|
private |
!< Contains information about the target body.
If the bundle should abort.
Definition at line 483 of file BundleAdjust.h.
|
private |
!< Vector of control points.
Contains only non-ignored control points from the control net.
Definition at line 477 of file BundleAdjust.h.
|
private |
Stores the results of the bundle adjust.
Definition at line 466 of file BundleAdjust.h.
|
private |
Contains the solve settings.
Definition at line 465 of file BundleAdjust.h.
|
private |
!< The CHOLMOD triplet representation of the sparse normal equations matrix.
Created from m_sparseNormals and then used to create m_cholmodNormal.
Definition at line 524 of file BundleAdjust.h.
|
private |
!< The sparse block normal equations matrix.
Used to populate m_cholmodTriplet and for error propagation.
Definition at line 518 of file BundleAdjust.h.
|
private |
!< If the iteration summaries should be output to the log file.
Definition at line 489 of file BundleAdjust.h.
|
private |
The control net filename.
Definition at line 472 of file BundleAdjust.h.
|
private |
Output control net.
Definition at line 471 of file BundleAdjust.h.
|
private |
!< The lower triangular L matrix from Cholesky decomposition.
Created from m_cholmodNormal by cholmod_factorize.
Definition at line 533 of file BundleAdjust.h.
|
private |
The current iteration.
Definition at line 493 of file BundleAdjust.h.
|
private |
!< The CHOLMOD sparse normal equations matrix used by cholmod_factorize to solve the system.
Created from m_cholmodTriplet.
Definition at line 529 of file BundleAdjust.h.
|
private |
!< The lists of images used in the bundle.
Inverse of the normal equations matrix. Set by cholmodInverse.
Definition at line 508 of file BundleAdjust.h.
|
private |
number of image-related partials.
Definition at line 494 of file BundleAdjust.h.
|
private |
!< The image parameter solution vector.
Definition at line 536 of file BundleAdjust.h.
|
private |
!< Summary of the most recently completed iteration.
Definition at line 486 of file BundleAdjust.h.
|
private |
!< If the serial number lists need to be deleted by the destructor.
The rank of the system.
Definition at line 492 of file BundleAdjust.h.
|
private |
!< Contains object parameters, statistics, and workspace used by the CHOLMOD library.
Definition at line 512 of file BundleAdjust.h.
|
private |
!< Vector of observations.
Each observation contains one or more images. List of image serial numbers.
Definition at line 480 of file BundleAdjust.h.
|
private |
!< The right hand side of the normal equations.
Definition at line 514 of file BundleAdjust.h.
|
private |
x residual statistics.
Definition at line 468 of file BundleAdjust.h.
|
private |
xy residual statistics.
Definition at line 470 of file BundleAdjust.h.
|
private |
y residual statistics.
Definition at line 469 of file BundleAdjust.h.