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

#include <ossim2dTo2dTransform.h>

Inheritance diagram for ossim2dTo2dTransform:
ossimObject ossimReferenced ossim2dBilinearTransform ossim2dTo2dIdentityTransform ossim2dTo2dMatrixTransform ossim2dTo2dShiftTransform ossimAffineTransform ossimImageViewTransform ossimLensDistortion ossimQuadTreeWarp ossimRadialDecentLensDistortion

Public Member Functions

virtual void forward (const ossimDpt &input, ossimDpt &output) const =0
 
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...
 
virtual bool saveState (ossimKeywordlist &kwl, const char *prefix=0) const
 
virtual bool loadState (const ossimKeywordlist &kwl, const char *prefix=0)
 
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 Member Functions

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

Protected Attributes

double theConvergenceThreshold
 
int theMaxIterations
 
ossimDpt theDxDy
 

Detailed Description

Definition at line 17 of file ossim2dTo2dTransform.h.

Constructor & Destructor Documentation

◆ ossim2dTo2dTransform()

ossim2dTo2dTransform::ossim2dTo2dTransform ( )
protected

Definition at line 47 of file ossim2dTo2dTransform.cpp.

48  :
49  theConvergenceThreshold (DEFAULT_THRESHOLD),
50  theMaxIterations (DEFAULT_MAX_ITERATIONS),
51  theDxDy(1.0, 1.0)
52 {
53 }

◆ ~ossim2dTo2dTransform()

virtual ossim2dTo2dTransform::~ossim2dTo2dTransform ( )
inlineprotectedvirtual

Definition at line 55 of file ossim2dTo2dTransform.h.

55 {}

Member Function Documentation

◆ forward() [1/2]

virtual void ossim2dTo2dTransform::forward ( const ossimDpt input,
ossimDpt output 
) const
pure virtual

◆ forward() [2/2]

void ossim2dTo2dTransform::forward ( ossimDpt modify_this) const
virtual

Reimplemented in ossimQuadTreeWarp, ossim2dTo2dMatrixTransform, ossim2dBilinearTransform, ossimRadialDecentLensDistortion, ossim2dTo2dShiftTransform, and ossim2dTo2dIdentityTransform.

Definition at line 225 of file ossim2dTo2dTransform.cpp.

References forward().

226 {
227  ossimDpt output;
228  forward(modify_this, output);
229  modify_this = output;
230 }
virtual void forward(const ossimDpt &input, ossimDpt &output) const =0

◆ getOrigin()

ossimDpt ossim2dTo2dTransform::getOrigin ( ) const
virtual

Used by the inverse iterator. This will give it a good initial value that is within the input transforms

Reimplemented in ossimQuadTreeWarp, and ossimAffineTransform.

Definition at line 239 of file ossim2dTo2dTransform.cpp.

240 {
241  return ossimDpt(0,0);
242 }

◆ inverse() [1/2]

void ossim2dTo2dTransform::inverse ( const ossimDpt input,
ossimDpt output 
) const
virtual

Reimplemented in ossim2dTo2dMatrixTransform, ossim2dBilinearTransform, ossim2dTo2dShiftTransform, ossim2dTo2dIdentityTransform, ossimAffineTransform, and ossimImageViewTransform.

Definition at line 58 of file ossim2dTo2dTransform.cpp.

Referenced by ossimImageGeometry::fullToRn(), inverse(), and ossimImageViewTransform::viewToImage().

