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

ossim2dTo2dMatrixTransform allows one to specify a set of input points and output points and will fit a bilinear transform to those points. More...

#include <ossim2dTo2dMatrixTransform.h>

Inheritance diagram for ossim2dTo2dMatrixTransform:
ossim2dTo2dTransform ossimObject ossimReferenced

Public Member Functions

 ossim2dTo2dMatrixTransform ()
 Initialize to the identity. More...
 
 ossim2dTo2dMatrixTransform (const ossimDpt *input, const ossimDpt *output, ossim_uint32 arraySize)
 Initialize the transform that best fits the input and output arrays. More...
 
 ossim2dTo2dMatrixTransform (const ossimDpt &in1, const ossimDpt &in2, const ossimDpt &in3, const ossimDpt &in4, const ossimDpt &out1, const ossimDpt &out2, const ossimDpt &out3, const ossimDpt &out4)
 Mapping 4 corners to an output 4 corners. More...
 
 ossim2dTo2dMatrixTransform (const ossim2dTo2dMatrixTransform &src)
 Copy constructor. More...
 
virtual ossimObjectdup () const
 Duplication method that duplicates this object. More...
 
const ossim2dTo2dMatrixTransformoperator= (const ossim2dTo2dMatrixTransform &src)
 Overloaded operator equal that allows for assignment. More...
 
void setFromPoints (const ossimDpt &in1, const ossimDpt &in2, const ossimDpt &in3, const ossimDpt &in4, const ossimDpt &out1, const ossimDpt &out2, const ossimDpt &out3, const ossimDpt &out4)
 Mapping 4 corners to an output 4 corners. More...
 
void setFromPoints (const ossimDpt *input, const ossimDpt *output, ossim_uint32 arraySize)
 Initialize the transform that best fits the input and output arrays. More...
 
virtual void forward (const ossimDpt &input, ossimDpt &output) const
 forward transform will transform an input point to the output. More...
 
virtual void forward (ossimDpt &modify_this) const
 forward transform will transform an input point to the output and modify the passed in point to the new value More...
 
virtual void inverse (const ossimDpt &input, ossimDpt &output) const
 Inverts the point back to the original input value. More...
 
virtual void inverse (ossimDpt &modify_this) const
 Inverts the point back to the original input value and modifies the passed in point to the new value. More...
 
virtual bool saveState (ossimKeywordlist &kwl, const char *prefix=0) const
 Saves the state of this object. More...
 
virtual bool loadState (const ossimKeywordlist &kwl, const char *prefix=0)
 loads the state of this object from a keywordlist. More...
 
virtual std::ostream & print (std::ostream &out) const
 prints the contents of this object. More...
 
- Public Member Functions inherited from ossim2dTo2dTransform
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 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

ossim_float64 m_coefficientsXTerm [4]
 
ossim_float64 m_coefficientsYTerm [4]
 
ossim_float64 m_inverseCoefficientsXTerm [4]
 
ossim_float64 m_inverseCoefficientsYTerm [4]
 
 TYPE_DATA
 
- 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

ossim2dTo2dMatrixTransform allows one to specify a set of input points and output points and will fit a bilinear transform to those points.

Function of the form is solved for each
output dimension.

z(x,y) = a + b*x + c*y + d*x*y

We use the ossimLeastSquareBilin solver to solve for the coefficients.

Definition at line 29 of file ossim2dTo2dMatrixTransform.h.

Constructor & Destructor Documentation

◆ ossim2dTo2dMatrixTransform() [1/4]

ossim2dTo2dMatrixTransform::ossim2dTo2dMatrixTransform ( )

Initialize to the identity.

Definition at line 19 of file ossim2dTo2dMatrixTransform.cpp.

References m_coefficientsXTerm, m_coefficientsYTerm, m_inverseCoefficientsXTerm, and m_inverseCoefficientsYTerm.

20 {
21  std::fill(m_coefficientsXTerm, m_coefficientsXTerm+4, 0.0);
22  std::fill(m_coefficientsYTerm, m_coefficientsYTerm+4, 0.0);
25 
26  // setup identity
27  //
28  m_coefficientsXTerm[1] = 1.0;
29  m_coefficientsYTerm[2] = 1.0;
32 }

