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

#include <ossimLensDistortion.h>

Inheritance diagram for ossimLensDistortion:
ossim2dTo2dTransform ossimObject ossimReferenced ossimMeanRadialLensDistortion ossimSmacCallibrationSystem ossimTangentialRadialLensDistortion

Public Member Functions

 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
 
virtual void undistort (const ossimDpt &input, ossimDpt &output) const =0
 
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 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
 
virtual std::ostream & print (std::ostream &out) const
 Generic print method. More...
 
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

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 17 of file ossimLensDistortion.h.

Constructor & Destructor Documentation

◆ ossimLensDistortion()

ossimLensDistortion::ossimLensDistortion ( const ossimDpt callibratedCenter = ossimDpt(0,0))
inline

Definition at line 20 of file ossimLensDistortion.h.

21  :theCenter(callibratedCenter)
22  {
23  }

Member Function Documentation

◆ distort()

void ossimLensDistortion::distort ( const ossimDpt input,
ossimDpt output 
) const
virtual

Definition at line 57 of file ossimLensDistortion.cpp.

References DBL_EPSILON, ossim2dTo2dTransform::theConvergenceThreshold, ossim2dTo2dTransform::theMaxIterations, ossimDpt::u, undistort(), ossimDpt::v, ossimDpt::x, and ossimDpt::y.

Referenced by ossimSmacCallibrationSystem::test(), ossimApplanixUtmModel::worldToLineSample(), ossimSpectraboticsRedEdgeModel::worldToLineSample(), and ossimApplanixEcefModel::worldToLineSample().

58 {
59  int iters = 0;
60 
61  //***
62  // Begin with guess. Forward transform is defined as trasforming left to
63  // right. We are therefore solving for left:
64  //***
65  ossimDpt left (input);
66  ossimDpt left_dx;
67  ossimDpt left_dy;
68  ossimDpt right;
69  ossimDpt right_dx;
70  ossimDpt right_dy;
71  ossimDpt dr_dx;
72  ossimDpt dr_dy;
73  ossimDpt r_diff;
74  ossimDpt l_diff;
75  double inverse_norm;
76 
77  //***
78  // Begin iterations:
79  //***
80  do
81  {
82  //***
83  // establish perturbed image points about the guessed point:
84  //***
85  left_dx.x = left.x + 1.0;
86  left_dx.y = left.y;
87  left_dy.x = left.x;
88  left_dy.y = left.y + 1.0;
89 
90  //***
91  // Compute numerical partials at current guessed point:
92  //***
93  undistort(left, right);
94  undistort(left_dx, right_dx);
95  undistort(left_dy, right_dy);
96 
97  dr_dx.x = (right_dx.x - right.x); //e
98  dr_dx.y = (right_dx.y - right.y); //g
99  dr_dy.x = (right_dy.x - right.x); //f
100  dr_dy.y = (right_dy.y - right.y); //h
101 
102  //***
103  // Test for convergence:
104  //***
105  r_diff = input - right;
106 
107  //***
108  // Compute linearized estimate of image point given gp delta:
109  //***
110  inverse_norm = dr_dy.u*dr_dx.v - dr_dx.u*dr_dy.v; // fg-eh
111  if (std::fabs(inverse_norm) > DBL_EPSILON)
112  {
113  l_diff.u = (-dr_dy.v*r_diff.u + dr_dy.u*r_diff.v)/inverse_norm;
114  l_diff.v = ( dr_dx.v*r_diff.u - dr_dx.u*r_diff.v)/inverse_norm;
115  left += l_diff;
116  }
117  else
118  {
119  l_diff.u = 0;
120  l_diff.v = 0;
121  }
122 
123  iters++;
124 
125  } while (((fabs(l_diff.u) > theConvergenceThreshold) ||
126  (fabs(l_diff.v) > theConvergenceThreshold)) &&
127  (iters < theMaxIterations));
128  output = left;
129 }
double u
Definition: ossimDpt.h:164
double y
Definition: ossimDpt.h:165
#define DBL_EPSILON
virtual void undistort(const ossimDpt &input, ossimDpt &output) const =0
double x
Definition: ossimDpt.h:164
double v
Definition: ossimDpt.h:165

◆ forward()

virtual void ossimLensDistortion::forward ( const ossimDpt input,
ossimDpt output 
) const
inlinevirtual

Implements ossim2dTo2dTransform.

Definition at line 29 of file ossimLensDistortion.h.

31  {
32  distort(input, output);
33  }
virtual void distort(const ossimDpt &input, ossimDpt &output) const

◆ getCenter()

const ossimDpt& ossimLensDistortion::getCenter ( ) const
inline

Definition at line 28 of file ossimLensDistortion.h.

28 {return theCenter;}

◆ inverse()

virtual void ossimLensDistortion::inverse ( const ossimDpt input,
ossimDpt output 
)
inlinevirtual

Definition at line 34 of file ossimLensDistortion.h.

36  {
37  undistort(input, output);
38  }
virtual void undistort(const ossimDpt &input, ossimDpt &output) const =0

◆ loadState()

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

Reimplemented in ossimMeanRadialLensDistortion, and ossimTangentialRadialLensDistortion.

Definition at line 33 of file ossimLensDistortion.cpp.

References ossimKeywordlist::find(), ossim2dTo2dTransform::loadState(), ossimString::split(), theCenter, ossimString::trim(), ossimDpt::x, and ossimDpt::y.

Referenced by ossimTangentialRadialLensDistortion::loadState(), and ossimMeanRadialLensDistortion::loadState().

35 {
36  const char* center = kwl.find(prefix, "center");
37  theCenter.x = 0.0;
38  theCenter.y = 0.0;
39 
40  if(center)
41  {
42  std::vector<ossimString> splitString;
43  ossimString tempString(center);
44  tempString = tempString.trim();
45  tempString.split(splitString, " ");
46  if(splitString.size() == 2)
47  {
48  theCenter.x = splitString[0].toDouble();
49  theCenter.y = splitString[1].toDouble();
50  }
51  }
52 
53  return ossim2dTo2dTransform::loadState(kwl, prefix);
54 
55 }
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
const char * find(const char *key) const
double y
Definition: ossimDpt.h:165
double x
Definition: ossimDpt.h:164

◆ saveState()

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

Reimplemented in ossimMeanRadialLensDistortion, and ossimTangentialRadialLensDistortion.

Definition at line 20 of file ossimLensDistortion.cpp.

References ossimKeywordlist::add(), ossim2dTo2dTransform::saveState(), theCenter, ossimString::toString(), ossimDpt::x, and ossimDpt::y.

Referenced by ossimTangentialRadialLensDistortion::saveState(), and ossimMeanRadialLensDistortion::saveState().

22 {
24 
25  kwl.add(prefix,
26  "center",
28  true);
29 
30  return true;
31 }
double y
Definition: ossimDpt.h:165
static ossimString toString(bool aValue)
Numeric to string methods.
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
double x
Definition: ossimDpt.h:164

◆ setCenter()

void ossimLensDistortion::setCenter ( const ossimDpt center)
inline

Definition at line 24 of file ossimLensDistortion.h.

25  {
26  theCenter = center;
27  }

◆ undistort()

virtual void ossimLensDistortion::undistort ( const ossimDpt input,
ossimDpt output 
) const
pure virtual

Member Data Documentation

◆ theCenter

ossimDpt ossimLensDistortion::theCenter
protected

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