OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
Public Member Functions | Protected Attributes | List of all members
ossimSpectraboticsRedEdgeModel Class Reference

#include <ossimSpectraboticsRedEdgeModel.h>

Inheritance diagram for ossimSpectraboticsRedEdgeModel:
ossimSensorModel ossimProjection ossimOptimizableProjection ossimAdjustableParameterInterface ossimObject ossimErrorStatusInterface ossimReferenced

Public Member Functions

 ossimSpectraboticsRedEdgeModel ()
 
 ossimSpectraboticsRedEdgeModel (const ossimDrect &imageRect, const ossimGpt &platformPosition, double roll, double pitch, double heading, const ossimDpt &principalPoint, double focalLength, const ossimDpt &pixelSize)
 
 ossimSpectraboticsRedEdgeModel (const ossimSpectraboticsRedEdgeModel &src)
 
virtual ossimObjectdup () const
 
virtual void imagingRay (const ossimDpt &image_point, ossimEcefRay &image_ray) const
 
void lineSampleToWorld (const ossimDpt &image_point, ossimGpt &gpt) const
 
virtual void lineSampleHeightToWorld (const ossimDpt &image_point, const double &heightEllipsoid, ossimGpt &worldPoint) const
 
virtual void worldToLineSample (const ossimGpt &world_point, ossimDpt &image_point) const
 
virtual void updateModel ()
 
void setPrincipalPoint (ossimDpt principalPoint)
 
virtual bool insideImage (const ossimDpt &p) const
 
void setRollPitchHeading (double roll, double pitch, double heading)
 
void setPixelSize (const ossimDpt &pixelSize)
 
void setImageRect (const ossimDrect &rect)
 
void setFocalLength (double focalLength)
 
void setPlatformPosition (const ossimGpt &gpt)
 
virtual bool saveState (ossimKeywordlist &kwl, const char *prefix=0) const
 
virtual bool loadState (const ossimKeywordlist &kwl, const char *prefix=0)
 
virtual void initAdjustableParameters ()
 
virtual bool useForward () const
 