◆ ossim2dTo2dMatrixTransform() [2/4]

ossim2dTo2dMatrixTransform::ossim2dTo2dMatrixTransform ( const ossimDpt input,
const ossimDpt output,
ossim_uint32  arraySize 
)
inline

Initialize the transform that best fits the input and output arrays.

If the input and output are well dispersed and are 4 points it should fit exactly. Both arrays should be of equal number of points

Parameters
inputthe list of input points
outputthe list of output points to transform the input to
arraySizethe number of points for the arrays.

Definition at line 47 of file ossim2dTo2dMatrixTransform.h.

50  {
51  setFromPoints(input, output, arraySize);
52  }
void setFromPoints(const ossimDpt &in1, const ossimDpt &in2, const ossimDpt &in3, const ossimDpt &in4, const ossimDpt &out1, const ossimDpt &out2, const ossimDpt &out3, const ossimDpt &out4)
Mapping 4 corners to an output 4 corners.

◆ ossim2dTo2dMatrixTransform() [3/4]

ossim2dTo2dMatrixTransform::ossim2dTo2dMatrixTransform ( const ossimDpt in1,
const ossimDpt in2,
const ossimDpt in3,
const ossimDpt in4,
const ossimDpt out1,
const ossimDpt out2,
const ossimDpt out3,
const ossimDpt out4 
)
inline

Mapping 4 corners to an output 4 corners.

Definition at line 58 of file ossim2dTo2dMatrixTransform.h.

60  {
61  setFromPoints(in1, in2, in3, in4, out1, out2, out3, out4);
62  }
void setFromPoints(const ossimDpt &in1, const ossimDpt &in2, const ossimDpt &in3, const ossimDpt &in4, const ossimDpt &out1, const ossimDpt &out2, const ossimDpt &out3, const ossimDpt &out4)
Mapping 4 corners to an output 4 corners.

◆ ossim2dTo2dMatrixTransform() [4/4]

ossim2dTo2dMatrixTransform::ossim2dTo2dMatrixTransform ( const ossim2dTo2dMatrixTransform src)

Member Function Documentation

◆ dup()

virtual ossimObject* ossim2dTo2dMatrixTransform::dup ( ) const
inlinevirtual

Duplication method that duplicates this object.

Reimplemented from ossimObject.

Definition at line 72 of file ossim2dTo2dMatrixTransform.h.

72 {return new ossim2dTo2dMatrixTransform(*this);}
ossim2dTo2dMatrixTransform()
Initialize to the identity.

◆ forward() [1/2]

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

forward transform will transform an input point to the output.

Implements ossim2dTo2dTransform.

Definition at line 116 of file ossim2dTo2dMatrixTransform.h.

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

118  {
119  output.x = (m_coefficientsXTerm[0] +
120  m_coefficientsXTerm[1]*input.x +
121  m_coefficientsXTerm[2]*input.y +
122  m_coefficientsXTerm[3]*input.x*input.y);
123  output.y = (m_coefficientsYTerm[0] +
124  m_coefficientsYTerm[1]*input.x +
125  m_coefficientsYTerm[2]*input.y +
126  m_coefficientsYTerm[3]*input.x*input.y);
127  }
double y
Definition: ossimDpt.h:165
double x
Definition: ossimDpt.h:164

◆ forward() [2/2]

virtual void ossim2dTo2dMatrixTransform::forward ( ossimDpt modify_this) const
inlinevirtual

forward transform will transform an input point to the output and modify the passed in point to the new value

Reimplemented from ossim2dTo2dTransform.

Definition at line 133 of file ossim2dTo2dMatrixTransform.h.

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