60 {
61  static const char MODULE[] = "ossim2dTo2dTransform::inverse";
62  if (traceExec()) ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG: " << MODULE << ", entering...\n";
63 
64  //***
65  // Begin with guess. Forward transform is defined as trasforming left to
66  // right. We are therefore solving for left:
67  //***
68  ossimDpt left = getOrigin();
69  ossimDpt left_dx;
70  ossimDpt left_dy;
71  ossimDpt right;
72  ossimDpt right_dx;
73  ossimDpt right_dy;
74  ossimDpt dr_dx;
75  ossimDpt dr_dy;
76  ossimDpt r_diff;
77  ossimDpt l_diff;
78  double inverse_norm;
79  int iters=0;
80  //***
81  // Begin iterations:
82  //***
83  do
84  {
85  //***
86  // establish perturbed image points about the guessed point:
87  //***
88  left_dx.x = left.x + theDxDy.x;
89  left_dx.y = left.y;
90  left_dy.x = left.x;
91  left_dy.y = left.y + theDxDy.y;
92 
93  //***
94  // Compute numerical partials at current guessed point:
95  //***
96  forward(left, right);
97  forward(left_dx, right_dx);
98  forward(left_dy, right_dy);
99 
100  dr_dx.x = (right_dx.x - right.x)/theDxDy.x; //e
101  dr_dx.y = (right_dx.y - right.y)/theDxDy.y; //g
102  dr_dy.x = (right_dy.x - right.x)/theDxDy.x; //f
103  dr_dy.y = (right_dy.y - right.y)/theDxDy.y; //h
104 
105  //***
106  // Test for convergence:
107  //***
108  r_diff = input - right;
109 
110  //***
111  // Compute linearized estimate of image point given gp delta:
112  //***
113  inverse_norm = dr_dy.x*dr_dx.y - dr_dx.x*dr_dy.y; // fg-eh
114 
115  if (inverse_norm != 0)
116  {
117  l_diff.x = (-dr_dy.y*r_diff.x + dr_dy.x*r_diff.y)/inverse_norm;
118  l_diff.y = ( dr_dx.y*r_diff.x - dr_dx.x*r_diff.y)/inverse_norm;
119 
120  left += l_diff;
121  }
122  else
123  {
124  l_diff.x = 0;
125  l_diff.y = 0;
126  }
127 
128  iters++;
129 
130  } while (((fabs(l_diff.x) > theConvergenceThreshold) ||
131  (fabs(l_diff.y) > theConvergenceThreshold)) &&
132  (iters < theMaxIterations));
133 
134  //***
135  // Note that this error mesage appears only if max count was reached while
136  // iterating. A linear (no iteration) solution would finish with iters =
137  // MAX_NUM_ITERATIONS + 1:
138  //***
139  if (iters == theMaxIterations)
140  {
141  ossimNotify(ossimNotifyLevel_WARN) << "WARNING: " << MODULE << ", exceeded max number of iterations computing inverse "
142  << "transform for point: " << input << "\n";
143  }
144 
145  output = left;
146  if (traceExec()) ossimNotify(ossimNotifyLevel_DEBUG) << "DEBUG: " << MODULE << ", returning...\n";
147  return;
148 
149 }
virtual void forward(const ossimDpt &input, ossimDpt &output) const =0
double y
Definition: ossimDpt.h:165
virtual ossimDpt getOrigin() const
double x
Definition: ossimDpt.h:164
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ inverse() [2/2]

void ossim2dTo2dTransform::inverse ( ossimDpt modify_this) const
virtual

Reimplemented in ossim2dTo2dMatrixTransform, ossim2dBilinearTransform, ossim2dTo2dShiftTransform, and ossim2dTo2dIdentityTransform.

Definition at line 232 of file ossim2dTo2dTransform.cpp.

References inverse().

233 {
234  ossimDpt output;
235  inverse(modify_this, output);
236  modify_this = output;
237 }
virtual void inverse(const ossimDpt &input, ossimDpt &output) const

◆ loadState()

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

Reimplemented in ossimQuadTreeWarp, ossim2dTo2dMatrixTransform, ossim2dBilinearTransform, ossimImageViewAffineTransform, ossimImageViewTransform, ossimMeanRadialLensDistortion, ossim2dTo2dShiftTransform, ossimImageViewProjectionTransform, ossimRadialDecentLensDistortion, ossimTangentialRadialLensDistortion, ossimAffineTransform, and ossimLensDistortion.

Definition at line 177 of file ossim2dTo2dTransform.cpp.

References ossimKeywordNames::CONVERGENCE_THRESHOLD_KW, ossimKeywordlist::find(), ossimObject::loadState(), ossimKeywordNames::MAX_ITERATIONS_KW, ossimString::split(), theConvergenceThreshold, theDxDy, theMaxIterations, ossimString::trim(), ossimDpt::x, and ossimDpt::y.

Referenced by ossim2dTo2dTransformFactory::createTransform(), ossimLensDistortion::loadState(), ossimAffineTransform::loadState(), ossimRadialDecentLensDistortion::loadState(), ossim2dTo2dShiftTransform::loadState(), ossimImageViewTransform::loadState(), ossim2dBilinearTransform::loadState(), ossim2dTo2dMatrixTransform::loadState(), ossimQuadTreeWarp::loadState(), ossimAffineProjection::ossimAffineProjection(), and ossimWarpProjection::ossimWarpProjection().

179 {
180  bool result = true;
181 
182  const char* buf;
183 
185 
186  if (buf)
187  {
188  theConvergenceThreshold = atof(buf);
189  }
190  else
191  {
192  theConvergenceThreshold = .00000000000002;
193  }
194 
195  buf= kwl.find(prefix, ossimKeywordNames::MAX_ITERATIONS_KW);
196  if(buf)
197  {
198  theMaxIterations = atoi(buf);
199  }
200  else
201  {
202  theMaxIterations = 10;
203  }
204  const char* dxdy = kwl.find(prefix, "dxdy");
205  if(dxdy)
206  {
207  ossimString tempString(dxdy);
208  std::vector<ossimString> splitArray;
209  tempString = tempString.trim();
210  tempString.split(splitArray, " ");
211  if(splitArray.size()==2)
212  {
213  theDxDy.x = splitArray[0].toDouble();
214  theDxDy.y = splitArray[1].toDouble();
215  }
216  }
217  if(result)
218  {
219  ossimObject::loadState(kwl, prefix);
220  }
221 
222  return result;
223 }
const char * find(const char *key) const
double y
Definition: ossimDpt.h:165
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
static const char * MAX_ITERATIONS_KW
double x
Definition: ossimDpt.h:164
static const char * CONVERGENCE_THRESHOLD_KW

