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

#include <ossimMeanRadialLensDistortion.h>

Inheritance diagram for ossimMeanRadialLensDistortion:
ossimLensDistortion ossim2dTo2dTransform ossimObject ossimReferenced

Public Member Functions

 ossimMeanRadialLensDistortion ()
 
 ossimMeanRadialLensDistortion (ossimDpt calibratedPrincipalPoint, const NEWMAT::ColumnVector &radialDistance, const NEWMAT::ColumnVector &radialDistortion)
 
const std::vector< double > & getCoefficients () const
 
std::vector< double > & getCoefficients ()
 
virtual std::ostream & print (std::ostream &out) const
 Generic print method. More...
 
double deltaR (double r) const
 
virtual void undistort (const ossimDpt &input, ossimDpt &output) const
 
void solveCoefficients (const NEWMAT::ColumnVector &radialDistance, const NEWMAT::ColumnVector &radialDistortion)
 
void solveCoefficients (const std::vector< double > &radialDistance, const std::vector< double > &radialDistortion)
 
virtual bool saveState (ossimKeywordlist &kwl, const char *prefix=0) const
 
virtual bool loadState (const ossimKeywordlist &kwl, const char *prefix=0)
 
- Public Member Functions inherited from ossimLensDistortion
 ossimLensDistortion (const ossimDpt &callibratedCenter=ossimDpt(0, 0))
 
void setCenter (const ossimDpt &center)
 
const ossimDptgetCenter () const
 
virtual void forward (const ossimDpt &input, ossimDpt &output) const
 
virtual void inverse (const ossimDpt &input, ossimDpt &output)
 
virtual void distort (const ossimDpt &input, ossimDpt &output) const
 
- Public Member Functions inherited from ossim2dTo2dTransform
virtual void forward (ossimDpt &modify_this) const
 
virtual void inverse (const ossimDpt &input, ossimDpt &output) const
 
virtual void inverse (ossimDpt &modify_this) const
 
virtual const ossim2dTo2dTransformoperator= (const ossim2dTo2dTransform &rhs)
 
virtual ossimDpt getOrigin () const
 
void setConvergenceThreshold (const double &new_threshold)
 
void setMaxIterations (int new_max_iters)
 
void setDxDy (const ossimDpt &dxdy)
 
- Public Member Functions inherited from ossimObject
 ossimObject ()
 
virtual ~ossimObject ()
 
virtual ossimObjectdup () const
 
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 bool isEqualTo (const ossimObject &obj, ossimCompareType compareType=OSSIM_COMPARE_FULL) 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
 

Protected Attributes

std::vector< double > theCoefficients
 
- Protected Attributes inherited from ossimLensDistortion
ossimDpt theCenter
 
- Protected Attributes inherited from ossim2dTo2dTransform
double theConvergenceThreshold
 
int theMaxIterations
 
ossimDpt theDxDy
 

Additional Inherited Members

- Protected Member Functions inherited from ossim2dTo2dTransform
 ossim2dTo2dTransform ()
 
virtual ~ossim2dTo2dTransform ()
 
- Protected Member Functions inherited from ossimReferenced
virtual ~ossimReferenced ()
 

Detailed Description

Definition at line 19 of file ossimMeanRadialLensDistortion.h.

Constructor & Destructor Documentation

◆ ossimMeanRadialLensDistortion() [1/2]

ossimMeanRadialLensDistortion::ossimMeanRadialLensDistortion ( )
inline

Definition at line 22 of file ossimMeanRadialLensDistortion.h.

References theCoefficients.

23  {
24  theCoefficients.resize(4);
25  theCoefficients[0] = 0.0;
26  theCoefficients[1] = 0.0;
27  theCoefficients[2] = 0.0;
28  theCoefficients[3] = 0.0;
29  }

◆ ossimMeanRadialLensDistortion() [2/2]

ossimMeanRadialLensDistortion::ossimMeanRadialLensDistortion ( ossimDpt  calibratedPrincipalPoint,
const NEWMAT::ColumnVector &  radialDistance,
const NEWMAT::ColumnVector &  radialDistortion 
)
inline

Instantiate a ossimMeanRadialLens with the calibrated data. The data consists of the Principal point, focal distance, radialDistance measures for the distortion deltas, the radial distortion values.

example of construction:

lets say we have the following:

principal point = (.008 , -.001) mm

and

field angle radial distance deltaR (distortion)


7.5 deg. .004 mm .0202 mm 15 deg. .007 mm .0411 mm 22.5 deg. .007 mm .0635 mm : : :

then construct the ossimMeanRadialLensDistortion class to construct the given focal length and principal point and the middle column as the radial distance column vector and the third column as the distortion values.

Definition at line 62 of file ossimMeanRadialLensDistortion.h.

References solveCoefficients(), and theCoefficients.