134  {
135  double saveX = modify_this.x;
136  modify_this.x = (m_coefficientsXTerm[0] +
137  m_coefficientsXTerm[1]*modify_this.x +
138  m_coefficientsXTerm[2]*modify_this.y +
139  m_coefficientsXTerm[3]*modify_this.x*modify_this.y);
140  modify_this.y = (m_coefficientsYTerm[0] +
141  m_coefficientsYTerm[1]*saveX +
142  m_coefficientsYTerm[2]*modify_this.y +
143  m_coefficientsYTerm[3]*saveX*modify_this.y);
144  }
double y
Definition: ossimDpt.h:165
double x
Definition: ossimDpt.h:164

◆ inverse() [1/2]

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

Inverts the point back to the original input value.

Reimplemented from ossim2dTo2dTransform.

Definition at line 149 of file ossim2dTo2dMatrixTransform.h.

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

151  {
152  output.x = (m_inverseCoefficientsXTerm[0] +
153  m_inverseCoefficientsXTerm[1]*input.x +
154  m_inverseCoefficientsXTerm[2]*input.y +
155  m_inverseCoefficientsXTerm[3]*input.x*input.y);
156  output.y = (m_inverseCoefficientsYTerm[0] +
157  m_inverseCoefficientsYTerm[1]*input.x +
158  m_inverseCoefficientsYTerm[2]*input.y +
159  m_inverseCoefficientsYTerm[3]*input.x*input.y);
160  }
double y
Definition: ossimDpt.h:165
double x
Definition: ossimDpt.h:164

◆ inverse() [2/2]

virtual void ossim2dTo2dMatrixTransform::inverse ( ossimDpt modify_this) const
inlinevirtual

Inverts the point back to the original input value and modifies the passed in point to the new value.

Reimplemented from ossim2dTo2dTransform.

Definition at line 166 of file ossim2dTo2dMatrixTransform.h.

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

167  {
168  double saveX = modify_this.x;
169  modify_this.x = (m_inverseCoefficientsXTerm[0] +
170  m_inverseCoefficientsXTerm[1]*modify_this.x +
171  m_inverseCoefficientsXTerm[2]*modify_this.y +
172  m_inverseCoefficientsXTerm[3]*modify_this.x*modify_this.y);
173  modify_this.y = (m_inverseCoefficientsYTerm[0] +
174  m_inverseCoefficientsYTerm[1]*saveX +
175  m_inverseCoefficientsYTerm[2]*modify_this.y +
176  m_inverseCoefficientsYTerm[3]*saveX*modify_this.y);
177  }
double y
Definition: ossimDpt.h:165
double x
Definition: ossimDpt.h:164

◆ loadState()

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

loads the state of this object from a keywordlist.

Reimplemented from ossim2dTo2dTransform.

Definition at line 115 of file ossim2dTo2dMatrixTransform.cpp.

References ossimKeywordlist::find(), ossim2dTo2dTransform::loadState(), m_coefficientsXTerm, m_coefficientsYTerm, m_inverseCoefficientsXTerm, m_inverseCoefficientsYTerm, and ossimString::split().

117 {
118  bool result = true;
119  ossimString xterm = kwl.find(prefix, "xterm");
120  ossimString yterm = kwl.find(prefix, "yterm");
121  ossimString inverse_xterm = kwl.find(prefix, "inverse_xterm");
122  ossimString inverse_yterm = kwl.find(prefix, "inverse_yterm");
123 
124  std::vector<ossimString> values;
125  xterm.split(values, " ");
126  if(values.size() == 4)
127  {
128  m_coefficientsXTerm[0] = values[0].toDouble();
129  m_coefficientsXTerm[1] = values[1].toDouble();
130  m_coefficientsXTerm[2] = values[2].toDouble();
131  m_coefficientsXTerm[3] = values[3].toDouble();
132  }
133  else
134  {
135  result = false;
136  }
137  values.clear();
138  yterm.split(values, " ");
139  if(values.size() == 4)
140  {
141  m_coefficientsYTerm[0] = values[0].toDouble();
142  m_coefficientsYTerm[1] = values[1].toDouble();
143  m_coefficientsYTerm[2] = values[2].toDouble();
144  m_coefficientsYTerm[3] = values[3].toDouble();
145  }
146  else
147  {
148  result = false;
149  }
150  values.clear();
151  inverse_xterm.split(values, " ");
152  if(values.size() == 4)
153  {
154  m_inverseCoefficientsXTerm[0] = values[0].toDouble();
155  m_inverseCoefficientsXTerm[1] = values[1].toDouble();
156  m_inverseCoefficientsXTerm[2] = values[2].toDouble();
157  m_inverseCoefficientsXTerm[3] = values[3].toDouble();
158  }
159  else
160  {
161  result = false;
162  }
163  values.clear();
164  inverse_yterm.split(values, " ");
165  if(values.size() == 4)
166  {
167  m_inverseCoefficientsYTerm[0] = values[0].toDouble();
168  m_inverseCoefficientsYTerm[1] = values[1].toDouble();
169  m_inverseCoefficientsYTerm[2] = values[2].toDouble();
170  m_inverseCoefficientsYTerm[3] = values[3].toDouble();
171  }
172  else
173  {
174  result = false;
175  }
176 
177  if(result)
178  {
179  result = ossim2dTo2dTransform::loadState(kwl, prefix);
180  }
181 
182  return result;
183 }
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
const char * find(const char *key) const
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.