◆ operator=()

const ossim2dTo2dTransform & ossim2dTo2dTransform::operator= ( const ossim2dTo2dTransform rhs)
virtual

◆ print()

std::ostream & ossim2dTo2dTransform::print ( std::ostream &  out) const
virtual

Generic print method.

Derived classes should re-implement as they see fit.

Returns
std::ostream&

Reimplemented from ossimObject.

Reimplemented in ossim2dTo2dMatrixTransform, ossim2dBilinearTransform, ossimQuadTreeWarp, ossimRadialDecentLensDistortion, ossim2dTo2dShiftTransform, ossimAffineTransform, ossimImageViewTransform, ossimMeanRadialLensDistortion, ossimImageViewProjectionTransform, and ossimTangentialRadialLensDistortion.

Definition at line 273 of file ossim2dTo2dTransform.cpp.

References theConvergenceThreshold, theDxDy, and theMaxIterations.

Referenced by ossim2dTo2dShiftTransform::print(), ossim2dBilinearTransform::print(), ossim2dTo2dMatrixTransform::print(), and ossimImageGeometry::print().

274 {
275  out << "convergenceThreshold: " << theConvergenceThreshold << "\n"
276  << "maxIterations: " << theMaxIterations << "\n"
277  << "dxdy: " << theDxDy << "\n";
278  return out;
279 }

◆ saveState()

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

Reimplemented in ossimQuadTreeWarp, ossim2dTo2dMatrixTransform, ossim2dBilinearTransform, ossimImageViewAffineTransform, ossimImageViewTransform, ossimImageViewProjectionTransform, ossimMeanRadialLensDistortion, ossim2dTo2dShiftTransform, ossimRadialDecentLensDistortion, ossimTangentialRadialLensDistortion, ossimAffineTransform, and ossimLensDistortion.

Definition at line 154 of file ossim2dTo2dTransform.cpp.

References ossimKeywordlist::add(), ossimKeywordNames::CONVERGENCE_THRESHOLD_KW, ossimKeywordNames::MAX_ITERATIONS_KW, ossimObject::saveState(), theConvergenceThreshold, theDxDy, theMaxIterations, ossimString::toString(), ossimDpt::x, and ossimDpt::y.

Referenced by ossimLensDistortion::saveState(), ossimAffineTransform::saveState(), ossimRadialDecentLensDistortion::saveState(), ossim2dTo2dShiftTransform::saveState(), ossimImageViewTransform::saveState(), ossim2dBilinearTransform::saveState(), ossim2dTo2dMatrixTransform::saveState(), ossimQuadTreeWarp::saveState(), and ossimImageGeometry::saveState().

156 {
157  kwl.add(prefix,
160  true);
161  kwl.add(prefix,
164  true);
165  kwl.add(prefix,
166  "dxdy",
169  true);
170 
171  return ossimObject::saveState(kwl, prefix);
172 }
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
Definition: ossimObject.cpp:95
double y
Definition: ossimDpt.h:165
static ossimString toString(bool aValue)
Numeric to string methods.
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
static const char * MAX_ITERATIONS_KW
double x
Definition: ossimDpt.h:164
static const char * CONVERGENCE_THRESHOLD_KW

◆ setConvergenceThreshold()

void ossim2dTo2dTransform::setConvergenceThreshold ( const double &  new_threshold)

Definition at line 244 of file ossim2dTo2dTransform.cpp.

References theConvergenceThreshold.

245 {
246  theConvergenceThreshold = new_threshold;
247 }

◆ setDxDy()

void ossim2dTo2dTransform::setDxDy ( const ossimDpt dxdy)

Definition at line 254 of file ossim2dTo2dTransform.cpp.

References theDxDy, ossimDpt::x, and ossimDpt::y.

255 {
256  theDxDy.x = dxdy.x;
257  theDxDy.y = dxdy.y;
258 }
double y
Definition: ossimDpt.h:165
double x
Definition: ossimDpt.h:164

◆ setMaxIterations()

void ossim2dTo2dTransform::setMaxIterations ( int  new_max_iters)

Definition at line 249 of file ossim2dTo2dTransform.cpp.

References theMaxIterations.

250 {
251  theMaxIterations = new_max_iters;
252 }

Member Data Documentation

◆ theConvergenceThreshold

double ossim2dTo2dTransform::theConvergenceThreshold
protected

◆ theDxDy

ossimDpt ossim2dTo2dTransform::theDxDy
protected

Definition at line 59 of file ossim2dTo2dTransform.h.

Referenced by loadState(), operator=(), print(), saveState(), and setDxDy().

◆ theMaxIterations

int ossim2dTo2dTransform::theMaxIterations
protected

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