/usr/include/ossim/projection/ossimSensorModelTuple.h is in libossim-dev 2.2.2-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 | //----------------------------------------------------------------------------
//
// License: See top level LICENSE.txt file.
//
// Author: David Hicks
//
// Description: Base class for tuple-based ossimSensorModel metric operations.
//----------------------------------------------------------------------------
// $Id: ossimSensorModelTuple.h 21806 2012-10-05 14:20:45Z dhicks $
#ifndef ossimSensorModelTuple_HEADER
#define ossimSensorModelTuple_HEADER
#include <ossim/projection/ossimSensorModel.h>
#include <ossim/base/ossimDpt.h>
#include <ossim/elevation/ossimHgtRef.h>
#include <ossim/matrix/newmat.h>
// Forward class declarations:
class ossimEcefPoint;
typedef vector<ossimDpt> DptSet_t;
/**
* Container class to hold computed rpc model inputs to the
* ossimPositionQualityEvaluator constructor. These are stored for retrieval
* purposes only and will only be initialized if the underlying sensor model
* is an rpc.
*/
class OSSIM_DLL ossimRpcPqeInputs
{
public:
ossimRpcPqeInputs();
~ossimRpcPqeInputs();
ossim_float64 theRpcElevationAngle; // decimal degrees
ossim_float64 theRpcAzimuthAngle; // decimal degrees
ossim_float64 theRpcBiasError;
ossim_float64 theRpcRandError;
ossimColumnVector3d theSurfaceNormalVector;
NEWMAT::Matrix theSurfaceCovMatrix;
};
class OSSIM_DLL ossimSensorModelTuple
{
public:
enum DeriveMode
{
OBS_INIT =-99,
EVALUATE =-98,
P_WRT_X = -1,
P_WRT_Y = -2,
P_WRT_Z = -3
};
enum IntersectStatus
{
OP_SUCCESS = 0,
ERROR_PROP_FAIL = 1,
OP_FAIL = 2
};
/** @brief default constructor */
ossimSensorModelTuple();
/** @brief virtual destructor */
~ossimSensorModelTuple();
/**
* @brief Method to add an image to the tuple.
*/
void addImage(ossimSensorModel* image);
/**
* @brief print method.
*/
std::ostream& print(std::ostream& out) const;
/**
* @brief Multi-image intersection method.
*
* @param obs Vector of image point observations.
* @param pt Intersected ECF position of point.
* @param covMat 3X3 ECF position covariance matrix [m].
*
* @return true on success, false on error.
*/
ossimSensorModelTuple::IntersectStatus intersect(
const DptSet_t obs,
ossimEcefPoint& pt,
NEWMAT::Matrix& covMat) const;
/**
* @brief Single-image/DEM intersection method.
*
* @param img Image set index of current image.
* @param obs Image point observations.
* @param pt Intersected ECF position of point.
* @param covMat 3X3 ECF position covariance matrix [m].
*
* @return true on success, false on error.
*/
ossimSensorModelTuple::IntersectStatus intersect(
const ossim_int32& img,
const ossimDpt& obs,
ossimEcefPoint& pt,
NEWMAT::Matrix& covMat);
/**
* @brief Single-image/height intersection method.
*
* @param img Image set index of current image.
* @param obs Image point observations.
* @param heightAboveEllipsoid Desired intersection height [m].
* @param pt Intersected ECF position of point.
* @param covMat 3X3 ECF position covariance matrix [m].
*
* @return true on success, false on error.
*
* @NOTE: This method's "const" qualifier was removed as it stores rpc
* inputs to the pqe constructor for report purposes.
*/
ossimSensorModelTuple::IntersectStatus intersect(
const ossim_int32& img,
const ossimDpt& obs,
const ossim_float64& heightAboveEllipsoid,
ossimEcefPoint& pt,
NEWMAT::Matrix& covMat);
/**
* @brief Set intersection surface accuracy method.
*
* @param surfCE90 90% CE [m].
* @param surfLE90 90% LE [m].
*
* @return true on success, false on exception.
* Entry of negative value(s) indicates "no DEM" error prop for RPC
*/
bool setIntersectionSurfaceAccuracy(const ossim_float64& surfCE90,
const ossim_float64& surfLE90);
/** @param obj Object to initialize with rpc pqe inputs. */
void getRpcPqeInputs(ossimRpcPqeInputs& obj) const;
private:
mutable std::vector<ossimRefPtr<ossimSensorModel> > theImages;
ossim_int32 theNumImages;
ossim_float64 theSurfCE90;
ossim_float64 theSurfLE90;
bool theSurfAccSet;
bool theSurfAccRepresentsNoDEM;
/**
* Rpc model only, container to capture pqe inputs for report purposes only.
*/
ossimRpcPqeInputs theRpcPqeInputs;
/**
* @brief Compute single image intersection covariance matrix.
*
* @param img Image set index of current image.
* @param obs Image point observations.
* @param ptG Current ground estimate.
* @param cRefType Current height reference type.
* @param covMat 3X3 ECF position covariance matrix.
*
* @return true on success, false on error.
*/
bool computeSingleInterCov(const ossim_int32& img,
const ossimDpt& obs,
const ossimGpt& ptG,
HeightRefType_t cRefType,
NEWMAT::Matrix& covMat);
/**
* @brief Get observation equation components.
*
* @param img Image set index of current image.
* @param iter Current iteration.
* @param obs Observations.
* @param ptEst Current ground estimate.
* @param resid Observation residuals.
* @param B Matrix of partials of observations WRT X,Y,Z.
* @param W Weight matrix of observations.
*
* @param img Image set index of current image.
*/
bool getGroundObsEqComponents(const ossim_int32 img,
const ossimDpt& obs,
const ossimGpt& ptEst,
ossimDpt& resid,
NEWMAT::Matrix& B,
NEWMAT::SymmetricMatrix& W) const;
NEWMAT::Matrix invert(const NEWMAT::Matrix& m) const;
};
#endif /* #ifndef ossimSensorModelTuple_HEADER */
|