◆ operator=()

const ossim2dTo2dMatrixTransform& ossim2dTo2dMatrixTransform::operator= ( const ossim2dTo2dMatrixTransform src)
inline

Overloaded operator equal that allows for assignment.

Parameters
srcthe src data to copy into this object. It will call the base classes equal operator.

Definition at line 80 of file ossim2dTo2dMatrixTransform.h.

References m_coefficientsXTerm, m_coefficientsYTerm, m_inverseCoefficientsXTerm, m_inverseCoefficientsYTerm, and ossim2dTo2dTransform::operator=().

81  {
82  if(this == &src) return *this;
83 
84  ossim2dTo2dTransform::operator =(*this); // call base classes equal operator
89 
90  return *this;
91  }
virtual const ossim2dTo2dTransform & operator=(const ossim2dTo2dTransform &rhs)

◆ print()

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

prints the contents of this object.

Will also cal the base classes print method.

Reimplemented from ossim2dTo2dTransform.

Definition at line 195 of file ossim2dTo2dMatrixTransform.h.

References ossim2dTo2dTransform::print().

196  {
198  out << "xTerm: " << m_coefficientsXTerm[0] << ", " << m_coefficientsXTerm[1] << ", "
199  << m_coefficientsXTerm[2] << ", " << m_coefficientsXTerm[3] << "\n";
200  out << "yTerm: " << m_coefficientsYTerm[0] << ", " << m_coefficientsYTerm[1] << ", "
201  << m_coefficientsYTerm[2] << ", " << m_coefficientsYTerm[3] << "\n";
202 
203  out << "xInverseTerm: " << m_inverseCoefficientsXTerm[0] << ", " << m_inverseCoefficientsXTerm[1] << ", "
204  << m_inverseCoefficientsXTerm[2] << ", " << m_inverseCoefficientsXTerm[3] << "\n";
205  out << "yInverseTerm: " << m_inverseCoefficientsYTerm[0] << ", " << m_inverseCoefficientsYTerm[1] << ", "
206  << m_inverseCoefficientsYTerm[2] << ", " << m_inverseCoefficientsYTerm[3] << "\n";
207 
208  return out;
209  }
virtual std::ostream & print(std::ostream &out) const
Generic print method.

◆ saveState()

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

Saves the state of this object.

Reimplemented from ossim2dTo2dTransform.

Definition at line 88 of file ossim2dTo2dMatrixTransform.cpp.

References ossimKeywordlist::add(), m_coefficientsXTerm, m_coefficientsYTerm, m_inverseCoefficientsXTerm, m_inverseCoefficientsYTerm, ossim2dTo2dTransform::saveState(), and ossimString::toString().

90 {
107 
108  kwl.add(prefix, "xterm", xterm, true);
109  kwl.add(prefix, "yterm", yterm, true);
110  kwl.add(prefix, "inverse_xterm", inverse_xterm, true);
111  kwl.add(prefix, "inverse_yterm", inverse_yterm, true);
112  return ossim2dTo2dTransform::saveState(kwl, prefix);
113 }
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)

