59 static ossimTrace traceExec (
"ossimSensorModel:exec");
60 static ossimTrace traceDebug (
"ossimSensorModel:debug");
62 static const char* REF_GPT_LAT_KW =
"ref_point_lat";
63 static const char* REF_GPT_LON_KW =
"ref_point_lon";
64 static const char* REF_GPT_HGT_KW =
"ref_point_hgt";
65 static const char* REF_IPT_LINE_KW =
"ref_point_line";
66 static const char* REF_IPT_SAMP_KW =
"ref_point_samp";
67 static const char* IMAGE_ID_KW =
"image_id";
68 static const char* SENSOR_ID_KW =
"sensor";
70 static const double RAY_ORIGIN_HEIGHT = 10000.0;
82 for (
int r=0;r<nr;++r)
84 for (
int c=0;c<nc;++c)
86 os<<*(crow.Data()+c)<<
" ";
102 theSubImageOffset (0.0, 0.0),
107 theRefGndPt (0.0, 0.0, 0.0),
108 theRefImgPt (0.0, 0.0),
109 theBoundGndPolygon (),
111 theRelPosError (0.0),
112 theNominalPosError (0.0),
113 theParWRTx (0.0, 0.0),
114 theParWRTy (0.0, 0.0),
115 theParWRTz (0.0, 0.0),
118 theExtrapolateImageFlag(false),
119 theExtrapolateGroundFlag(false)
124 <<
"DEBUG ossimSensorModel::ossimSensorModel(geom_kwl): entering...\n" 125 <<
"DEBUG ossimSensorModel::ossimSensorModel(geom_kwl): returning..." 137 theImageSize (model.theImageSize),
138 theSubImageOffset (model.theSubImageOffset),
139 theImageID (model.theImageID),
140 theSensorID (model.theSensorID),
141 theGSD (model.theGSD),
142 theMeanGSD (model.theMeanGSD),
143 theRefGndPt (model.theRefGndPt),
144 theRefImgPt (model.theRefImgPt),
145 theBoundGndPolygon (model.theBoundGndPolygon),
146 theImageClipRect (model.theImageClipRect),
147 theRelPosError (model.theRelPosError),
148 theNominalPosError (model.theNominalPosError),
149 theParWRTx (model.theParWRTx),
150 theParWRTy (model.theParWRTy),
151 theParWRTz (model.theParWRTz),
152 theObs (model.theObs),
153 theResid (model.theResid),
154 theExtrapolateImageFlag(false),
155 theExtrapolateGroundFlag(false)
160 <<
"DEBUG ossimSensorModel::ossimSensorModel(model): entering..." << std::endl;
168 <<
"DEBUG ossimSensorModel::ossimSensorModel(model): returning..." << std::endl;
185 theSubImageOffset (0.0, 0.0),
190 theRefGndPt (0.0, 0.0, 0.0),
191 theRefImgPt (0.0, 0.0),
192 theBoundGndPolygon (),
194 theRelPosError (0.0),
195 theNominalPosError (0.0),
196 theParWRTx (0.0, 0.0),
197 theParWRTy (0.0, 0.0),
198 theParWRTz (0.0, 0.0),
201 theExtrapolateImageFlag(false),
202 theExtrapolateGroundFlag(false)
207 <<
"DEBUG ossimSensorModel::ossimSensorModel(geom_kwl): entering..." << std::endl;
216 <<
"DEBUG ossimSensorModel::ossimSensorModel(geom_kwl): returning..." << std::endl;
308 if (traceDebug() || debug)
330 static const double PIXEL_THRESHOLD = .1;
331 static const int MAX_NUM_ITERATIONS = 20;
370 double height = worldPoint.
hgt;
394 double dlat_du, dlat_dv, dlon_du, dlon_dv;
395 double delta_lat, delta_lon, delta_u, delta_v;
406 ip_du.
u = ip.
u + 1.0;
409 ip_dv.
v = ip.
v + 1.0;
431 dlat_du = gp_du.
lat - gp.
lat;
432 dlon_du = gp_du.
lon - gp.
lon;
433 dlat_dv = gp_dv.
lat - gp.
lat;
434 dlon_dv = gp_dv.
lon - gp.
lon;
439 delta_lat = worldPoint.
lat - gp.
lat;
440 delta_lon = worldPoint.
lon - gp.
lon;
446 inverse_norm = dlat_dv*dlon_du - dlat_du*dlon_dv;
450 delta_u = (-dlon_dv*delta_lat + dlat_dv*delta_lon)/inverse_norm;
451 delta_v = ( dlon_du*delta_lat - dlat_du*delta_lon)/inverse_norm;
460 done = ((fabs(delta_u) < PIXEL_THRESHOLD)&&
461 (fabs(delta_v) < PIXEL_THRESHOLD));
463 }
while ((!done) && (iters < MAX_NUM_ITERATIONS));
475 if (iters >= MAX_NUM_ITERATIONS)
477 std::cout <<
"MAX ITERATION!!!" << std::endl;
478 std::cout <<
"delta_u = " << delta_u
479 <<
"\ndelta_v = " << delta_v <<
"\n";
483 std::cout <<
"ITERS === " << iters << std::endl;
485 std::cout <<
"iters = " << iters <<
"\n";
503 out << setprecision(15) << setiosflags(ios::fixed)
504 <<
"\n ossimSensorModel base-class data members:\n" 509 <<
"\n theGSD: " <<
theGSD 562 const char* prefix)
const 691 seedPrefix +=
"seed_projection.";
732 keyword = IMAGE_ID_KW;
733 value = kwl.
find(prefix, keyword);
739 keyword = SENSOR_ID_KW;
740 value = kwl.
find(prefix, keyword);
747 value = kwl.
find(prefix, keyword);
754 value = kwl.
find(prefix, keyword);
760 keyword = REF_IPT_LINE_KW;
761 value = kwl.
find(prefix, keyword);
767 keyword = REF_IPT_SAMP_KW;
768 value = kwl.
find(prefix, keyword);
774 keyword = REF_GPT_LAT_KW;
775 value = kwl.
find(prefix, keyword);
782 keyword = REF_GPT_LON_KW;
783 value = kwl.
find(prefix, keyword);
790 keyword = REF_GPT_HGT_KW;
791 value = kwl.
find(prefix, keyword);
799 value = kwl.
find(prefix, keyword);
806 value = kwl.
find(prefix, keyword);
815 value = kwl.
find(prefix, keyword);
822 value = kwl.
find(prefix, keyword);
829 value = kwl.
find(prefix, keyword);
836 value = kwl.
find(prefix, keyword);
843 value = kwl.
find(prefix, keyword);
850 value = kwl.
find(prefix, keyword);
857 value = kwl.
find(prefix, keyword);
864 value = kwl.
find(prefix, keyword);
871 value = kwl.
find(prefix, keyword);
876 value = kwl.
find(prefix, keyword);
884 value = kwl.
find(prefix, keyword);
895 const char* rect = kwl.
find(prefix,
"rect");
898 std::vector<ossimString> splitArray;
900 rectString = rectString.
trim();
901 rectString.
split(splitArray,
" ");
902 if(splitArray.size() == 4)
905 splitArray[1].toDouble(),
906 splitArray[2].toDouble(),
907 splitArray[3].toDouble());
924 seedPrefix +=
".seed_projection.";
930 createProjection(kwl, seedPrefix.
chars());
952 const double& height)
const 991 ossimDpt deltaPt (edgePt - image_center);
994 ossimDpt edgePt_prime (edgePt - epsilon);
1017 double dpixel = (edgePt-edgePt_prime).length();
1018 double dlat_drad = (edgeGP.
lat - edgeGP_prime.
lat)/dpixel;
1019 double dlon_drad = (edgeGP.
lon - edgeGP_prime.
lon)/dpixel;
1024 double delta_pixel = (imagePoint - edgePt).length();
1026 gpt.
lat = edgeGP.
lat + dlat_drad*delta_pixel;
1027 gpt.
lon = edgeGP.
lon + dlon_drad*delta_pixel;
1052 double height = 0.0;
1089 const double DEG_PER_MTR = 8.983152841e-06;
1091 ossimDpt deltaPt (edgePt-image_center);
1093 edgePt -= epsilonPt;
1094 ossimDpt edgePt_prime (edgePt - epsilonPt);
1099 ossimGpt edgeGP (edgePt.lat, edgePt.lon, height);
1100 ossimGpt edgeGP_prime (edgePt_prime.
lat, edgePt_prime.
lon, height);
1109 double dsamp_drad = (edgePt.samp - edgePt_prime.
samp)/epsilon;
1110 double dline_drad = (edgePt.line - edgePt_prime.
line)/epsilon;
1118 ossimDpt extrapolated_ip (edgePt.samp + delta*dsamp_drad,
1119 edgePt.line + delta*dline_drad);
1124 return extrapolated_ip;
1164 NEWMAT::SymmetricMatrix& Cov,
1171 NEWMAT::SymmetricMatrix B(2);
1177 NEWMAT::SymmetricMatrix P(2);
1179 P(1,1) = defPointingSigma*defPointingSigma;
1183 NEWMAT::SymmetricMatrix Cm;
1184 Cm << B * P * B.t();
1189 NEWMAT::SymmetricMatrix Ctot = Cm;
1194 NEWMAT::SymmetricMatrix Bi(2);
1199 Cov << Bi * Ctot * Bi.t();
1206 static const char MODULE[] =
"ossimSensorModel::computeGsd";
1210 std::string e = MODULE;
1211 e +=
"Error image size has nans!";
1247 quarterSize =
ossimDpt(w/4.0, h/4.0);
1263 if(!centerImagePoint.
hasNans())
1265 ossimDpt leftDpt(centerImagePoint.
x-quarterSize.
x, centerImagePoint.
y);
1266 ossimDpt rightDpt(centerImagePoint.
x+quarterSize.
y, centerImagePoint.
y);
1267 ossimDpt topDpt(centerImagePoint.
x, centerImagePoint.
y-quarterSize.
y);
1268 ossimDpt bottomDpt(centerImagePoint.
x, centerImagePoint.
y+quarterSize.
y);
1282 std::string e = MODULE;
1283 e +=
"Error leftGpt has nans!";
1294 std::string e = MODULE;
1295 e +=
"Error rightGpt has nans!";
1306 std::string e = MODULE;
1307 e +=
"Error topGpt has nans!";
1318 std::string e = MODULE;
1319 e +=
"Error bottomGpt has nans!";
1326 <<
"\nleftDpt: " << leftDpt
1327 <<
"\nrightDpt: " << rightDpt
1328 <<
"\ntopDpt: " << topDpt
1329 <<
"\nbottomDpt: " << bottomDpt
1330 <<
"\nleftGpt: " << leftGpt
1331 <<
"\nrightGpt: " << rightGpt
1332 <<
"\ntopGpt: " << topGpt
1333 <<
"\nbottomGpt: " << bottomGpt
1344 std::string e = MODULE;
1345 e +=
"Error center has nans!";
1352 <<
"ossimSensorModel::computGsd DEBUG:" 1353 <<
"\ntheGSD: " <<
theGSD 1354 <<
"\ntheMeanGSD: " <<
theMeanGSD << std::endl;
1369 <<
"// Base-class ossimSensorModel Keywords:\n" 1372 << SENSOR_ID_KW <<
": <string>\n" 1375 << REF_GPT_LAT_KW <<
": <decimal degrees>\n" 1376 << REF_GPT_LON_KW <<
": <decimal degrees>\n" 1377 << REF_GPT_HGT_KW <<
": <float meters>\n" 1378 << REF_IPT_LINE_KW <<
": <float>\n" 1379 << REF_IPT_SAMP_KW <<
": <float>\n" 1392 <<
"// Repeat following four entries for each adjustable parameter:\n" 1410 for(idx = 0; idx < numAdj; ++idx)
1433 int nobs = tieSet.
size();
1438 double minResidue = 1e-10;
1439 double minDelta = 1e-10;
1443 NEWMAT::SymmetricMatrix
A;
1444 NEWMAT::ColumnVector residue;
1445 NEWMAT::ColumnVector projResidue;
1446 double deltap_scale = 1e-4;
1448 double ki2=residue.SumSquare();
1453 std::vector< ossimAdjustableParameterInfo >& parmlist = cadj.
getParameterList();
1454 NEWMAT::ColumnVector cparm(np), nparm(np);
1455 for(
int n=0;
n<np;++
n)
1457 cparm(
n+1) = parmlist[
n].getParameter();
1460 double damping_speed = 2.0;
1463 for(
int d=1;d<=np;++d) {
1464 if (maxdiag <
A(d,d)) maxdiag=
A(d,d);
1466 double damping = 1e-3 * maxdiag;
1467 double olddamping = 0.0;
1474 while ( (!found) && (iter < iter_max) )
1476 bool decrease =
false;
1481 for(
int d=1;d<=np;++d)
A(d,d) += damping - olddamping;
1482 olddamping = damping;
1486 if (deltap.NormFrobenius() <= minDelta)
1491 nparm = cparm + deltap;
1492 for(
int n=0;
n<np;++
n)
1499 NEWMAT::ColumnVector newresidue =
getResidue(tieSet);
1500 double newki2=newresidue.SumSquare();
1501 double res_reduction = (ki2 - newki2) / (deltap.t()*(deltap*damping + projResidue)).AsScalar();
1503 cout<<sqrt(newki2/nobs)<<
" ";
1506 if (res_reduction > 0)
1512 deltap_scale =
max(1e-15, deltap.NormInfinity()*1e-4);
1517 found = ( projResidue.NormInfinity() <= minResidue );
1519 damping *=
std::max( 1.0/3.0, 1.0-std::pow((2.0*res_reduction-1.0),3));
1520 damping_speed = 2.0;
1524 for(
int n=0;
n<np;++
n)
1530 damping *= damping_speed;
1531 damping_speed *= 2.0;
1534 }
while (!decrease && !found);
1550 NEWMAT::SymmetricMatrix&
A,
1551 NEWMAT::ColumnVector& residue,
1552 NEWMAT::ColumnVector& projResidue,
1572 int no = dimObs * tieSet.
size();
1576 projResidue.ReSize(np);
1581 const vector<ossimRefPtr<ossimTieGpt> >& theTPV = tieSet.
getTiePoints();
1582 vector<ossimRefPtr<ossimTieGpt> >::const_iterator tit;
1588 std::vector<ossimDpt> imDerp(np);
1591 for (tit = theTPV.begin() ; tit != theTPV.end() ; ++tit)
1594 resIm = (*tit)->tie -
forward(*(*tit));
1595 residue(c++) = resIm.
x;
1596 residue(c++) = resIm.
y;
1599 for(
int p=0;p<np;++p)
1605 for(
int p1=0;p1<np;++p1)
1608 projResidue.element(p1) += imDerp[p1].x * resIm.
x + imDerp[p1].y * resIm.
y;
1611 for(
int p2=p1;p2<np;++p2)
1613 A.element(p1,p2) += imDerp[p1].x * imDerp[p2].x + imDerp[p1].y * imDerp[p2].y;
1621 std::vector<ossimGpt> gdDerp(np);
1624 for (tit = theTPV.begin() ; tit != theTPV.end() ; ++tit)
1628 residue(c++) = resGd.
lon = ((*tit)->lon - gd.
lon) * 100000.0;
1629 residue(c++) = resGd.
lat = ((*tit)->lat - gd.
lat) * 100000.0 * cos(gd.
lat / 180.0 *
M_PI);
1630 residue(c++) = resGd.
hgt = (*tit)->hgt - gd.
hgt;
1633 for(
int p=0;p<np;++p)
1639 for(
int p1=0;p1<np;++p1)
1642 projResidue.element(p1) += gdDerp[p1].lon * resGd.
lon + gdDerp[p1].lat * resGd.
lat + gdDerp[p1].hgt * resGd.
hgt;
1645 for(
int p2=p1;p2<np;++p2)
1647 A.element(p1,p2) += gdDerp[p1].lon * gdDerp[p2].lon + gdDerp[p1].lat * gdDerp[p2].lat + gdDerp[p1].hgt * gdDerp[p2].hgt;
1659 double den = 0.5/hdelta;
1673 res.
lon = den*(res.
lon - gd.
lon) * 100000.0;
1684 static double den = 0.5/hdelta;
1703 NEWMAT::ColumnVector
1707 NEWMAT::ColumnVector residue;
1717 int no = dimObs * tieSet.
size();
1721 const vector<ossimRefPtr<ossimTieGpt> >& theTPV = tieSet.
getTiePoints();
1722 vector<ossimRefPtr<ossimTieGpt> >::const_iterator tit;
1730 for (tit = theTPV.begin() ; tit != theTPV.end() ; ++tit)
1733 resIm = (*tit)->tie -
forward(**tit);
1734 residue(c++) = resIm.
x;
1735 residue(c++) = resIm.
y;
1741 for (tit = theTPV.begin() ; tit != theTPV.end() ; ++tit)
1745 residue(c++) = ((*tit)->lon - gd.
lon) * 100000.0;
1746 residue(c++) = ((*tit)->lat - gd.
lat) * 100000.0 * cos(gd.
lat / 180.0 *
M_PI);
1747 residue(c++) = (*tit)->hgt - gd.
hgt;
1759 NEWMAT::ColumnVector
1762 NEWMAT::ColumnVector
x =
invert(
A)*r;
1773 NEWMAT::DiagonalMatrix d;
1789 d[idx] = 1.0/d[idx];
1796 cout<<
"warning: singular matrix in SVD"<<endl;
unsigned int size() const
bool saveAdjustments(ossimKeywordlist &kwl, const ossimString &prefix=ossimString("")) const
Save all adjustments to the KWL file.
ossim_float64 theRelPosError
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
ossim_float64 width() const
double lond() const
Will convert the radian measure to degrees.
Represents serializable keyword/value map.
static const char * UL_LAT_KW
bool intersectRay(const ossimEcefRay &ray, ossimGpt &gpt, double defaultElevValue=0.0)
METHOD: intersectRay()
bool nextVertex(ossimDpt &tbd_vertex) const
METHOD: nextVertex() Assigns the ossimDpt tbd_vertex following the current vertex.
bool theExtrapolateGroundFlag
const char * find(const char *key) const
bool almostEqual(T x, T y, T tolerance=FLT_EPSILON)
virtual std::ostream & print(std::ostream &out) const
Outputs theErrorStatus as an ossimErrorCode and an ossimString.
virtual ossimOptimizableProjection & operator=(const ossimOptimizableProjection &source)
double nan()
Method to return ieee floating point double precision NAN.
const ossimDpt & ul() const
void addPoint(const ossimDpt &pt)
virtual ossimGpt inverse(const ossimDpt &pp) const
static ossimString toString(bool aValue)
Numeric to string methods.
static const char * NUMBER_LINES_KW
virtual ~ossimSensorModel()
static const char * LR_LON_KW
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.
ossim_float64 hgt
Height in meters above the ellipsiod.
static ossimElevManager * instance()
METHOD: instance() Implements singelton pattern.
virtual void lineSampleToWorld(const ossimDpt &image_point, ossimGpt &world_point) const
void setRefGndPt(const ossimGpt &pt)
Sets the center latitude, longitude, height of the image.
bool clipLineSegment(ossimDpt &p1, ossimDpt &p2) const
METHOD: clipLineSegment(p1, p2) Implements Cyrus-Beck clipping algorithm as described in: http://www...
double latd() const
Will convert the radian measure to degrees.
ossim_uint32 getNumberOfAdjustableParameters() const
std::vector< ossimAdjustableParameterInfo > & getParameterList()
bool vertex(int index, ossimDpt &tbd_vertex) const
METHOD: vertex(index) Returns the ossimDpt vertex given the index.
double distanceTo(const ossimGpt &arg_gpt) const
METHOD: distanceTo(ossimGpt) Computes straight-line distance in meters between this and arg gpt: ...
static const char * METERS_PER_PIXEL_Y_KW
static const char * TYPE_KW
virtual ossimDpt getForwardDeriv(int parmIdx, const ossimGpt &gpos, double hdelta=1e-11)
bool theExtrapolateImageFlag
const ossimSensorModel & operator=(const ossimSensorModel &rhs)
assignment operator
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
ossimDpt theSubImageOffset
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
virtual class enabling projection optimization (can be used for outlier rejection - RANSAC) ...
void computeGsd()
This method computes the ground sample distance(gsd) and sets class attributes theGSD and theMeanGSD ...
static const char * LR_LAT_KW
static const char * CE90_ABSOLUTE_KW
ossim_float64 theNominalPosError
static const char * LL_LON_KW
virtual ossim_uint32 degreesOfFreedom() const
virtual double getHeightAboveEllipsoid(const ossimGpt &gpt)
os2<< "> n<< " > nendobj n
static const char * IMAGE_CE90_KW
std::ostream & operator<<(std::ostream &os, NEWMAT::GeneralMatrix &mat)
unsigned int ossim_uint32
const char * chars() const
For backward compatibility.
double getAdjustableParameter(ossim_uint32 idx) const
ossimString trim(const ossimString &valueToTrim=ossimString(" \\)) const
this will strip lead and trailing character passed in.
ossimPolygon theBoundGndPolygon
static const char * CE90_RELATIVE_KW
bool loadAdjustments(const ossimKeywordlist &kwl, const ossimString &prefix=ossimString(""))
bool hasNans() const
will sequence through the polygon and check to see if any values are NAN
RTTI_DEF3(ossimSensorModel, "ossimSensorModel", ossimProjection, ossimOptimizableProjection, ossimAdjustableParameterInterface)
virtual void lineSampleHeightToWorld(const ossimDpt &lineSampPt, const double &heightEllipsoid, ossimGpt &worldPt) const =0
bool isParameterLocked(ossim_uint32 idx) const
static const char * LL_LAT_KW
void SVD(const Matrix &, DiagonalMatrix &, Matrix &, Matrix &, bool=true, bool=true)
const vector< ossimRefPtr< ossimTieGpt > > & getTiePoints() const
virtual void imagingRay(const ossimDpt &image_point, ossimEcefRay &image_ray) const
virtual double optimizeFit(const ossimTieGptSet &tieSet, double *targetVariance=0)
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
virtual std::ostream & print(std::ostream &out) const
bool pointWithin(const ossimDpt &point) const
METHOD: pointWithin(ossimDpt) Returns TRUE if point is inside polygon.
ossimErrorCode theErrorStatus
ossim_float64 height() const
virtual void updateModel()
virtual ossimDpt extrapolate(const ossimGpt &gp) const
static void writeGeomTemplate(ostream &os)
ossimRefPtr< ossimProjection > theSeedFunction
Used as an initial guess for iterative solutions and a guess for points outside the support bounds...
void setImageRect(const ossimDrect &imageRect)
bool clip(ossimDpt &p1, ossimDpt &p2) const
static ossimProjectionFactoryRegistry * instance()
virtual ossimObject * getBaseObject()
NEWMAT::ColumnVector getResidue(const ossimTieGptSet &tieSet)
ossim_uint32 getNumberOfVertices() const
virtual void worldToLineSample(const ossimGpt &world_point, ossimDpt &image_point) const
ossimDrect theImageClipRect
NEWMAT::ColumnVector solveLeastSquares(NEWMAT::SymmetricMatrix &A, NEWMAT::ColumnVector &r) const
long toLong() const
toLong's deprecated, please use the toInts...
virtual bool useForward() const =0
virtual ossimDpt forward(const ossimGpt &wp) const
ossimDpt midPoint() const
virtual void setAdjustableParameter(ossim_uint32 idx, double value, bool notify=false)
storage class for a set of geographic tie points, between master and slave images ...
virtual ossimGpt getInverseDeriv(int parmIdx, const ossimDpt &ipos, double hdelta=1e-11)
void setGroundRect(const ossimGpt &ul, const ossimGpt &ur, const ossimGpt &lr, const ossimGpt &ll)
static const char * UL_LON_KW
static const char * UR_LAT_KW
static const char * UR_LON_KW
const char * c_str() const
Returns a pointer to a null-terminated array of characters representing the string's contents...
static const char * ID_KW
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
void buildNormalEquation(const ossimTieGptSet &tieSet, NEWMAT::SymmetricMatrix &A, NEWMAT::ColumnVector &residue, NEWMAT::ColumnVector &projResidue, double pstep_scale)
virtual bool insideImage(const ossimDpt &p) const
const ossimAdjustableParameterInterface & operator=(const ossimAdjustableParameterInterface &rhs)
virtual ossimSensorModel::CovMatStatus getObsCovMat(const ossimDpt &ipos, NEWMAT::SymmetricMatrix &Cov, const ossim_float64 defPointingSigma=0.5) const
Gives 2X2 covariance matrix of observations.
void getAdjustment(ossimAdjustmentInfo &adj) const
void setRefImgPt(const ossimDpt &pt)
Sets the center line sampe of the image.
ossimDpt theParWRTx
Partials for current point.
virtual void lineSampleToWorld(const ossimDpt &lineSampPt, ossimGpt &worldPt) const =0
ossimDpt theObs
Observations & residuals for current point.
virtual void worldToLineSample(const ossimGpt &worldPoint, ossimDpt &lineSampPt) const =0
const ossimDpt & lr() const
static const char * METERS_PER_PIXEL_X_KW
static const char * NUMBER_SAMPLES_KW
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
std::basic_ostream< char > ostream
Base class for char output streams.
NEWMAT::Matrix invert(const NEWMAT::Matrix &m) const
stable invert stolen from ossimRpcSolver
bool isnan(const float &v)
isnan Test for floating point Not A Number (NAN) value.