65  :ossimLensDistortion(calibratedPrincipalPoint)
66  {
67  theCoefficients.resize(4);
68  solveCoefficients(radialDistance, radialDistortion);
69  }
void solveCoefficients(const NEWMAT::ColumnVector &radialDistance, const NEWMAT::ColumnVector &radialDistortion)
ossimLensDistortion(const ossimDpt &callibratedCenter=ossimDpt(0, 0))

Member Function Documentation

◆ deltaR()

double ossimMeanRadialLensDistortion::deltaR ( double  r) const

dletaR computes how much we should adjust r. The return value is the adjustment amount. This method is used by adjustPoint.

Definition at line 84 of file ossimMeanRadialLensDistortion.cpp.

References theCoefficients.

Referenced by undistort().

85 {
86  double r3 = radius*radius*radius;
87  double r5 = r3*radius*radius;
88  double r7 = r5*radius*radius;
89 
90  return (radius*theCoefficients[0] +r3*theCoefficients[1] + r5*theCoefficients[2] + r7*theCoefficients[3]);
91 }

◆ getCoefficients() [1/2]

const std::vector<double>& ossimMeanRadialLensDistortion::getCoefficients ( ) const
inline

Returns the coefficients (k1, k2, k3, k4) for the deltaR polynomial:

deltaR = k1*r + k2*r^3 + k3*r^5 + k4*r^7

Definition at line 76 of file ossimMeanRadialLensDistortion.h.

References theCoefficients.

76 {return theCoefficients;}

◆ getCoefficients() [2/2]

std::vector<double>& ossimMeanRadialLensDistortion::getCoefficients ( )
inline

Definition at line 77 of file ossimMeanRadialLensDistortion.h.

References theCoefficients.

77 {return theCoefficients;}

◆ loadState()

bool ossimMeanRadialLensDistortion::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 ossimLensDistortion.

Definition at line 141 of file ossimMeanRadialLensDistortion.cpp.

References distance(), ossimKeywordlist::find(), ossimLensDistortion::loadState(), solveCoefficients(), theCoefficients, ossimString::toDouble(), and ossimString::toString().

143 {
144  const char* k0 = kwl.find(prefix, "k0");
145  const char* k1 = kwl.find(prefix, "k1");
146  const char* k2 = kwl.find(prefix, "k2");
147  const char* k3 = kwl.find(prefix, "k3");
148 
149  if(k1&&k2&&k3&&k3)
150  {
155  }
156  else
157  {
158  std::vector<double> distances;
159  std::vector<double> distortions;
160  ossim_uint32 idx = 0;
161  const char* distance = kwl.find(prefix, "distance0");
162  const char* distortion = kwl.find(prefix, "distortion0");
163 
164  while(distance&&distortion)
165  {
166  distances.push_back(ossimString(distance).toDouble());
167  distortions.push_back(ossimString(distortion).toDouble());
168  ++idx;
169  distance = kwl.find(prefix,
170  ossimString("distance")+ossimString::toString(idx));
171  distortion = kwl.find(prefix,
172  ossimString("distortion")+ossimString::toString(idx));
173  }
174 
175  solveCoefficients(distances, distortions);
176  }
177 
178  return ossimLensDistortion::loadState(kwl, prefix);
179 
180 }
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
const char * find(const char *key) const
static ossimString toString(bool aValue)
Numeric to string methods.
void solveCoefficients(const NEWMAT::ColumnVector &radialDistance, const NEWMAT::ColumnVector &radialDistortion)
unsigned int ossim_uint32
double toDouble() const
float distance(double lat1, double lon1, double lat2, double lon2, int units)

◆ print()

virtual std::ostream& ossimMeanRadialLensDistortion::print ( std::ostream &  out) const
inlinevirtual

Generic print method.

Derived classes should re-implement as they see fit.

Returns
std::ostream&

Reimplemented from ossim2dTo2dTransform.

Definition at line 81 of file ossimMeanRadialLensDistortion.h.

82  {return out;}

◆ saveState()

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

Method to save the state of the object to a keyword list. Return true if ok or false on error.

Reimplemented from ossimLensDistortion.

Definition at line 116 of file ossimMeanRadialLensDistortion.cpp.

References ossimKeywordlist::add(), ossimLensDistortion::saveState(), and theCoefficients.

Referenced by ossimApplanixUtmModel::saveState(), and ossimApplanixEcefModel::saveState().

118 {
119  kwl.add(prefix,
120  "k0",
121  theCoefficients[0],
122  true);
123 
124  kwl.add(prefix,
125  "k1",
126  theCoefficients[1],
127  true);
128  kwl.add(prefix,
129  "k2",
130  theCoefficients[2],
131  true);
132 
133  kwl.add(prefix,
134  "k3",
135  theCoefficients[3],
136  true);
137 
138  return ossimLensDistortion::saveState(kwl, prefix);
139 }
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const