◆ setFromPoints() [1/2]

void ossim2dTo2dMatrixTransform::setFromPoints ( const ossimDpt in1,
const ossimDpt in2,
const ossimDpt in3,
const ossimDpt in4,
const ossimDpt out1,
const ossimDpt out2,
const ossimDpt out3,
const ossimDpt out4 
)

Mapping 4 corners to an output 4 corners.

Will use the ossimLeastSquareBilin class to solve the bilinear coefficients that maps the given input points to the output points.

Definition at line 43 of file ossim2dTo2dMatrixTransform.cpp.

45 {
46  ossimDpt input[4];
47  ossimDpt output[4];
48 
49  input[0] = in1;
50  input[1] = in2;
51  input[2] = in3;
52  input[3] = in4;
53 
54  output[0] = out1;
55  output[1] = out2;
56  output[2] = out3;
57  output[3] = out4;
58 
59  setFromPoints(&input[0], &output[0], 4);
60 }
void setFromPoints(const ossimDpt &in1, const ossimDpt &in2, const ossimDpt &in3, const ossimDpt &in4, const ossimDpt &out1, const ossimDpt &out2, const ossimDpt &out3, const ossimDpt &out4)
Mapping 4 corners to an output 4 corners.

◆ setFromPoints() [2/2]

void ossim2dTo2dMatrixTransform::setFromPoints ( const ossimDpt input,
const ossimDpt output,
ossim_uint32  arraySize 
)

Initialize the transform that best fits the input and output arrays.

If the input and output are well dispersed and are 4 points it should fit exactly. Both arrays should be of equal number of points

Parameters
inputthe list of input points
outputthe list of output points to transform the input to
arraySizethe number of points for the arrays.

Definition at line 62 of file ossim2dTo2dMatrixTransform.cpp.

References ossimLeastSquaresBilin::addSample(), ossimLeastSquaresBilin::getLSParms(), m_coefficientsXTerm, m_coefficientsYTerm, m_inverseCoefficientsXTerm, m_inverseCoefficientsYTerm, ossimLeastSquaresBilin::solveLS(), x, and y.

65 {
67  ossimLeastSquaresBilin inversex;
69  ossimLeastSquaresBilin inversey;
70  ossim_uint32 idx = 0;
71  for(idx=0; idx < arraySize; ++idx)
72  {
73  inx.addSample(input[idx].x, input[idx].y, output[idx].x);
74  inversex.addSample(output[idx].x, output[idx].y, input[idx].x);
75  iny.addSample(input[idx].x, input[idx].y, output[idx].y);
76  inversey.addSample(output[idx].x, output[idx].y, input[idx].y);
77  }
78  inx.solveLS();
79  inversex.solveLS();
80  iny.solveLS();
81  inversey.solveLS();
86 }
ossim_uint32 x
virtual void addSample(double x, double yy, double zmea)
add a single data sample.
ossim_uint32 y
unsigned int ossim_uint32
Provide 2D Least Squares Bilinear model fitting The math model is that of a bilinear surface of the ...
virtual bool getLSParms(double &pa, double &pb_x, double &pc_y, double &pd_xy) const
return LS solution parameters.
bool solveLS()
compute least squares parameter solution - true if succesfull.

Member Data Documentation

◆ m_coefficientsXTerm

ossim_float64 ossim2dTo2dMatrixTransform::m_coefficientsXTerm[4]
protected

◆ m_coefficientsYTerm

ossim_float64 ossim2dTo2dMatrixTransform::m_coefficientsYTerm[4]
protected

◆ m_inverseCoefficientsXTerm

ossim_float64 ossim2dTo2dMatrixTransform::m_inverseCoefficientsXTerm[4]
protected

◆ m_inverseCoefficientsYTerm

ossim_float64 ossim2dTo2dMatrixTransform::m_inverseCoefficientsYTerm[4]
protected

◆ TYPE_DATA

ossim2dTo2dMatrixTransform::TYPE_DATA
protected

Definition at line 217 of file ossim2dTo2dMatrixTransform.h.


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