Isis 3 Programmer Reference
|
Convert between undistorted focal plane and ground coordinates. More...
#include <VimsGroundMap.h>
Public Types | |
enum | PartialType { WRT_Latitude, WRT_Longitude, WRT_Radius, WRT_MajorAxis, WRT_MinorAxis, WRT_PolarAxis } |
Radius axes types to use when computing partials. More... | |
Public Member Functions | |
VimsGroundMap (Camera *parent, Pvl &lab) | |
Constructs the VimsGroundMap object. More... | |
virtual | ~VimsGroundMap () |
Destroys the VimsGroundMap object. More... | |
virtual bool | SetFocalPlane (const double ux, const double uy, const double uz) |
Compute ground position from focal plane coordinate. More... | |
virtual bool | SetGround (const Latitude &lat, const Longitude &lon) |
Compute undistorted focal plane coordinate from ground position. More... | |
virtual bool | SetGround (const SurfacePoint &surfacePoint) |
Compute undistorted focal plane coordinate from ground position. More... | |
void | Init (Pvl &lab) |
Initialize vims camera model. More... | |
virtual bool | GetXY (const SurfacePoint &spoint, double *cudx, double *cudy, bool test=true) |
Compute undistorted focal plane coordinate from ground position using current Spice from SetImage call. More... | |
virtual bool | GetXY (const double lat, const double lon, const double radius, double *cudx, double *cudy) |
Compute undistorted focal plane coordinate from ground position using current Spice from SetImage call. More... | |
virtual bool | GetdXYdPosition (const SpicePosition::PartialType varType, int coefIndex, double *cudx, double *cudy) |
Compute derivative w/r to position of focal plane coordinate from ground position using current Spice from SetImage call. More... | |
virtual bool | GetdXYdOrientation (const SpiceRotation::PartialType varType, int coefIndex, double *cudx, double *cudy) |
Compute derivative of focal plane coordinate w/r to instrument using current state from SetImage call. More... | |
virtual bool | GetdXYdTOrientation (const SpiceRotation::PartialType varType, int coefIndex, double *cudx, double *cudy) |
Compute derivative of focal plane coordinate w/r to target body using current state. More... | |
virtual bool | GetdXYdPoint (std::vector< double > d_pB, double *dx, double *dy) |
Compute derivative of focal plane coordinate w/r to ground point using current state. More... | |
std::vector< double > | PointPartial (SurfacePoint spoint, PartialType wrt) |
Compute derivative with respect to indicated variable of conversion function from lat/lon/rad to rectangular coord. More... | |
std::vector< double > | EllipsoidPartial (SurfacePoint spoint, PartialType raxis) |
Compute derivative of focal plane coordinate w/r to one of the ellipsoidal radii (a, b, or c) More... | |
std::vector< double > | MeanRadiusPartial (SurfacePoint spoint, Distance meanRadius) |
Compute derivative of focal plane coordinate w/r to mean of the ellipsoidal radii (a, b, c) More... | |
double | DQuotient (std::vector< double > &look, std::vector< double > &dlook, int index) |
Convenience method for quotient rule applied to look vector. More... | |
double | FocalPlaneX () const |
double | FocalPlaneY () const |
Protected Attributes | |
Camera * | p_camera |
Camera. More... | |
double | p_focalPlaneX |
Camera's x focal plane coordinate. More... | |
double | p_focalPlaneY |
Camera's y focal plane coordinate. More... | |
Private Member Functions | |
void | LookDirection (double v[3]) |
Determines the look direction in the camera coordinate system. More... | |
Private Attributes | |
SpiceDouble | p_etStart |
Start ephemeris time. More... | |
double | p_interlineDelay |
InterlineDelayDuration keyword value from the instrument group of the labels, divided by 1000. More... | |
double | p_ux |
Distorted focal plane x, in millimeters. More... | |
double | p_uy |
Distorted focal plane y, in millimeters. More... | |
double | p_uz |
Distorted focal plane z, in millimeters. More... | |
double | p_xPixSize |
X pixel size. More... | |
double | p_yPixSize |
Y pixel size. More... | |
double | p_xBore |
X boresight. More... | |
double | p_yBore |
Y boresight. More... | |
QString | p_channel |
Channel keyword value from the instrument group of the labels. More... | |
double | p_visExp |
VIS exposure duration, divided by 1000. More... | |
double | p_irExp |
IR exposure duration, divided by 1000. More... | |
int | p_swathWidth |
SwathWidth keyword value from the instrument group of the labels. More... | |
int | p_swathLength |
SwathLength keyword value from the instrument group of the labels. More... | |
int | p_camSampOffset |
Sample offset. More... | |
int | p_camLineOffset |
Line offset. More... | |
double | p_minX |
double | p_maxX |
double | p_minY |
double | p_maxY |
double | p_minZ |
double | p_maxZ |
QVector3D | p_xyzMap [64][64] |
Convert between undistorted focal plane and ground coordinates.
This base class is used to convert between undistorted focal plane coordinates (x/y) in millimeters and ground coordinates lat/lon. This class handles the case of framing cameras.
2006-03-16 Tracie Sucharski Original version
2008-02-05 Tracie Sucharski, Replaced unitVector files with Rick McCloskey's code to calculate look direction.
2008-06-18 Steven Lambright Fixed documentation
2009-04-06 Steven Lambright Fixed problem that caused double deletion of sky map / ground map.
2009-08-06 Tracie Sucharski, Bug in unit vector change made on 2008-02-05, had the incorrect boresight for VIS Hires.
2011-02-08 Steven Lambright & Debbie Cook, Added WrapWorldToBeClose and refactored to use the Latitude and Longitude classes.
2011-05-03 Jeannie Walldren - Updated documentation. Removed Cassini namespace wrap inside Isis namespace.
2011-10-19 Steven Lambright - Added common sense check to constructor to at least provide a string explanation for why their program is going to crash when the original cube makes no sense. Since the exception is in the constructor the error will probably lead to an alternate seg fault.
2012-07-06 Debbie A. Cook, Updated Spice members to be more compliant with Isis coding standards. References #972.
2012-09-10 Ken Edmundson, Added new methods, SetGroundwithLatitudeLongitude and SetGroundwithRadiusLongitude to support rings data.
2012-12-03 Tracie Sucharski - Added error check to SetGround method. Returns false if none of the pixel centers in the cube intersect with the planet. Fixes #1306.
2013-07-24 Tracie Sucharski - Fix bug in camera model which causes a problems finding either north or south poles in images. References #1289.
2013-08-12 Tracie Sucharski - Change all computations base on latitude and longitude to x, y and z. This takes care of pole problems and improves accuracy. Fixes #1289.
2014-04-09 Tracie Sucharski - When changing the camera model from lat/lon to x/y/z calculations the range checking was removed. This caused extra pixels to be projected into incorrect positions when doing global projections. Range checking was put back in using x/y/z values. References #1289.
Definition at line 91 of file VimsGroundMap.h.
|
inherited |
Radius axes types to use when computing partials.
When computing partials, this enum represents the "with respect to" variable in the computation.
Definition at line 104 of file CameraGroundMap.h.
Constructs the VimsGroundMap object.
Definition at line 54 of file VimsGroundMap.cpp.
References _FILEINFO_, Isis::Camera::ParentLines(), Isis::Camera::ParentSamples(), and Isis::IException::Programmer.
|
virtual |
Destroys the VimsGroundMap object.
Definition at line 76 of file VimsGroundMap.cpp.
|
inherited |
Convenience method for quotient rule applied to look vector.
This method will compute the derivative of the following function (coordinate x or y) / (coordinate z)
look | look vector in camera frame |
dlook | derivative of look vector in camera frame |
index | vector value to differentiate |
Definition at line 566 of file CameraGroundMap.cpp.
|
inherited |
Compute derivative of focal plane coordinate w/r to one of the ellipsoidal radii (a, b, or c)
This method will compute the derivative of the undistorted focal plane coordinate for a ground position with respect to the a (major axis), b (minor axis), or c (polar axis) radius, using the current Spice settings (time and kernels) without resetting the current point values for lat/lon/radius/x/y.
spoint | Surface point whose derivative is to be evalutated |
raxis | Radius axis enumerated partial type (definitions in this header) |
IException::Programmer | "Invalid partial type for this method" |
Definition at line 452 of file CameraGroundMap.cpp.
References _FILEINFO_, Isis::SurfacePoint::GetLatitude(), Isis::SurfacePoint::GetLongitude(), and Isis::Angle::radians().
Referenced by Isis::BundleAdjust::computePartials().
|
inlineinherited |
Definition at line 139 of file CameraGroundMap.h.
References Isis::CameraGroundMap::p_focalPlaneX.
Referenced by Isis::Camera::RawFocalPlanetoImage().
|
inlineinherited |
Definition at line 146 of file CameraGroundMap.h.
References Isis::CameraGroundMap::p_focalPlaneY.
Referenced by Isis::Camera::RawFocalPlanetoImage().
|
virtualinherited |
Compute derivative of focal plane coordinate w/r to instrument using current state from SetImage call.
This method will compute the derivative of the undistorted focal plane coordinate for a ground position with respect to the instrument orientation, using the current Spice settings (time and kernels) without resetting the current point values for lat/lon/radius/x/y.
varType | enumerated partial type (definitions in SpicePosition) |
coefIndex | coefficient index of fit polynomial |
*dx | out] pointer to partial derivative of undistorted focal plane x |
*dy | [out] pointer to partial derivative of undistorted focal plane y |
Definition at line 334 of file CameraGroundMap.cpp.
References Isis::SpiceRotation::ReferenceVector(), and Isis::SpiceRotation::ToReferencePartial().
Referenced by Isis::BundleAdjust::computePartials().
|
virtualinherited |
Compute derivative of focal plane coordinate w/r to ground point using current state.
This method will compute the derivative of the undistorted focal plane coordinate for a ground position with respect to lat, lon, or radius, using the current Spice settings (time and kernels) without resetting the current point values for lat/lon/radius/x/y.
d_pB | Point vector |
*dx | [out] pointer to partial derivative of undistorted focal plane x |
*dy | [out] pointer to partial derivative of undistorted focal plane y |
Reimplemented in Isis::RadarGroundMap.
Definition at line 414 of file CameraGroundMap.cpp.
References Isis::SpiceRotation::J2000Vector(), and Isis::SpiceRotation::ReferenceVector().
Referenced by Isis::BundleAdjust::computePartials().
|
virtualinherited |
Compute derivative w/r to position of focal plane coordinate from ground position using current Spice from SetImage call.
This method will compute the derivative of the undistorted focal plane coordinate for a ground position with respect to a spacecraft position coordinate, using the current Spice settings (time and kernels) without resetting the current point values for lat/lon/radius/x/y.
varType | enumerated partial type (definitions in SpicePosition) |
coefIndex | coefficient index of fit polynomial |
*dx | [out] pointer to partial derivative of undistorted focal plane x |
*dy | [out] pointer to partial derivative of undistorted focal plane y |
Reimplemented in Isis::RadarGroundMap.
Definition at line 295 of file CameraGroundMap.cpp.
References Isis::SpicePosition::CoordinatePartial(), and Isis::SpiceRotation::ReferenceVector().
Referenced by Isis::BundleAdjust::computePartials().
|
virtualinherited |
Compute derivative of focal plane coordinate w/r to target body using current state.
This method will compute the derivative of the undistorted focal plane coordinate for a ground position with respect to the target body orientation, using the current Spice settings (time and kernels) without resetting the current point values for lat/lon/radius/x/y.
varType | enumerated partial type (definitions in SpicePosition) |
coefIndex | coefficient index of fit polynomial |
*dx | [out] pointer to partial derivative of undistorted focal plane x |
*dy | [out] pointer to partial derivative of undistorted focal plane y |
Definition at line 370 of file CameraGroundMap.cpp.
References Isis::SpiceRotation::ReferenceVector(), and Isis::SpiceRotation::toJ2000Partial().
Referenced by Isis::BundleAdjust::computePartials().
|
virtualinherited |
Compute undistorted focal plane coordinate from ground position using current Spice from SetImage call.
This method will compute the undistorted focal plane coordinate for a ground position, using the current Spice settings (time and kernels) without resetting the current point values for lat/lon/radius/m_pB/x/y. The class value for m_lookJ is set by this method.
point | Surface point (ground position) |
cudx | [out] Pointer to computed undistorted x focal plane coordinate |
cudy | [out] Pointer to computed undistorted y focal plane coordinate |
test | Optional parameter to indicate whether to do the back-of-planet test. |
Reimplemented in Isis::RadarGroundMap.
Definition at line 168 of file CameraGroundMap.cpp.
References Isis::SpiceRotation::J2000Vector(), Isis::Displacement::kilometers(), Isis::PI, and Isis::SpiceRotation::ReferenceVector().
Referenced by Isis::BundleAdjust::computePartials(), Isis::ControlPoint::ComputeResiduals(), and Isis::ControlPoint::ComputeResiduals_Millimeters().
|
virtualinherited |
Compute undistorted focal plane coordinate from ground position using current Spice from SetImage call.
This method will compute the undistorted focal plane coordinate for a ground position, using the current Spice settings (time and kernels) without resetting the current point values for lat/lon/radius/m_pB/x/y. The class value for m_lookJ is set by this method.
lat | Latitude in degrees |
lon | Longitude in degrees |
radius | Radius in meters |
cudx | [out] Pointer to computed undistored x focal plane coordinate |
cudy | [out] Pointer to computed undistored y focal plane coordinate |
Definition at line 270 of file CameraGroundMap.cpp.
void Isis::VimsGroundMap::Init | ( | Pvl & | lab | ) |
Initialize vims camera model.
iException::Io | - "Cannot process NYQUIST(undersampled) mode " |
2007-04-16 Tracie Sucharski - Look for unit vectors in the proper directory.
2007-04-18 Tracie Sucharski, The inaccuracy of the 15 Mhz clock (exposure , interline_delay) is already taken care of in the labels values, so remove the adjustment from the code (exp * 1.01725). *Reference: email from John Ivens 11/27/2006.
2007-04-19 Tracie Sucharski, Swap bytes on unit vectors. They are currently LSB binary files. ???Todo:??? Convert unit vectors to text files.
2008-02-05 Tracie Sucharski, Replaced unitVector files with Rick McCloskey's code to calculate look direction.
2009-08-06 Tracie Sucharski, Bug in unit vector change made on 2008-02-05, had the incorrect boresight for VIS Hires.
2013-09-09 Tracie Sucharski, Turns out the times in the labels are NOT corrected, so the corrections NEED to happen in the code. There was discussion among UofA Vims and PDS about reproducing PDS archive with labels corrected, but the decision was made to perform the correction in the code and leave the archive alone. Some history: 08-23-2004 Rick McCloskey gave me the correction to put in the code since he said the label values were incorrect. 11-27-2006 John Ivens said the labels values were corrected, so I removed the correction factor from the code. For more info, See previous history entries: 2007-04-18.
2014-04-09 Tracie Sucharski - When converting the camera model from lat/lon to x/y/z calculations, the range check in the SetGround method was removed. When creating global projections, the pixel data would be replicated in incorrect locations due to the least squares fitting always finding a fit, even if it's incorrect. The range checking was added back in using x/y/z min/max values. However, this caused the pole not to be found, so the min/max z values are adjusted to include the pole if they are within 1 km of the pole. This value was chosen through trial and error, and I have concerns that this may need to be adjusted for images with different resolutions. I think it would just cause a few extra pixels at the edge worse case scenario.
Definition at line 128 of file VimsGroundMap.cpp.
References _FILEINFO_, Isis::Sensor::Coordinate(), Isis::iTime::Et(), Isis::PvlObject::findGroup(), Isis::Spice::getClockTime(), Isis::Camera::IgnoreProjection(), Isis::Distance::kilometers(), Isis::Null, Isis::CameraGroundMap::p_camera, p_camLineOffset, p_camSampOffset, p_channel, p_etStart, p_interlineDelay, p_irExp, p_swathLength, p_swathWidth, p_visExp, p_xBore, p_xPixSize, p_yBore, p_yPixSize, Isis::Camera::ParentLines(), Isis::Camera::ParentSamples(), Isis::IException::Programmer, Isis::Spice::radii(), Isis::Camera::SetImage(), Isis::Sensor::setTime(), Isis::toDouble(), and Isis::PvlObject::Traverse.
|
private |
Determines the look direction in the camera coordinate system.
[out] | v | Look direction vector in camera coordinates |
This method will compute the look direction vector in the camera coordinate system. This code was converted from Rick McCloskey's point_tbl c code.
Definition at line 523 of file VimsGroundMap.cpp.
References Isis::HALFPI, p_camLineOffset, p_camSampOffset, p_ux, p_uy, p_xBore, p_xPixSize, p_yBore, and p_yPixSize.
Referenced by SetFocalPlane().
|
inherited |
Compute derivative of focal plane coordinate w/r to mean of the ellipsoidal radii (a, b, c)
This method will compute the derivative of the undistorted focal plane coordinate for a ground position with respect to the mean of the a (major axis), b (minor axis), and c (polar axis) radius, using the current Spice settings (time and kernels) without resetting the current point values for lat/lon/radius/x/y.
spoint | Surface point whose derivative is to be evalutated |
meanRadius | Computed mean of radii |
Definition at line 502 of file CameraGroundMap.cpp.
References Isis::Displacement::kilometers(), and Isis::Distance::kilometers().
Referenced by Isis::BundleAdjust::computePartials().
|
inherited |
Compute derivative with respect to indicated variable of conversion function from lat/lon/rad to rectangular coord.
spoint | Surface point (ground position) |
wrt | take derivative with respect to this value |
Definition at line 524 of file CameraGroundMap.cpp.
References Isis::SurfacePoint::GetLatitude(), Isis::SurfacePoint::GetLocalRadius(), Isis::SurfacePoint::GetLongitude(), Isis::Distance::kilometers(), and Isis::Angle::radians().
|
virtual |
Compute ground position from focal plane coordinate.
This method will compute the ground position given an undistorted focal plane coordinate. Note that the latitude/longitude value can be obtained from the camera class passed into the constructor.
ux | Distorted focal plane x in millimeters |
uy | Distorted focal plane y in millimeters |
uz | Distorted focal plane z in millimeters |
2008-01-02 Tracie Sucharski - Check incoming pixel for validity against edge of pixel not center.
2008-02-05 Tracie Sucharski, Replaced unitVector files with Rick McCloskey's code to calculate look direction
2008-02-14 Tracie Sucharski, Change imgSamp/imgLine to double so that fractional pixels are used in calculations.
Reimplemented from Isis::CameraGroundMap.
Definition at line 299 of file VimsGroundMap.cpp.
References LookDirection(), Isis::CameraGroundMap::p_camera, p_channel, p_etStart, p_interlineDelay, p_irExp, p_swathWidth, p_ux, p_uy, p_uz, p_visExp, Isis::Camera::ParentLines(), Isis::Camera::ParentSamples(), Isis::Sensor::SetLookDirection(), and Isis::Sensor::setTime().
Compute undistorted focal plane coordinate from ground position.
lat | Planetocentric latitude in degrees |
lon | Planetocentric longitude in degrees |
2007-04-18 Tracie Sucharski - Added check for reasonable match when attempting to find closest lat/lon in map arrays.
2007-09-14 Tracie Sucharski - Added check for longitude outside min/max bounds. Don't know why this wasn't put in before (lat check was in), was it oversight, or did I take it out for some reason???
2007-12-14 Tracie Sucharski - Remove resolution test, too image dependent and the resolution for vims is incorrect due to the instrument having rectangular pixels.
2008-01-02 Tracie Sucharski - Check validity of resulting sample and line against edge of starting ending pixels (0.5/Parent+0.5) instead of center of pixels.
2012-12-03 Tracie Sucharski - Check for valid minLat/maxLat, minLon/maxLon. If none are valid, this means the latMap and lonMap have no valid data, therefore we cannot back project, so return false.
2014-04-08 Tracie Sucharski - Change the sanity check made on 2012-12-03 from lat/lon to xyz.
Reimplemented from Isis::CameraGroundMap.
Definition at line 371 of file VimsGroundMap.cpp.
References Isis::LeastSquares::AddKnown(), Isis::Angle::degrees(), Isis::LeastSquares::Evaluate(), Isis::Sensor::HasSurfaceIntersection(), Isis::Camera::IgnoreProjection(), Isis::Distance::kilometers(), Isis::LeastSquares::Knowns(), Isis::Sensor::LocalRadius(), Isis::ShapeModel::name(), Isis::CameraGroundMap::p_camera, Isis::CameraGroundMap::p_focalPlaneX, Isis::CameraGroundMap::p_focalPlaneY, Isis::Camera::ParentLines(), Isis::Camera::ParentSamples(), Isis::Angle::radians(), Isis::Camera::SetImage(), Isis::Target::shape(), Isis::LeastSquares::Solve(), and Isis::Spice::target().
Referenced by SetGround().
|
virtual |
Compute undistorted focal plane coordinate from ground position.
surfacePoint | Ground surface point |
Reimplemented from Isis::CameraGroundMap.
Definition at line 504 of file VimsGroundMap.cpp.
References Isis::SurfacePoint::GetLatitude(), Isis::SurfacePoint::GetLongitude(), and SetGround().
|
protectedinherited |
Definition at line 148 of file CameraGroundMap.h.
Referenced by Isis::PushFrameCameraGroundMap::FindDistance(), Isis::PushFrameCameraGroundMap::FindSpacecraftDistance(), Init(), SetFocalPlane(), Isis::PushFrameCameraGroundMap::SetGround(), Isis::LineScanCameraGroundMap::SetGround(), and SetGround().
|
private |
Line offset.
Definition at line 133 of file VimsGroundMap.h.
Referenced by Init(), and LookDirection().
|
private |
Sample offset.
Definition at line 132 of file VimsGroundMap.h.
Referenced by Init(), and LookDirection().
|
private |
Channel keyword value from the instrument group of the labels.
Possible values are IR or VIS
Definition at line 124 of file VimsGroundMap.h.
Referenced by Init(), and SetFocalPlane().
|
private |
Start ephemeris time.
Definition at line 110 of file VimsGroundMap.h.
Referenced by Init(), and SetFocalPlane().
|
protectedinherited |
Camera's x focal plane coordinate.
Definition at line 152 of file CameraGroundMap.h.
Referenced by Isis::CameraGroundMap::FocalPlaneX(), and SetGround().
|
protectedinherited |
Camera's y focal plane coordinate.
Definition at line 153 of file CameraGroundMap.h.
Referenced by Isis::CameraGroundMap::FocalPlaneY(), and SetGround().
|
private |
InterlineDelayDuration keyword value from the instrument group of the labels, divided by 1000.
Definition at line 112 of file VimsGroundMap.h.
Referenced by Init(), and SetFocalPlane().
|
private |
IR exposure duration, divided by 1000.
Definition at line 127 of file VimsGroundMap.h.
Referenced by Init(), and SetFocalPlane().
|
private |
SwathLength keyword value from the instrument group of the labels.
This will be image size unless occultation image
Definition at line 130 of file VimsGroundMap.h.
Referenced by Init().
|
private |
SwathWidth keyword value from the instrument group of the labels.
This will be image size unless occultation image
Definition at line 128 of file VimsGroundMap.h.
Referenced by Init(), and SetFocalPlane().
|
private |
Distorted focal plane x, in millimeters.
Definition at line 115 of file VimsGroundMap.h.
Referenced by LookDirection(), and SetFocalPlane().
|
private |
Distorted focal plane y, in millimeters.
Definition at line 116 of file VimsGroundMap.h.
Referenced by LookDirection(), and SetFocalPlane().
|
private |
Distorted focal plane z, in millimeters.
Definition at line 117 of file VimsGroundMap.h.
Referenced by SetFocalPlane().
|
private |
VIS exposure duration, divided by 1000.
Definition at line 126 of file VimsGroundMap.h.
Referenced by Init(), and SetFocalPlane().
|
private |
X boresight.
Definition at line 121 of file VimsGroundMap.h.
Referenced by Init(), and LookDirection().
|
private |
X pixel size.
Definition at line 119 of file VimsGroundMap.h.
Referenced by Init(), and LookDirection().
|
private |
Y boresight.
Definition at line 122 of file VimsGroundMap.h.
Referenced by Init(), and LookDirection().
|
private |
Y pixel size.
Definition at line 120 of file VimsGroundMap.h.
Referenced by Init(), and LookDirection().