◆ solveCoefficients() [1/2]

void ossimMeanRadialLensDistortion::solveCoefficients ( const NEWMAT::ColumnVector &  radialDistance,
const NEWMAT::ColumnVector &  radialDistortion 
)

solves the coefficients given the radial distances and distortion for each distance.

Definition at line 44 of file ossimMeanRadialLensDistortion.cpp.

References theCoefficients.

Referenced by loadState(), ossimMeanRadialLensDistortion(), and solveCoefficients().

46 {
47  NEWMAT::ColumnVector coefficients(4);
48  theCoefficients.resize(4);
49  theCoefficients[0] = 0;
50  theCoefficients[1] = 0;
51  theCoefficients[2] = 0;
52  theCoefficients[3] = 0;
53  if((radialDistance.Nrows() == 0) ||
54  (radialDistortion.Nrows() == 0))
55  {
56  return;
57  }
58  if(radialDistance.Nrows() == radialDistortion.Nrows())
59  {
60  NEWMAT::Matrix M(radialDistance.Nrows(), 4);
61 
62  // set up the matrix
63  for(long row = 0; row < M.Nrows(); row++)
64  {
65  M[row][0] = radialDistance[row];
66  M[row][1] = M[row][0]*radialDistance[row]*radialDistance[row];
67  M[row][2] = M[row][1]*radialDistance[row]*radialDistance[row];
68  M[row][3] = M[row][2]*radialDistance[row]*radialDistance[row];
69  }
70 
71  NEWMAT::Matrix mTranspose = M.t();
72  coefficients = ((mTranspose*M).i())*(mTranspose*radialDistortion);
73 
74  theCoefficients[0] = coefficients[0];
75  theCoefficients[1] = coefficients[1];
76  theCoefficients[2] = coefficients[2];
77  theCoefficients[3] = coefficients[3];
78  }
79  else
80  {
81  }
82 }

◆ solveCoefficients() [2/2]

void ossimMeanRadialLensDistortion::solveCoefficients ( const std::vector< double > &  radialDistance,
const std::vector< double > &  radialDistortion 
)

solves the coefficients given the radial distances and distortion for each distance.

Definition at line 21 of file ossimMeanRadialLensDistortion.cpp.

References solveCoefficients(), and theCoefficients.

23 {
24  NEWMAT::ColumnVector distanceVec((int)radialDistance.size());
25  NEWMAT::ColumnVector distortionVec((int)radialDistortion.size());
26  ossim_uint32 idx = 0;
27 
28  theCoefficients[0] = 0;
29  theCoefficients[1] = 0;
30  theCoefficients[2] = 0;
31  theCoefficients[3] = 0;
32  if(radialDistance.size() == radialDistortion.size())
33  {
34  for(idx = 0; idx < radialDistance.size();++idx)
35  {
36  distanceVec[idx] = radialDistance[idx];
37  distortionVec[idx] = radialDistortion[idx];
38  }
39  solveCoefficients(distanceVec,
40  distortionVec);
41  }
42 }
void solveCoefficients(const NEWMAT::ColumnVector &radialDistance, const NEWMAT::ColumnVector &radialDistortion)
unsigned int ossim_uint32

◆ undistort()

void ossimMeanRadialLensDistortion::undistort ( const ossimDpt input,
ossimDpt output 
) const
virtual

Implements ossimLensDistortion.

Definition at line 94 of file ossimMeanRadialLensDistortion.cpp.

References deltaR(), FLT_EPSILON, ossimLensDistortion::theCenter, ossimDpt::x, and ossimDpt::y.

Referenced by ossimApplanixUtmModel::imagingRay(), and ossimApplanixEcefModel::imagingRay().

95 {
96  ossimDpt deltaPosition(input.x - theCenter.x,
97  input.y - theCenter.y);
98  double r = sqrt(deltaPosition.x*deltaPosition.x +
99  deltaPosition.y*deltaPosition.y);
100  double deltaRadius = deltaR(r);
101 
102  if((fabs(r) <= FLT_EPSILON)||
103  (fabs(deltaRadius) <= FLT_EPSILON))
104  {
105  output = input;
106  return;
107  }
108 
109  double deltaX = (deltaPosition.x*(deltaRadius/r));
110  double deltaY = (deltaPosition.y*(deltaRadius/r));
111 
112  output.x = deltaPosition.x-deltaX;
113  output.y = deltaPosition.y-deltaY;
114 }
double y
Definition: ossimDpt.h:165
#define FLT_EPSILON
double x
Definition: ossimDpt.h:164

Member Data Documentation

◆ theCoefficients

std::vector<double> ossimMeanRadialLensDistortion::theCoefficients
protected

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