virtual bool setupOptimizer (const ossimString &init_file)
 ground to image faster (you don't need DEM) More...
 
- Public Member Functions inherited from ossimSensorModel
 ossimSensorModel ()
 
 ossimSensorModel (const ossimSensorModel &copy_this)
 
 ossimSensorModel (const ossimKeywordlist &geom_kwl)
 
const ossimSensorModeloperator= (const ossimSensorModel &rhs)
 assignment operator More...
 
virtual ossimObjectgetBaseObject ()
 
virtual const ossimObjectgetBaseObject () const
 
virtual ossimGpt origin () const
 
virtual ossimDpt getMetersPerPixel () const
 
virtual const double & getNominalPosError () const
 Returns the estimated Absolute horizontal position error (CE90) of the sensor model. More...
 
virtual const double & getRelativePosError () const
 Returns the estimated RELATIVE horizontal position error (CE90) of the sensor model. More...
 
virtual void setNominalPosError (const double &ce90)
 Assigns the absolute image position error uncertainty (abs CE90) More...
 
virtual void setRelativePosError (const double &ce90)
 Assigns the relative image position error uncertainty (rel CE90) More...
 
virtual std::ostream & print (std::ostream &out) const
 
void setRefImgPt (const ossimDpt &pt)
 Sets the center line sampe of the image. More...
 
void setRefGndPt (const ossimGpt &pt)
 Sets the center latitude, longitude, height of the image. More...
 
void setImageRect (const ossimDrect &imageRect)
 
void setGroundRect (const ossimGpt &ul, const ossimGpt &ur, const ossimGpt &lr, const ossimGpt &ll)
 
ossimDpt imageSize () const
 
void setImageSize (const ossimDpt &size)
 
virtual void adjustableParametersChanged ()
 
virtual bool operator== (const ossimProjection &proj) const
 
const ossimStringgetImageID () const
 Access methods: More...
 
const ossimDrectgetImageClipRect () const
 
virtual ossim_uint32 degreesOfFreedom () const
 
virtual bool needsInitialState () const
 needsInitialState() More...
 
virtual double optimizeFit (const ossimTieGptSet &tieSet, double *targetVariance=0)
 
virtual ossimDpt getForwardDeriv (int parmIdx, const ossimGpt &gpos, double hdelta=1e-11)
 
virtual ossimGpt getInverseDeriv (int parmIdx, const ossimDpt &ipos, double hdelta=1e-11)
 
virtual ossimSensorModel::CovMatStatus getObsCovMat (const ossimDpt &ipos, NEWMAT::SymmetricMatrix &Cov, const ossim_float64 defPointingSigma=0.5) const
 Gives 2X2 covariance matrix of observations. More...
 
virtual bool isAffectedByElevation () const
 Implementation of pure virtual ossimProjection::isAffectedByElevation method. More...
 
void computeGsd ()
 This method computes the ground sample distance(gsd) and sets class attributes theGSD and theMeanGSD by doing a lineSampleHeightToWorld on four points and calculating the distance from them. More...
 
virtual bool getImageGeometry (const ossimString &, const ossimString &, ossimKeywordlist &) const
 Extracts geometry info from a non-ossim key,value pair to an ossim keyword list. More...
 
- Public Member Functions inherited from ossimProjection
 ossimProjection ()
 
virtual ~ossimProjection ()
 
virtual ossimDpt forward (const ossimGpt &wp) const
 
virtual ossimGpt inverse (const ossimDpt &pp) const
 
virtual void getRoundTripError (const ossimDpt &imagePoint, ossimDpt &errorResult) const
 
virtual void getRoundTripError (const ossimGpt &groundPoint, ossimDpt &errorResult) const
 
virtual void getGroundClipPoints (ossimGeoPolygon &gpts) const
 
virtual bool isEqualTo (const ossimObject &obj, ossimCompareType compareType=OSSIM_COMPARE_FULL) const
 
virtual bool operator!= (const ossimProjection &projection) const
 
- Public Member Functions inherited from ossimObject
 ossimObject ()
 
virtual ~ossimObject ()
 
virtual ossimString getShortName () const
 
virtual ossimString getLongName () const
 
virtual ossimString getDescription () const
 
virtual ossimString getClassName () const
 
virtual RTTItypeid getType () const
 
virtual bool canCastTo (ossimObject *obj) const
 
virtual bool canCastTo (const RTTItypeid &id) const
 
virtual bool canCastTo (const ossimString &parentClassName) const
 
virtual void accept (ossimVisitor &visitor)
 
- Public Member Functions inherited from ossimReferenced
 ossimReferenced ()
 
 ossimReferenced (const ossimReferenced &)
 
ossimReferencedoperator= (const ossimReferenced &)
 
void ref () const
 increment the reference count by one, indicating that this object has another pointer which is referencing it. More...
 
void unref () const
 decrement the reference count by one, indicating that a pointer to this object is referencing it. More...
 
void unref_nodelete () const
 decrement the reference count by one, indicating that a pointer to this object is referencing it. More...
 
int referenceCount () const
 
- Public Member Functions inherited from ossimErrorStatusInterface
 ossimErrorStatusInterface ()
 
virtual ~ossimErrorStatusInterface ()
 
virtual ossimErrorCode getErrorStatus () const
 
virtual ossimString getErrorStatusString () const
 
virtual void setErrorStatus (ossimErrorCode error_status) const
 
virtual void setErrorStatus () const
 
virtual void clearErrorStatus () const
 
bool hasError () const
 
- Public Member Functions inherited from ossimOptimizableProjection
 ossimOptimizableProjection ()
 
 ossimOptimizableProjection (const ossimOptimizableProjection &source)
 
virtual ~ossimOptimizableProjection ()
 
virtual ossimOptimizableProjectionoperator= (const ossimOptimizableProjection &source)
 
- Public Member Functions inherited from ossimAdjustableParameterInterface
 ossimAdjustableParameterInterface ()
 
 ossimAdjustableParameterInterface (const ossimAdjustableParameterInterface &rhs)
 
virtual ~ossimAdjustableParameterInterface ()
 
void newAdjustment (ossim_uint32 numberOfParameters=0)
 
void setAdjustmentDescription (const ossimString &description)
 
ossimString getAdjustmentDescription () const
 
ossimString getAdjustmentDescription (ossim_uint32 adjustmentIdx) const
 Returns adjustmentDescription of specific adjustmentInfo. More...
 
void setCurrentAdjustment (ossim_uint32 adjustmentIndex, bool notify=false)
 
bool setCurrentAdjustment (const ossimString &description, bool notify=false)
 Sets the current adjustment to the adjustment with a matching description. More...
 
void eraseAdjustment (bool notify)
 
void eraseAdjustment (ossim_uint32 idx, bool notify)
 
void resetAdjustableParameters (bool notify=false)
 
void copyAdjustment (ossim_uint32 idx, bool notify)
 
void copyAdjustment (bool notify=false)
 
void keepAdjustment (ossim_uint32 idx, bool createCopy)
 
virtual void keepAdjustment (bool createCopy=true)
 
const ossimAdjustableParameterInterfaceoperator= (const ossimAdjustableParameterInterface &rhs)
 
void removeAllAdjustments ()
 
ossim_uint32 getNumberOfAdjustableParameters () const
 
double getAdjustableParameter (ossim_uint32 idx) const
 
virtual void setAdjustableParameter (ossim_uint32 idx, double value, bool notify=false)
 
virtual void setAdjustableParameter (ossim_uint32 idx, double value, double sigma, bool notify=false)
 
double getParameterSigma (ossim_uint32 idx) const
 
void setParameterSigma (ossim_uint32 idx, double value, bool notify=false)
 
ossimUnitType getParameterUnit (ossim_uint32 idx) const
 
void setParameterUnit (ossim_uint32 idx, ossimUnitType unit)
 
void setParameterUnit (ossim_uint32 idx, const ossimString &unit)
 
void setParameterCenter (ossim_uint32 idx, double center, bool notify=false)
 
double getParameterCenter (ossim_uint32 idx) const
 
double computeParameterOffset (ossim_uint32 idx) const
 
void setParameterOffset (ossim_uint32 idx, ossim_float64 value, bool notify=false)
 
ossimString getParameterDescription (ossim_uint32 idx) const
 
void setParameterDescription (ossim_uint32 idx, const ossimString &descrption)
 
ossim_int32 findParameterIdxGivenDescription (ossim_uint32 adjustmentIdx, const ossimString &name) const
 
ossim_int32 findParameterIdxContainingDescription (ossim_uint32 adjustmentIdx, const ossimString &name) const
 
bool isParameterLocked (ossim_uint32 idx) const
 
void setParameterLockFlag (ossim_uint32 idxParam, bool flag)
 
bool getParameterLockFlag (ossim_uint32 idx) const
 
void lockAllParametersCurrentAdjustment ()
 
void unlockAllParametersCurrentAdjustment ()
 
void lockAllParameters (ossim_uint32 idxAdjustment)
 
void unlockAllParameters (ossim_uint32 idxAdjustment)
 
void resizeAdjustableParameterArray (ossim_uint32 numberOfParameters)
 
void setAdjustment (const ossimAdjustmentInfo &adj, bool notify=false)
 
void setAdjustment (ossim_uint32 idx, const ossimAdjustmentInfo &adj, bool notify=false)
 
void addAdjustment (const ossimAdjustmentInfo &adj, bool notify)
 
void getAdjustment (ossimAdjustmentInfo &adj) const
 
void getAdjustment (ossim_uint32 idx, ossimAdjustmentInfo &adj) const
 
ossim_uint32 getNumberOfAdjustments () const
 
ossim_uint32 getCurrentAdjustmentIdx () const
 
void setDirtyFlag (bool flag=true)
 
void setAllDirtyFlag (bool flag=true)
 
bool hasDirtyAdjustments () const
 
virtual void saveCurrentAdjustmentOnly (ossimKeywordlist &kwl, const ossimString &prefix=ossimString(""))
 Saves the current active adjustment to the KWL file. More...
 
bool saveAdjustments (ossimKeywordlist &kwl, const ossimString &prefix=ossimString("")) const
 Save all adjustments to the KWL file. More...
 
bool loadAdjustments (const ossimKeywordlist &kwl, const ossimString &prefix=ossimString(""))
 
std::ostream & print (std::ostream &out) const
 Dumps the currently active adjustment to ostream. More...
 

Protected Attributes

NEWMAT::Matrix m_compositeMatrix
 uses file path to init model More...
 
NEWMAT::Matrix m_compositeMatrixInverse
 
double m_roll
 
double m_pitch
 
double m_heading
 
double m_fov
 
ossimDpt m_principalPoint
 
ossimDpt m_calibratedCenter
 
ossimDpt m_pixelSize
 
double m_focalLength
 
double m_norm
 
double m_focalX
 
double m_focalY
 
ossimEcefPoint m_ecefPlatformPosition
 
ossimRefPtr< ossimTangentialRadialLensDistortionm_lensDistortion
 
ossimEcefPoint m_adjEcefPlatformPosition
 
- Protected Attributes inherited from ossimSensorModel
ossimIpt theImageSize
 
ossimDpt theSubImageOffset
 
ossimString theImageID
 
ossimString theSensorID
 
ossimDpt theGSD
 
ossim_float64 theMeanGSD
 
ossimGpt theRefGndPt
 
ossimDpt theRefImgPt
 
ossimPolygon theBoundGndPolygon
 
ossimDrect theImageClipRect
 
ossim_float64 theRelPosError
 
ossim_float64 theNominalPosError
 
ossimDpt theParWRTx
 Partials for current point. More...
 
ossimDpt theParWRTy
 
ossimDpt theParWRTz
 
ossimDpt theObs
 Observations & residuals for current point. More...
 
ossimDpt theResid
 
ossimRefPtr< ossimProjectiontheSeedFunction
 Used as an initial guess for iterative solutions and a guess for points outside the support bounds. More...
 
bool theExtrapolateImageFlag
 
bool theExtrapolateGroundFlag
 
- Protected Attributes inherited from ossimErrorStatusInterface
ossimErrorCode theErrorStatus
 

Additional Inherited Members

- Public Types inherited from ossimSensorModel
enum  CovMatStatus { COV_INVALID = 0, COV_PARTIAL = 1, COV_FULL = 2 }
 
enum  DeriveMode {
  OBS_INIT =-99, EVALUATE =-98, P_WRT_X = -1, P_WRT_Y = -2,
  P_WRT_Z = -3
}
 
- Static Public Member Functions inherited from ossimSensorModel
static void writeGeomTemplate (ostream &os)
 
- Protected Member Functions inherited from ossimSensorModel
virtual ~ossimSensorModel ()
 
virtual ossimDpt extrapolate (const ossimGpt &gp) const
 
virtual ossimGpt extrapolate (const ossimDpt &ip, const double &height=ossim::nan()) const
 
void buildNormalEquation (const ossimTieGptSet &tieSet, NEWMAT::SymmetricMatrix &A, NEWMAT::ColumnVector &residue, NEWMAT::ColumnVector &projResidue, double pstep_scale)
 
NEWMAT::ColumnVector getResidue (const ossimTieGptSet &tieSet)
 
NEWMAT::ColumnVector solveLeastSquares (NEWMAT::SymmetricMatrix &A, NEWMAT::ColumnVector &r) const
 
NEWMAT::Matrix invert (const NEWMAT::Matrix &m) const
 stable invert stolen from ossimRpcSolver More...
 
- Protected Member Functions inherited from ossimReferenced
virtual ~ossimReferenced ()
 
- Protected Member Functions inherited from ossimAdjustableParameterInterface
bool paramChanged (ossim_uint32 param_idx) const
 Returns true if specified parameter has been modified since last setAllChangeFlag(false) call. More...
 
void setAllChangeFlags (bool areChanged)
 Sets all the change flags to the boolean indicated to indicate parameters are changed (TRUE) or not (FALSE). More...
 
void initChangeFlags ()
 Initializes the change flags to TRUE. More...
 

Detailed Description

Definition at line 9 of file ossimSpectraboticsRedEdgeModel.h.

Constructor & Destructor Documentation

◆ ossimSpectraboticsRedEdgeModel() [1/3]

ossimSpectraboticsRedEdgeModel::ossimSpectraboticsRedEdgeModel ( )

Definition at line 29 of file ossimSpectraboticsRedEdgeModel.cpp.

References ossimMatrix4x4::createIdentity(), initAdjustableParameters(), m_adjEcefPlatformPosition, m_compositeMatrix, m_compositeMatrixInverse, m_ecefPlatformPosition, m_focalLength, m_fov, m_heading, m_lensDistortion, m_pitch, m_pixelSize, m_roll, ossimSensorModel::theGSD, ossimSensorModel::theMeanGSD, ossimDpt::x, and ossimDpt::y.

Referenced by dup().

30 {
33  m_roll = 0.0;
34  m_pitch = 0.0;
35  m_heading = 0.0;
36  m_focalLength = 5.5;
37  m_pixelSize = ossimDpt(0.003, 0.003);
38  m_ecefPlatformPosition = ossimGpt(0.0,0.0, 1000.0);
39  m_adjEcefPlatformPosition = ossimGpt(0.0,0.0, 1000.0);
40  theGSD.x = 0.076;
41  theGSD.y = 0.076;
42  theMeanGSD = 0.076;
43  m_fov = 48.8; // degrees
46 
47  if (traceDebug())
48  {
50  << "ossimSpectraboticsRedEdgeModel::ossimSpectrabotics DEBUG:" << endl;
51 #ifdef OSSIM_ID_ENABLED
52  ossimNotify(ossimNotifyLevel_DEBUG)<< "OSSIM_ID: " << OSSIM_ID << endl;
53 #endif
54  }
55 }
double y
Definition: ossimDpt.h:165
ossimRefPtr< ossimTangentialRadialLensDistortion > m_lensDistortion
static NEWMAT::Matrix createIdentity()
double x
Definition: ossimDpt.h:164
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
ossim_float64 theMeanGSD
NEWMAT::Matrix m_compositeMatrix
uses file path to init model

◆ ossimSpectraboticsRedEdgeModel() [2/3]

ossimSpectraboticsRedEdgeModel::ossimSpectraboticsRedEdgeModel ( const ossimDrect imageRect,
const ossimGpt platformPosition,
double  roll,
double  pitch,
double  heading,
const ossimDpt principalPoint,
double  focalLength,
const ossimDpt pixelSize 
)

Definition at line 56 of file ossimSpectraboticsRedEdgeModel.cpp.

References ossimMatrix4x4::createIdentity(), initAdjustableParameters(), m_adjEcefPlatformPosition, m_compositeMatrix, m_compositeMatrixInverse, m_ecefPlatformPosition, m_focalLength, m_heading, m_lensDistortion, m_pitch, m_pixelSize, m_roll, ossimDrect::midPoint(), ossimNotify(), ossimNotifyLevel_WARN, ossimSensorModel::theImageClipRect, ossimSensorModel::theRefImgPt, updateModel(), and ossimException::what().

64 {
65  theImageClipRect = imageRect;
69  m_roll = roll;
70  m_pitch = pitch;
71  m_heading = heading;
72  m_focalLength = focalLength;
73  m_pixelSize = pixelSize;
74  m_ecefPlatformPosition = platformPosition;
75  m_adjEcefPlatformPosition = platformPosition;
78  updateModel();
79 
80  try
81  {
82  // Method throws ossimException.
83  // computeGsd();
84  }
85  catch (const ossimException& e)
86  {
88  << "ossimSpectrabotics Constructor caught Exception:\n"
89  << e.what() << std::endl;
90  }
91 
92  if (traceDebug())
93  {
95  << "ossimSpectraboticsRedEdgeModel::ossimSpectrabotics DEBUG:" << endl;
96 #ifdef OSSIM_ID_ENABLED
97  ossimNotify(ossimNotifyLevel_DEBUG)<< "OSSIM_ID: " << OSSIM_ID << endl;
98 #endif
99  }
100 }
ossimRefPtr< ossimTangentialRadialLensDistortion > m_lensDistortion
virtual const char * what() const
Returns the error message.
ossimDrect theImageClipRect
static NEWMAT::Matrix createIdentity()
ossimDpt midPoint() const
Definition: ossimDrect.h:817
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
NEWMAT::Matrix m_compositeMatrix
uses file path to init model

◆ ossimSpectraboticsRedEdgeModel() [3/3]

ossimSpectraboticsRedEdgeModel::ossimSpectraboticsRedEdgeModel ( const ossimSpectraboticsRedEdgeModel src)

Member Function Documentation

◆ dup()

ossimObject * ossimSpectraboticsRedEdgeModel::dup ( ) const
virtual

◆ imagingRay()

void ossimSpectraboticsRedEdgeModel::imagingRay ( const ossimDpt image_point,
ossimEcefRay image_ray 
) const
virtual

METHOD: imagingRay(image_point, &ossimEcefRay) Given an image point, returns a ray originating at some arbitrarily high point (ideally at the sensor position) and pointing towards the target. Implemented here but should be overriden for more efficient solution.

Reimplemented from ossimSensorModel.

Definition at line 122 of file ossimSpectraboticsRedEdgeModel.cpp.

Referenced by lineSampleHeightToWorld().

124 {
125  if(traceDebug())
126  {
127  ossimNotify(ossimNotifyLevel_DEBUG) << "ossimSpectraboticsRedEdgeModel::imagingRay: ..... entered" << std::endl;
128  }
129  ossimDpt film (image_point.x-m_calibratedCenter.x,
130  m_calibratedCenter.y - image_point.y); //- theRefImgPt);
131 // ossimDpt film (image_point-m_calibratedCenter); //- theRefImgPt);
132  if(m_lensDistortion.valid())
133  {
134  ossimDpt tempFilm(film.x/m_norm, film.y/m_norm);
135  ossimDpt filmOut;
136  m_lensDistortion->undistort(tempFilm, filmOut);
137  film.x = filmOut.x*m_norm;
138  film.y = filmOut.y*m_norm;
139  }
140  film.x *= m_pixelSize.x; // pixel size on the film
141  film.y *= m_pixelSize.y; // pixel size on the film
142  ossimColumnVector3d cam_ray_dir (film.x,
143  film.y,
144  -m_focalLength);
145  ossimEcefVector ecf_ray_dir (m_compositeMatrix*cam_ray_dir);
146  ecf_ray_dir = ecf_ray_dir*(1.0/ecf_ray_dir.magnitude());
147 
149  image_ray.setDirection(ecf_ray_dir);
150 }
bool valid() const
Definition: ossimRefPtr.h:75
virtual void undistort(const ossimDpt &input, ossimDpt &output) const
double y
Definition: ossimDpt.h:165
void setOrigin(const ossimEcefPoint &orig)
Definition: ossimEcefRay.h:81
ossimRefPtr< ossimTangentialRadialLensDistortion > m_lensDistortion
double x
Definition: ossimDpt.h:164
void setDirection(const ossimEcefVector &d)
Definition: ossimEcefRay.h:82
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
NEWMAT::Matrix m_compositeMatrix
uses file path to init model

◆ initAdjustableParameters()

void ossimSpectraboticsRedEdgeModel::initAdjustableParameters ( )
virtual

Reimplemented from ossimAdjustableParameterInterface.

Definition at line 298 of file ossimSpectraboticsRedEdgeModel.cpp.

References ossimAdjustableParameterInterface::resizeAdjustableParameterArray(), ossimAdjustableParameterInterface::setAdjustableParameter(), ossimAdjustableParameterInterface::setParameterDescription(), ossimAdjustableParameterInterface::setParameterSigma(), and ossimAdjustableParameterInterface::setParameterUnit().

Referenced by ossimSpectraboticsRedEdgeModel().

299 {
300 
302 
303  setAdjustableParameter(0, 0.0);
304  setParameterDescription(0, "x_offset");
305  setParameterUnit(0, "pixels");
306 
307  setAdjustableParameter(1, 0.0);
308  setParameterDescription(1, "y_offset");
309  setParameterUnit(1, "pixels");
310 
311  setAdjustableParameter(2, 0.0);
312  setParameterDescription(2, "roll");
313  setParameterUnit(2, "degrees");
314 
315  setAdjustableParameter(3, 0.0);
316  setParameterDescription(3, "pitch");
317  setParameterUnit(3, "degrees");
318 
319  setAdjustableParameter(4, 0.0);
320  setParameterDescription(4, "heading");
321  setParameterUnit(4, "degrees");
322 
323  setAdjustableParameter(5, 0.0);
324  setParameterDescription(5, "altitude");
325  setParameterUnit(5, "meters");
326 
327 
328  setParameterSigma(0, 50.0);
329  setParameterSigma(1, 50.0);
330  setParameterSigma(2, 1);
331  setParameterSigma(3, 1);
332  setParameterSigma(4, 10);
333  setParameterSigma(5, 50);
334 }
void setParameterDescription(ossim_uint32 idx, const ossimString &descrption)
void setParameterUnit(ossim_uint32 idx, ossimUnitType unit)
virtual void setAdjustableParameter(ossim_uint32 idx, double value, bool notify=false)
void resizeAdjustableParameterArray(ossim_uint32 numberOfParameters)
void setParameterSigma(ossim_uint32 idx, double value, bool notify=false)

◆ insideImage()

virtual bool ossimSpectraboticsRedEdgeModel::insideImage ( const ossimDpt p) const
inlinevirtual

METHOD: insideImage(image_point) Returns true if the image_point lies inside the image rectangle.

Reimplemented from ossimSensorModel.

Definition at line 41 of file ossimSpectraboticsRedEdgeModel.h.

42  {
43  /* return( (p.u>=(0.0-FLT_EPSILON)) && */
44  /* (p.u<=(double)(theImageSize.u-(1-FLT_EPSILON))) && */
45  /* (p.v>=(0.0-FLT_EPSILON)) && */
46  /* (p.v<=(double)(theImageSize.v-(1-FLT_EPSILON))) ); */
47  // if it's close to the edge we will consider it inside the image
48  //
50  }
bool pointWithin(const ossimDpt &pt, double epsilon=0.0) const
Definition: ossimDrect.h:781
ossim_float64 width() const
Definition: ossimDrect.h:522
ossimDrect theImageClipRect

◆ lineSampleHeightToWorld()

void ossimSpectraboticsRedEdgeModel::lineSampleHeightToWorld ( const ossimDpt lineSampPt,
const double &  heightEllipsoid,
ossimGpt worldPt 
) const
virtual

METHOD: lineSampleHeightToWorld This is the pure virtual that performs the actual work of projecting the image point to the given elevation above Ellipsoid.

Implements ossimSensorModel.

Definition at line 191 of file ossimSpectraboticsRedEdgeModel.cpp.

References imagingRay(), and ossimEcefRay::intersectAboveEarthEllipsoid().

194 {
195 // if (!insideImage(image_point))
196 // {
197 // worldPoint.makeNan();
198 // worldPoint = extrapolate(image_point, heightEllipsoid);
199 // }
200 // else
201  {
202  //***
203  // First establish imaging ray from image point:
204  //***
205  ossimEcefRay ray;
206  imagingRay(image_point, ray);
207  ossimEcefPoint Pecf (ray.intersectAboveEarthEllipsoid(heightEllipsoid));
208  worldPoint = ossimGpt(Pecf);
209  }
210 }
ossimEcefPoint intersectAboveEarthEllipsoid(const double &heightAboveEllipsoid, const ossimDatum *aDatum=ossimDatumFactory::instance() ->wgs84()) const
virtual void imagingRay(const ossimDpt &image_point, ossimEcefRay &image_ray) const

◆ lineSampleToWorld()

void ossimSpectraboticsRedEdgeModel::lineSampleToWorld ( const ossimDpt image_point,
ossimGpt world_point 
) const
virtual

Implementation of base-class pure virtual projection methods. These methods may be overriden by derived classes if those have more efficient schemes. The implementations here are iterative (relatively slow). Both depend on calls to the pure virtual lineSampleHeightToWorld() method.

Reimplemented from ossimSensorModel.

Definition at line 152 of file ossimSpectraboticsRedEdgeModel.cpp.

Referenced by updateModel().

154 {
155  if (traceDebug()) ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ossimSpectraboticsRedEdgeModel::lineSampleToWorld:entering..." << std::endl;
156 
157  if(image_point.hasNans())
158  {
159  gpt.makeNan();
160  return;
161  }
162  //***
163  // Extrapolate if image point is outside image:
164  //***
165 // if (!insideImage(image_point))
166 // {
167 // gpt.makeNan();
168 // gpt = extrapolate(image_point);
169 // return;
170 // }
171 
172  //***
173  // Determine imaging ray and invoke elevation source object's services to
174  // intersect ray with terrain model:
175  //***
176  ossimEcefRay ray;
177  imagingRay(image_point, ray);
179 
180  if (traceDebug())
181  {
182  ossimNotify(ossimNotifyLevel_DEBUG) << "image_point = " << image_point << std::endl;
183  ossimNotify(ossimNotifyLevel_DEBUG) << "ray = " << ray << std::endl;
184  ossimNotify(ossimNotifyLevel_DEBUG) << "gpt = " << gpt << std::endl;
185  }
186 
187  if (traceDebug()) ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG ossimSensorModel::lineSampleToWorld: returning..." << std::endl;
188  return;
189 }
bool intersectRay(const ossimEcefRay &ray, ossimGpt &gpt, double defaultElevValue=0.0)
METHOD: intersectRay()
static ossimElevManager * instance()
METHOD: instance() Implements singelton pattern.
bool hasNans() const
Definition: ossimDpt.h:67
virtual void imagingRay(const ossimDpt &image_point, ossimEcefRay &image_ray) const
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ loadState()

bool ossimSpectraboticsRedEdgeModel::loadState ( const ossimKeywordlist kwl,
const char *  prefix = 0 
)
virtual

Method to the load (recreate) the state of the object from a keyword list. Return true if ok or false on error.

Reimplemented from ossimSensorModel.

Definition at line 408 of file ossimSpectraboticsRedEdgeModel.cpp.

Referenced by setupOptimizer().

410 {
411  if(traceDebug())
412  {
413  std::cout << "ossimSpectraboticsRedEdgeModel::loadState: ......... entered" << std::endl;
414  }
415  //ossimSensorModel::loadState(kwl,prefix);
416 
417  ossimSensorModel::loadState(kwl, prefix);
419  {
420 
422  }
423  m_ecefPlatformPosition = ossimGpt(0.0,0.0,1000.0);
424  m_adjEcefPlatformPosition = ossimGpt(0.0,0.0,1000.0);
425  m_roll = 0.0;
426  m_pitch = 0.0;
427  m_heading = 0.0;
428 
429 
430  // bool computeGsdFlag = false;
431  const char* roll = kwl.find(prefix, "Roll");
432  const char* pitch = kwl.find(prefix, "Pitch");
433  const char* heading = kwl.find(prefix, "Yaw");
434  const char* focalLength = kwl.find(prefix, "Focal Length");
435  const char* imageWidth = kwl.find(prefix, "Image Width");
436  const char* imageHeight = kwl.find(prefix, "Image Height");
437  const char* fov = kwl.find(prefix, "Field Of View");
438  const char* gpsPos = kwl.find(prefix, "GPS Position");
439  const char* gpsAlt = kwl.find(prefix, "GPS Altitude");
440  const char* imageCenter = kwl.find(prefix, "Image Center");
441  const char* fx = kwl.find(prefix, "fx");
442  const char* fy = kwl.find(prefix, "fy");
443  const char* cx = kwl.find(prefix, "cx");
444  const char* cy = kwl.find(prefix, "cy");
445  const char* k = kwl.find(prefix, "k");
446  const char* p = kwl.find(prefix, "p");
447 
448  bool result = true;
449 
450 #if 0
451  std::cout << "roll: " << roll << "\n";
452  std::cout << "pitch: " << pitch << "\n";
453  std::cout << "heading: " << heading << "\n";
454  std::cout << "focalLength: " << focalLength << "\n";
455  std::cout << "imageWidth: " << imageWidth << "\n";
456  std::cout << "imageHeight: " << imageHeight << "\n";
457  // std::cout << "fov: " << fov << "\n";
458  std::cout << "gpsPos: " << gpsPos << "\n";
459  std::cout << "gpsAlt: " << gpsAlt << "\n";
460  #endif
461  //
462  if(k&&p)
463  {
465  m_lensDistortion->loadState(kwl, prefix);
466  }
467 
468  if(roll&&
469  pitch&&
470  heading&&
471  focalLength&&
472  imageWidth&&
473  imageHeight&&
474  gpsPos&&
475  gpsAlt)
476  {
477  theSensorID = "MicaSense RedEdge";
478  m_roll = ossimString(roll).toDouble();
479  m_pitch = ossimString(pitch).toDouble();
480  m_heading = ossimString(heading).toDouble();
481  m_focalLength = ossimString(focalLength).toDouble();
482  m_fov = fov?ossimString(fov).toDouble():48.8;
483  theImageSize.x = ossimString(imageWidth).toDouble();
484  theImageSize.y = ossimString(imageHeight).toDouble();
485 
486 
489 
491  // now lets use the field of view and the focal length to
492  // calculate the pixel size on the ccd in millimeters
493  double d = tan((m_fov*0.5)*M_PI/180.0)*m_focalLength;
494  d*=2.0;
495  double tempRadiusPixel = theImageSize.length();
496  m_pixelSize.x = (d)/tempRadiusPixel;
498  if(imageCenter)
499  {
500  std::vector<ossimString> splitString;
501  ossimString tempString(imageCenter);
502  tempString.split(splitString, ossimString(" "));
503  if(splitString.size() == 2)
504  {
505  theRefImgPt = ossimDpt(splitString[0].toDouble(), splitString[1].toDouble());
506  }
507  }
508  else
509  {
510  if(traceDebug())
511  {
512  ossimNotify(ossimNotifyLevel_DEBUG) << "No Image Center found" << std::endl;
513  // result = false;
514  }
515  }
516 
517  // now extract the GPS position and shift it to the ellipsoidal height.
518  std::vector<ossimString> splitArray;
519 
520  ossimString(gpsPos).split(splitArray, ",");
521  splitArray[0] = splitArray[0].replaceAllThatMatch("deg", " ");
522  splitArray[1] = splitArray[1].replaceAllThatMatch("deg", " ");
523 
524  ossimDms dmsLat;
525  ossimDms dmsLon;
526  double h = ossimString(gpsAlt).toDouble();
527  dmsLat.setDegrees(splitArray[0]);
528  dmsLon.setDegrees(splitArray[1]);
529  double lat = dmsLat.getDegrees();
530  double lon = dmsLon.getDegrees();
531 
533  m_ecefPlatformPosition = ossimGpt(lat,lon,h);
534  // double height1 = ossimElevManager::instance()->getHeightAboveEllipsoid(ossimGpt(lat, lon));
535 
536 //std::cout << "PLATFORM HEIGHT: " << h << "\n"
537 // << "ELEVATION: " << height1 << "\n";
538  // std::cout << m_ecefPlatformPosition << std::endl;
539  // std::cout << "POINT: " << ossimGpt(lat,lon,h) << std::endl;
540  // std::cout << "MSL: " << height1 << "\n";
541 
543  theRefGndPt.height(0.0);
544 
545  m_norm = ossim::nan();
546 
547  // lens parameters
548  if(m_lensDistortion.valid()&&cx&&cy&&fx&&fy)
549  {
550  m_focalX = ossimString(fx).toDouble();
551  m_focalY = ossimString(fy).toDouble();
552 
553  // our lens distorion assume center point. So
554  // lets shift to center and then set calibrated relative to
555  // image center. We will then normalize.
556  //
557  ossimDpt focal(m_focalX,m_focalY);
558  m_norm = focal.length()*0.5; // convert from diameter to radial
559  m_calibratedCenter = ossimDpt(ossimString(cx).toDouble(), ossimString(cy).toDouble());
563 
564  // lets initialize the root to be about one pixel norm along the diagonal
565  // and the convergence will be approximately 100th of a pixel.
566  //
567  double temp = m_norm;
568  if(temp < FLT_EPSILON) temp = 1.0;
569  else temp = 1.0/temp;
571  m_lensDistortion->setDxDy(ossimDpt(temp,temp));
573  }
574  else
575  {
576  m_lensDistortion = 0;
578  m_norm = theImageSize.length()*0.5;
579  m_principalPoint = ossimDpt(0,0);
580  }
581  updateModel();
582  }
583  else // load from regular save state
584  {
585  const char* principal_point = kwl.find(prefix, "principal_point");
586  const char* pixel_size = kwl.find(prefix, "pixel_size");
587  const char* ecef_platform_position = kwl.find(prefix, "ecef_platform_position");
588  const char* latlonh_platform_position = kwl.find(prefix, "latlonh_platform_position");
589  // const char* compute_gsd_flag = kwl.find(prefix, "compute_gsd_flag");
590  roll = kwl.find(prefix, "roll");
591  pitch = kwl.find(prefix, "pitch");
592  heading = kwl.find(prefix, "heading");
593  fov = kwl.find(prefix, "field_of_view");
594  focalLength = kwl.find(prefix, "focal_length");
595 
596  if(roll)
597  {
598  m_roll = ossimString(roll).toDouble();
599  }
600  if(pitch)
601  {
602  m_pitch = ossimString(pitch).toDouble();
603  }
604  if(heading)
605  {
606  m_heading = ossimString(heading).toDouble();
607  }
608 
609  if(cx&&cy)
610  {
611  m_calibratedCenter = ossimDpt(ossimString(cx).toDouble(), ossimString(cy).toDouble());
612  }
613  if(principal_point)
614  {
615  std::vector<ossimString> splitString;
616  ossimString tempString(principal_point);
617  tempString.split(splitString, ossimString(" "));
618  if(splitString.size() == 2)
619  {
620  m_principalPoint.x = splitString[0].toDouble();
621  m_principalPoint.y = splitString[1].toDouble();
622  }
623  }
624  else
625  {
626  if(traceDebug())
627  {
628  ossimNotify(ossimNotifyLevel_DEBUG) << "No principal_point found" << std::endl;
629  // result = false;
630  }
631  }
632 
633  if(pixel_size)
634  {
635  std::vector<ossimString> splitString;
636  ossimString tempString(pixel_size);
637  tempString.split(splitString, ossimString(" "));
638  if(splitString.size() == 1)
639  {
640  m_pixelSize.x = splitString[0].toDouble();
642  }
643  else if(splitString.size() == 2)
644  {
645  m_pixelSize.x = splitString[0].toDouble();
646  m_pixelSize.y = splitString[1].toDouble();
647  }
648  }
649  else
650  {
651  if(traceDebug())
652  {
653  ossimNotify(ossimNotifyLevel_DEBUG) << "No pixel size found" << std::endl;
654  // result = false;
655  }
656  }
657  if(ecef_platform_position)
658  {
659  std::vector<ossimString> splitString;
660  ossimString tempString(ecef_platform_position);
661  tempString.split(splitString, ossimString(" "));
662  if(splitString.size() > 2)
663  {
664  m_ecefPlatformPosition = ossimEcefPoint(splitString[0].toDouble(),
665  splitString[1].toDouble(),
666  splitString[2].toDouble());
667  }
668  }
669  else if(latlonh_platform_position)
670  {
671  std::vector<ossimString> splitString;
672  ossimString tempString(latlonh_platform_position);
673  tempString.split(splitString, ossimString(" "));
674  std::string datumString;
675  double lat=0.0, lon=0.0, h=0.0;
676  if(splitString.size() > 2)
677  {
678  lat = splitString[0].toDouble();
679  lon = splitString[1].toDouble();
680  h = splitString[2].toDouble();
681  }
682 
683  m_ecefPlatformPosition = ossimGpt(lat,lon,h);
684  }
685  if(focalLength)
686  {
687  m_focalLength = ossimString(focalLength).toDouble();
688  }
689  else
690  {
691  if(traceDebug())
692  {
693  ossimNotify(ossimNotifyLevel_DEBUG) << "No focal length found" << std::endl;
694  result = false;
695  }
696  }
697  if(fov)
698  {
699  m_fov = ossimString(fov).toDouble();
700  }
701  else
702  {
703  if(traceDebug())
704  {
705  ossimNotify(ossimNotifyLevel_DEBUG) << "No field of view found" << std::endl;
706  result = false;
707  }
708  }
710  if(m_lensDistortion.valid()&&cx&&cy&&fx&&fy)
711  {
712  m_focalX = ossimString(fx).toDouble();
713  m_focalY = ossimString(fy).toDouble();
714 
715  // our lens distorion assume center point. So
716  // lets shift to center and then set calibrated relative to
717  // image center. We will then normalize.
718  //
719  ossimDpt focal(m_focalX,m_focalY);
720  m_norm = focal.length()*0.5;
721  m_calibratedCenter = ossimDpt(ossimString(cx).toDouble(), ossimString(cy).toDouble());
722  // m_principalPoint = m_calibratedCenter-theImageClipRect.midPoint();
723  // m_principalPoint.x /= m_norm;
724  // m_principalPoint.y /= m_norm;
725 
726  // lets initialize the root to be about one pixel norm along the diagonal
727  // and the convergence will be approximately 100th of a pixel.
728  //
729  double temp = m_norm;
730  if(temp < FLT_EPSILON) temp = 1.0;
731  else temp = 1.0/temp;
733  m_lensDistortion->setDxDy(ossimDpt(temp,temp));
735  }
736  else
737  {
738  m_lensDistortion = 0;
739  }
740  updateModel();
741  }
742  try
743  {
744  //---
745  // This will set theGSD and theMeanGSD. Method throws
746  // ossimException.
747  //---
748  computeGsd();
749  }
750  catch (const ossimException& e)
751  {
753  << "ossimSpectraboticsRedEdgeModel::loadState Caught Exception:\n"
754  << e.what() << std::endl;
755  }
756  // std::cout << "METERS PER PIXEL : " << getMetersPerPixel() << std::endl;
757  if(traceDebug())
758  {
759  ossimNotify(ossimNotifyLevel_DEBUG) << std::setprecision(15) << std::endl;
760  ossimNotify(ossimNotifyLevel_DEBUG) << "roll: " << m_roll << std::endl
761  << "pitch: " << m_pitch << std::endl
762  << "heading: " << m_heading << std::endl
763  << "platform: " << m_ecefPlatformPosition << std::endl
764  << "latlon Platform: " << ossimGpt(m_ecefPlatformPosition) << std::endl
765  << "focal len: " << m_focalLength << std::endl
766  << "FOV : " << m_fov << std::endl
767  << "principal: " << m_principalPoint << std::endl
768  << "Ground: " << ossimGpt(m_ecefPlatformPosition) << std::endl;
769  }
770 
771  // ossimGpt wpt;
772  // ossimDpt dpt(100,100);
773  // lineSampleToWorld(dpt, wpt);
774  // std::cout << "dpt: " << dpt << "\n"
775  // << "wpt: " << wpt << "\n";
776  // worldToLineSample(wpt,dpt);
777  // std::cout << "dpt: " << dpt << "\n"
778  // << "wpt: " << wpt << "\n";
779  return result;
780 }
ossimString theSensorID
void setConvergenceThreshold(const double &new_threshold)
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
bool valid() const
Definition: ossimRefPtr.h:75
const char * find(const char *key) const
double nan()
Method to return ieee floating point double precision NAN.
Definition: ossimCommon.h:135
double y
Definition: ossimDpt.h:165
void setDxDy(const ossimDpt &dxdy)
void split(std::vector< ossimString > &result, const ossimString &separatorList, bool skipBlankFields=false) const
Splits this string into a vector of strings (fields) using the delimiter list specified.
ossimRefPtr< ossimTangentialRadialLensDistortion > m_lensDistortion
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
void computeGsd()
This method computes the ground sample distance(gsd) and sets class attributes theGSD and theMeanGSD ...
#define M_PI
virtual const char * what() const
Returns the error message.
#define FLT_EPSILON
static ossimGeoidManager * instance()
Implements singelton pattern:
double height() const
Definition: ossimGpt.h:107
bool setDegrees(const std::string &value)
setDegrees(char*).
Definition: ossimDms.cpp:79
double toDouble() const
double getDegrees() const
Definition: ossimDms.h:71
ossimDrect theImageClipRect
void setCenter(const ossimDpt &center)
ossimDpt midPoint() const
Definition: ossimDrect.h:817
ossim_int32 y
Definition: ossimIpt.h:142
double x
Definition: ossimDpt.h:164
double length() const
Definition: ossimIpt.h:114
ossim_int32 x
Definition: ossimIpt.h:141
virtual double offsetFromEllipsoid(const ossimGpt &gpt)
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ saveState()

bool ossimSpectraboticsRedEdgeModel::saveState ( ossimKeywordlist kwl,
const char *  prefix = 0 
) const
virtual

METHODS: saveState, loadState Fulfills ossimObject base-class pure virtuals. Loads and saves geometry KWL files.

Reimplemented from ossimSensorModel.

Definition at line 376 of file ossimSpectraboticsRedEdgeModel.cpp.

References ossimKeywordlist::add(), m_calibratedCenter, m_ecefPlatformPosition, m_focalLength, m_focalX, m_focalY, m_fov, m_heading, m_lensDistortion, m_pitch, m_pixelSize, m_principalPoint, m_roll, ossimTangentialRadialLensDistortion::saveState(), ossimSensorModel::saveState(), ossimString::toString(), ossimRefPtr< T >::valid(), ossimEcefPoint::x(), ossimDpt::x, ossimEcefPoint::y(), ossimDpt::y, and ossimEcefPoint::z().

378 {
379  ossimSensorModel::saveState(kwl, prefix);
380 
381  kwl.add(prefix, "type", "ossimSpectraboticsRedEdgeModel", true);
382 
383  kwl.add(prefix, "roll", m_roll, true);
384  kwl.add(prefix, "pitch", m_pitch, true);
385  kwl.add(prefix, "heading", m_heading, true);
386  kwl.add(prefix, "principal_point", ossimString::toString(m_principalPoint.x) + " " + ossimString::toString(m_principalPoint.y));
387  kwl.add(prefix, "pixel_size", ossimString::toString(m_pixelSize.x) + " " + ossimString::toString(m_pixelSize.y));
388  kwl.add(prefix, "focal_length", m_focalLength);
389  kwl.add(prefix, "field_of_view", m_fov);
390  kwl.add(prefix, "cx", m_calibratedCenter.x);
391  kwl.add(prefix, "cy", m_calibratedCenter.y);
392  kwl.add(prefix, "fx", m_focalX);
393  kwl.add(prefix, "fy", m_focalY);
394  kwl.add(prefix, "ecef_platform_position",
398 
399  if(m_lensDistortion.valid())
400  {
402  prefix);
403  }
404 
405  return true;
406 }
bool valid() const
Definition: ossimRefPtr.h:75
double y
Definition: ossimDpt.h:165
static ossimString toString(bool aValue)
Numeric to string methods.
double x() const
ossimRefPtr< ossimTangentialRadialLensDistortion > m_lensDistortion
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
double y() const
double x
Definition: ossimDpt.h:164
double z() const

◆ setFocalLength()

void ossimSpectraboticsRedEdgeModel::setFocalLength ( double  focalLength)

Definition at line 363 of file ossimSpectraboticsRedEdgeModel.cpp.

References m_focalLength.

364 {
365  m_focalLength = focalLength;
366 }

◆ setImageRect()

void ossimSpectraboticsRedEdgeModel::setImageRect ( const ossimDrect rect)

Definition at line 357 of file ossimSpectraboticsRedEdgeModel.cpp.

References ossimDrect::midPoint(), ossimSensorModel::theImageClipRect, and ossimSensorModel::theRefImgPt.

358 {
359  theImageClipRect = rect;
360  theRefImgPt = rect.midPoint();
361 }
ossimDrect theImageClipRect
ossimDpt midPoint() const
Definition: ossimDrect.h:817

◆ setPixelSize()

void ossimSpectraboticsRedEdgeModel::setPixelSize ( const ossimDpt pixelSize)

Definition at line 352 of file ossimSpectraboticsRedEdgeModel.cpp.

References m_pixelSize.

353 {
354  m_pixelSize = pixelSize;
355 }

◆ setPlatformPosition()

void ossimSpectraboticsRedEdgeModel::setPlatformPosition ( const ossimGpt gpt)

◆ setPrincipalPoint()

void ossimSpectraboticsRedEdgeModel::setPrincipalPoint ( ossimDpt  principalPoint)

Definition at line 336 of file ossimSpectraboticsRedEdgeModel.cpp.

References m_principalPoint.

337 {
338  m_principalPoint = principalPoint;
339 }

◆ setRollPitchHeading()

void ossimSpectraboticsRedEdgeModel::setRollPitchHeading ( double  roll,
double  pitch,
double  heading 
)

◆ setupOptimizer()

bool ossimSpectraboticsRedEdgeModel::setupOptimizer ( const ossimString init_file)
virtual

ground to image faster (you don't need DEM)

Reimplemented from ossimOptimizableProjection.

Definition at line 782 of file ossimSpectraboticsRedEdgeModel.cpp.

References ossimKeywordlist::addFile(), ossimString::c_str(), and loadState().

783 {
784  ossimKeywordlist kwl;
785  kwl.addFile(init_file.c_str());
786 
787  return loadState(kwl);
788 }
Represents serializable keyword/value map.
bool addFile(const char *file)
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
const char * c_str() const
Returns a pointer to a null-terminated array of characters representing the string&#39;s contents...
Definition: ossimString.h:396

◆ updateModel()

void ossimSpectraboticsRedEdgeModel::updateModel ( )
virtual

VIRTUAL METHOD: updateModel() Following a change to the adjustable parameter set, this virtual is called to permit instances to compute derived quantities after parameter change.

Reimplemented from ossimSensorModel.

Definition at line 256 of file ossimSpectraboticsRedEdgeModel.cpp.

References ossimAdjustableParameterInterface::computeParameterOffset(), ossimMatrix4x4::createRotationXMatrix(), ossimMatrix4x4::createRotationYMatrix(), ossimMatrix4x4::createRotationZMatrix(), ossimGpt::height(), ossimGpt::latd(), lineSampleToWorld(), ossimDrect::ll(), ossimGpt::lond(), ossimDrect::lr(), ossimLsrSpace::lsrToEcefRotMatrix(), m_adjEcefPlatformPosition, m_compositeMatrix, m_compositeMatrixInverse, m_ecefPlatformPosition, m_heading, m_pitch, m_roll, ossimGpt::metersPerDegree(), OSSIM_LEFT_HANDED, OSSIM_RIGHT_HANDED, ossimPolygon::resize(), ossimSensorModel::theBoundGndPolygon, ossimSensorModel::theExtrapolateGroundFlag, ossimSensorModel::theExtrapolateImageFlag, ossimSensorModel::theImageClipRect, ossimSensorModel::theMeanGSD, ossimDrect::ul(), ossimDrect::ur(), and ossimDpt::x.

Referenced by ossimSpectraboticsRedEdgeModel(), setPlatformPosition(), and setRollPitchHeading().

257 {
258  ossimGpt gpt;
259  ossimGpt wgs84Pt;
260  double metersPerDegree = wgs84Pt.metersPerDegree().x;
261  double degreePerMeter = 1.0/metersPerDegree;
262  double latShift = computeParameterOffset(1)*theMeanGSD*degreePerMeter;
263  double lonShift = computeParameterOffset(0)*theMeanGSD*degreePerMeter;
264 
266  double height = gpt.height();
267  gpt.height(height + computeParameterOffset(5));
268  gpt.latd(gpt.latd() + latShift);
269  gpt.lond(gpt.lond() + lonShift);
272 
276  ossimMatrix4x4 lsrMatrix(lsrSpace.lsrToEcefRotMatrix());
277  NEWMAT::Matrix orientation = heading*pitch*roll;//roll*pitch*heading;
278  m_compositeMatrix = (lsrMatrix.getData()*orientation);
280 
282  // ossim_float64 w = theImageClipRect.width()*2.0;
283  // ossim_float64 h = theImageClipRect.height()*2.0;
284  theExtrapolateImageFlag = false;
285  theExtrapolateGroundFlag = false;
286 
287 
288  lineSampleToWorld(theImageClipRect.ul(),gpt);//+ossimDpt(-w, -h), gpt);
289  theBoundGndPolygon[0] = gpt;
290  lineSampleToWorld(theImageClipRect.ur(),gpt);//+ossimDpt(w, -h), gpt);
291  theBoundGndPolygon[1] = gpt;
292  lineSampleToWorld(theImageClipRect.lr(),gpt);//+ossimDpt(w, h), gpt);
293  theBoundGndPolygon[2] = gpt;
294  lineSampleToWorld(theImageClipRect.ll(),gpt);//+ossimDpt(-w, h), gpt);
295  theBoundGndPolygon[3] = gpt;
296 }
static NEWMAT::Matrix createRotationYMatrix(double angle, ossimCoordSysOrientMode orientationMode=OSSIM_RIGHT_HANDED)
double lond() const
Will convert the radian measure to degrees.
Definition: ossimGpt.h:97
const ossimDpt & ul() const
Definition: ossimDrect.h:339
void lineSampleToWorld(const ossimDpt &image_point, ossimGpt &gpt) const
double latd() const
Will convert the radian measure to degrees.
Definition: ossimGpt.h:87
static NEWMAT::Matrix createRotationXMatrix(double angle, ossimCoordSysOrientMode orientationMode=OSSIM_RIGHT_HANDED)
static NEWMAT::Matrix createRotationZMatrix(double angle, ossimCoordSysOrientMode orientationMode=OSSIM_RIGHT_HANDED)
ossimPolygon theBoundGndPolygon
double height() const
Definition: ossimGpt.h:107
ossimDrect theImageClipRect
const ossimDpt & ur() const
Definition: ossimDrect.h:340
double x
Definition: ossimDpt.h:164
ossimDpt metersPerDegree() const
Definition: ossimGpt.cpp:498
const ossimDpt & ll() const
Definition: ossimDrect.h:342
void resize(ossim_uint32 newSize)
const ossimDpt & lr() const
Definition: ossimDrect.h:341
ossim_float64 theMeanGSD
NEWMAT::Matrix m_compositeMatrix
uses file path to init model

◆ useForward()

virtual bool ossimSpectraboticsRedEdgeModel::useForward ( ) const
inlinevirtual

ossimOptimizableProjection

Implements ossimOptimizableProjection.

Definition at line 73 of file ossimSpectraboticsRedEdgeModel.h.

73 {return false;}

◆ worldToLineSample()

void ossimSpectraboticsRedEdgeModel::worldToLineSample ( const ossimGpt worldPoint,
ossimDpt lineSampPt 
) const
virtual

METHOD: worldToLineSample() Performs the forward projection from ground point to line, sample.

Reimplemented from ossimSensorModel.

Definition at line 212 of file ossimSpectraboticsRedEdgeModel.cpp.

References ossimEcefVector::data(), ossimLensDistortion::distort(), ossimPolygon::getNumberOfVertices(), ossimPolygon::hasNans(), m_adjEcefPlatformPosition, m_calibratedCenter, m_compositeMatrixInverse, m_focalLength, m_lensDistortion, m_norm, m_pixelSize, ossimPolygon::pointWithin(), ossimSensorModel::theBoundGndPolygon, ossimRefPtr< T >::valid(), ossimDpt::x, and ossimDpt::y.

214 {
215  #if 0
218  {
219  if (!(theBoundGndPolygon.pointWithin(world_point)))
220  {
221 // image_point.makeNan();
222 // image_point = extrapolate(world_point);
223 // return;
224  }
225  }
226  #endif
227  ossimEcefPoint g_ecf(world_point);
228  ossimEcefVector ecfRayDir(g_ecf - m_adjEcefPlatformPosition);
229  ossimColumnVector3d camRayDir (m_compositeMatrixInverse*ecfRayDir.data());
230 
231 
232  double scale = -m_focalLength/camRayDir[2];
233  ossimDpt film (scale*camRayDir[0], scale*camRayDir[1]);
234  film.x /= m_pixelSize.x; // get into pixel coordinates
235  film.y /= m_pixelSize.y;
236 
237 
238  // now distort to find the true image coordinate location
239  if (m_lensDistortion.valid())
240  {
241  ossimDpt filmOut;
242  film.x /= m_norm; // normalize radial
243  film.y /= m_norm;
244  m_lensDistortion->distort(film, filmOut);
245  film = filmOut;//+m_lensDistortion->getCenter();
246  film.x *= m_norm;
247  film.y *= m_norm;
248  }
249 
250  // invert Y to get back to left handed image space
251  ossimDpt f1(film.x+m_calibratedCenter.x, m_calibratedCenter.y-film.y);
252 
253  image_point = f1;
254 }
bool valid() const
Definition: ossimRefPtr.h:75
double y
Definition: ossimDpt.h:165
ossimRefPtr< ossimTangentialRadialLensDistortion > m_lensDistortion
ossimPolygon theBoundGndPolygon
bool hasNans() const
will sequence through the polygon and check to see if any values are NAN
bool pointWithin(const ossimDpt &point) const
METHOD: pointWithin(ossimDpt) Returns TRUE if point is inside polygon.
ossim_uint32 getNumberOfVertices() const
double x
Definition: ossimDpt.h:164
virtual void distort(const ossimDpt &input, ossimDpt &output) const

Member Data Documentation

◆ m_adjEcefPlatformPosition

ossimEcefPoint ossimSpectraboticsRedEdgeModel::m_adjEcefPlatformPosition
protected

◆ m_calibratedCenter

ossimDpt ossimSpectraboticsRedEdgeModel::m_calibratedCenter
protected

Definition at line 85 of file ossimSpectraboticsRedEdgeModel.h.

Referenced by saveState(), and worldToLineSample().

◆ m_compositeMatrix

NEWMAT::Matrix ossimSpectraboticsRedEdgeModel::m_compositeMatrix
protected

uses file path to init model

Definition at line 78 of file ossimSpectraboticsRedEdgeModel.h.

Referenced by ossimSpectraboticsRedEdgeModel(), and updateModel().

◆ m_compositeMatrixInverse

NEWMAT::Matrix ossimSpectraboticsRedEdgeModel::m_compositeMatrixInverse
protected

◆ m_ecefPlatformPosition

ossimEcefPoint ossimSpectraboticsRedEdgeModel::m_ecefPlatformPosition
protected

◆ m_focalLength

double ossimSpectraboticsRedEdgeModel::m_focalLength
protected

◆ m_focalX

double ossimSpectraboticsRedEdgeModel::m_focalX
protected

Definition at line 89 of file ossimSpectraboticsRedEdgeModel.h.

Referenced by saveState().

◆ m_focalY

double ossimSpectraboticsRedEdgeModel::m_focalY
protected

Definition at line 90 of file ossimSpectraboticsRedEdgeModel.h.

Referenced by saveState().

◆ m_fov

double ossimSpectraboticsRedEdgeModel::m_fov
protected

Definition at line 83 of file ossimSpectraboticsRedEdgeModel.h.

Referenced by ossimSpectraboticsRedEdgeModel(), and saveState().

◆ m_heading

double ossimSpectraboticsRedEdgeModel::m_heading
protected

◆ m_lensDistortion

ossimRefPtr<ossimTangentialRadialLensDistortion> ossimSpectraboticsRedEdgeModel::m_lensDistortion
protected

◆ m_norm

double ossimSpectraboticsRedEdgeModel::m_norm
protected

Definition at line 88 of file ossimSpectraboticsRedEdgeModel.h.

Referenced by worldToLineSample().

◆ m_pitch

double ossimSpectraboticsRedEdgeModel::m_pitch
protected

◆ m_pixelSize

ossimDpt ossimSpectraboticsRedEdgeModel::m_pixelSize
protected

◆ m_principalPoint

ossimDpt ossimSpectraboticsRedEdgeModel::m_principalPoint
protected

Definition at line 84 of file ossimSpectraboticsRedEdgeModel.h.

Referenced by saveState(), and setPrincipalPoint().

◆ m_roll

double ossimSpectraboticsRedEdgeModel::m_roll
protected

The documentation for this class was generated from the following files: