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

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

#include <ossim2dBilinearTransform.h>

Inheritance diagram for ossim2dBilinearTransform:
ossim2dTo2dTransform ossimObject ossimReferenced

Public Member Functions

 ossim2dBilinearTransform ()
 Initialize to the identity. More...
 
 ossim2dBilinearTransform (const ossimDpt *input, const ossimDpt *output, ossim_uint32 arraySize)
 Initialize the transform that best fits the input and output arrays. More...
 
 ossim2dBilinearTransform (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...
 
 ossim2dBilinearTransform (const ossim2dBilinearTransform &src)
 Copy constructor. More...
 
virtual ossimObjectdup () const
 Duplication method that duplicates this object. More...
 
const ossim2dBilinearTransformoperator= (const ossim2dBilinearTransform &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

ossim2dBilinearTransform 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 15 of file ossim2dBilinearTransform.h.

Constructor & Destructor Documentation

◆ ossim2dBilinearTransform() [1/4]

ossim2dBilinearTransform::ossim2dBilinearTransform ( )

Initialize to the identity.

Definition at line 6 of file ossim2dBilinearTransform.cpp.

References m_coefficientsXTerm, m_coefficientsYTerm, m_inverseCoefficientsXTerm, and m_inverseCoefficientsYTerm.

7 {
8  std::fill(m_coefficientsXTerm, m_coefficientsXTerm+4, 0.0);
9  std::fill(m_coefficientsYTerm, m_coefficientsYTerm+4, 0.0);
12 
13  // setup identity
14  //
15  m_coefficientsXTerm[1] = 1.0;
16  m_coefficientsYTerm[2] = 1.0;
19 }
ossim_float64 m_inverseCoefficientsXTerm[4]
ossim_float64 m_inverseCoefficientsYTerm[4]

◆ ossim2dBilinearTransform() [2/4]

ossim2dBilinearTransform::ossim2dBilinearTransform ( 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 32 of file ossim2dBilinearTransform.h.

35  {
36  setFromPoints(input, output, arraySize);
37  }
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.

◆ ossim2dBilinearTransform() [3/4]

ossim2dBilinearTransform::ossim2dBilinearTransform ( 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 43 of file ossim2dBilinearTransform.h.

45  {
46  setFromPoints(in1, in2, in3, in4, out1, out2, out3, out4);
47  }
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.

◆ ossim2dBilinearTransform() [4/4]

ossim2dBilinearTransform::ossim2dBilinearTransform ( const ossim2dBilinearTransform src)

Member Function Documentation

◆ dup()

virtual ossimObject* ossim2dBilinearTransform::dup ( ) const
inlinevirtual

Duplication method that duplicates this object.

Reimplemented from ossimObject.

Definition at line 57 of file ossim2dBilinearTransform.h.

57 {return new ossim2dBilinearTransform(*this);}
ossim2dBilinearTransform()
Initialize to the identity.

◆ forward() [1/2]

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

forward transform will transform an input point to the output.

Implements ossim2dTo2dTransform.

Definition at line 101 of file ossim2dBilinearTransform.h.

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

103  {
104  output.x = (m_coefficientsXTerm[0] +
105  m_coefficientsXTerm[1]*input.x +
106  m_coefficientsXTerm[2]*input.y +
107  m_coefficientsXTerm[3]*input.x*input.y);
108  output.y = (m_coefficientsYTerm[0] +
109  m_coefficientsYTerm[1]*input.x +
110  m_coefficientsYTerm[2]*input.y +
111  m_coefficientsYTerm[3]*input.x*input.y);
112  }
double y
Definition: ossimDpt.h:165
double x
Definition: ossimDpt.h:164

◆ forward() [2/2]

virtual void ossim2dBilinearTransform::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 118 of file ossim2dBilinearTransform.h.

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

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

◆ inverse() [1/2]

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

Inverts the point back to the original input value.

Reimplemented from ossim2dTo2dTransform.

Definition at line 134 of file ossim2dBilinearTransform.h.

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

136  {
137  output.x = (m_inverseCoefficientsXTerm[0] +
138  m_inverseCoefficientsXTerm[1]*input.x +
139  m_inverseCoefficientsXTerm[2]*input.y +
140  m_inverseCoefficientsXTerm[3]*input.x*input.y);
141  output.y = (m_inverseCoefficientsYTerm[0] +
142  m_inverseCoefficientsYTerm[1]*input.x +
143  m_inverseCoefficientsYTerm[2]*input.y +
144  m_inverseCoefficientsYTerm[3]*input.x*input.y);
145  }
ossim_float64 m_inverseCoefficientsXTerm[4]
double y
Definition: ossimDpt.h:165
ossim_float64 m_inverseCoefficientsYTerm[4]
double x
Definition: ossimDpt.h:164

◆ inverse() [2/2]

virtual void ossim2dBilinearTransform::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 151 of file ossim2dBilinearTransform.h.

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

152  {
153  double saveX = modify_this.x;
154  modify_this.x = (m_inverseCoefficientsXTerm[0] +
155  m_inverseCoefficientsXTerm[1]*modify_this.x +
156  m_inverseCoefficientsXTerm[2]*modify_this.y +
157  m_inverseCoefficientsXTerm[3]*modify_this.x*modify_this.y);
158  modify_this.y = (m_inverseCoefficientsYTerm[0] +
159  m_inverseCoefficientsYTerm[1]*saveX +
160  m_inverseCoefficientsYTerm[2]*modify_this.y +
161  m_inverseCoefficientsYTerm[3]*saveX*modify_this.y);
162  }
ossim_float64 m_inverseCoefficientsXTerm[4]
double y
Definition: ossimDpt.h:165
ossim_float64 m_inverseCoefficientsYTerm[4]
double x
Definition: ossimDpt.h:164

◆ loadState()

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

loads the state of this object from a keywordlist.

Reimplemented from ossim2dTo2dTransform.

Definition at line 102 of file ossim2dBilinearTransform.cpp.

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

104 {
105  bool result = true;
106  ossimString xterm = kwl.find(prefix, "xterm");
107  ossimString yterm = kwl.find(prefix, "yterm");
108  ossimString inverse_xterm = kwl.find(prefix, "inverse_xterm");
109  ossimString inverse_yterm = kwl.find(prefix, "inverse_yterm");
110 
111  std::vector<ossimString> values;
112  xterm.split(values, " ");
113  if(values.size() == 4)
114  {
115  m_coefficientsXTerm[0] = values[0].toDouble();
116  m_coefficientsXTerm[1] = values[1].toDouble();
117  m_coefficientsXTerm[2] = values[2].toDouble();
118  m_coefficientsXTerm[3] = values[3].toDouble();
119  }
120  else
121  {
122  result = false;
123  }
124  values.clear();
125  yterm.split(values, " ");
126  if(values.size() == 4)
127  {
128  m_coefficientsYTerm[0] = values[0].toDouble();
129  m_coefficientsYTerm[1] = values[1].toDouble();
130  m_coefficientsYTerm[2] = values[2].toDouble();
131  m_coefficientsYTerm[3] = values[3].toDouble();
132  }
133  else
134  {
135  result = false;
136  }
137  values.clear();
138  inverse_xterm.split(values, " ");
139  if(values.size() == 4)
140  {
141  m_inverseCoefficientsXTerm[0] = values[0].toDouble();
142  m_inverseCoefficientsXTerm[1] = values[1].toDouble();
143  m_inverseCoefficientsXTerm[2] = values[2].toDouble();
144  m_inverseCoefficientsXTerm[3] = values[3].toDouble();
145  }
146  else
147  {
148  result = false;
149  }
150  values.clear();
151  inverse_yterm.split(values, " ");
152  if(values.size() == 4)
153  {
154  m_inverseCoefficientsYTerm[0] = values[0].toDouble();
155  m_inverseCoefficientsYTerm[1] = values[1].toDouble();
156  m_inverseCoefficientsYTerm[2] = values[2].toDouble();
157  m_inverseCoefficientsYTerm[3] = values[3].toDouble();
158  }
159  else
160  {
161  result = false;
162  }
163 
164  if(result)
165  {
166  result = ossim2dTo2dTransform::loadState(kwl, prefix);
167  }
168 
169  return result;
170 }
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
ossim_float64 m_inverseCoefficientsXTerm[4]
const char * find(const char *key) const
ossim_float64 m_inverseCoefficientsYTerm[4]
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 ossim2dBilinearTransform& ossim2dBilinearTransform::operator= ( const ossim2dBilinearTransform 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 65 of file ossim2dBilinearTransform.h.

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

66  {
67  if(this == &src) return *this;
68 
69  ossim2dTo2dTransform::operator =(*this); // call base classes equal operator
74 
75  return *this;
76  }
ossim_float64 m_inverseCoefficientsXTerm[4]
ossim_float64 m_inverseCoefficientsYTerm[4]
virtual const ossim2dTo2dTransform & operator=(const ossim2dTo2dTransform &rhs)

◆ print()

virtual std::ostream& ossim2dBilinearTransform::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 180 of file ossim2dBilinearTransform.h.

References ossim2dTo2dTransform::print().

181  {
183  out << "xTerm: " << m_coefficientsXTerm[0] << ", " << m_coefficientsXTerm[1] << ", "
184  << m_coefficientsXTerm[2] << ", " << m_coefficientsXTerm[3] << "\n";
185  out << "yTerm: " << m_coefficientsYTerm[0] << ", " << m_coefficientsYTerm[1] << ", "
186  << m_coefficientsYTerm[2] << ", " << m_coefficientsYTerm[3] << "\n";
187 
188  out << "xInverseTerm: " << m_inverseCoefficientsXTerm[0] << ", " << m_inverseCoefficientsXTerm[1] << ", "
189  << m_inverseCoefficientsXTerm[2] << ", " << m_inverseCoefficientsXTerm[3] << "\n";
190  out << "yInverseTerm: " << m_inverseCoefficientsYTerm[0] << ", " << m_inverseCoefficientsYTerm[1] << ", "
191  << m_inverseCoefficientsYTerm[2] << ", " << m_inverseCoefficientsYTerm[3] << "\n";
192 
193  return out;
194  }
ossim_float64 m_inverseCoefficientsXTerm[4]
ossim_float64 m_inverseCoefficientsYTerm[4]
virtual std::ostream & print(std::ostream &out) const
Generic print method.

◆ saveState()

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

Saves the state of this object.

Reimplemented from ossim2dTo2dTransform.

Definition at line 75 of file ossim2dBilinearTransform.cpp.

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

77 {
94 
95  kwl.add(prefix, "xterm", xterm, true);
96  kwl.add(prefix, "yterm", yterm, true);
97  kwl.add(prefix, "inverse_xterm", inverse_xterm, true);
98  kwl.add(prefix, "inverse_yterm", inverse_yterm, true);
99  return ossim2dTo2dTransform::saveState(kwl, prefix);
100 }
ossim_float64 m_inverseCoefficientsXTerm[4]
static ossimString toString(bool aValue)
Numeric to string methods.
ossim_float64 m_inverseCoefficientsYTerm[4]
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 ossim2dBilinearTransform::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 30 of file ossim2dBilinearTransform.cpp.

32 {
33  ossimDpt input[4];
34  ossimDpt output[4];
35 
36  input[0] = in1;
37  input[1] = in2;
38  input[2] = in3;
39  input[3] = in4;
40 
41  output[0] = out1;
42  output[1] = out2;
43  output[2] = out3;
44  output[3] = out4;
45 
46  setFromPoints(&input[0], &output[0], 4);
47 }
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 ossim2dBilinearTransform::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 49 of file ossim2dBilinearTransform.cpp.

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

52 {
54  ossimLeastSquaresBilin inversex;
56  ossimLeastSquaresBilin inversey;
57  ossim_uint32 idx = 0;
58  for(idx=0; idx < arraySize; ++idx)
59  {
60  inx.addSample(input[idx].x, input[idx].y, output[idx].x);
61  inversex.addSample(output[idx].x, output[idx].y, input[idx].x);
62  iny.addSample(input[idx].x, input[idx].y, output[idx].y);
63  inversey.addSample(output[idx].x, output[idx].y, input[idx].y);
64  }
65  inx.solveLS();
66  inversex.solveLS();
67  iny.solveLS();
68  inversey.solveLS();
73 }
ossim_uint32 x
virtual void addSample(double x, double yy, double zmea)
add a single data sample.
ossim_float64 m_inverseCoefficientsXTerm[4]
ossim_uint32 y
ossim_float64 m_inverseCoefficientsYTerm[4]
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 ossim2dBilinearTransform::m_coefficientsXTerm[4]
protected

◆ m_coefficientsYTerm

ossim_float64 ossim2dBilinearTransform::m_coefficientsYTerm[4]
protected

◆ m_inverseCoefficientsXTerm

ossim_float64 ossim2dBilinearTransform::m_inverseCoefficientsXTerm[4]
protected

◆ m_inverseCoefficientsYTerm

ossim_float64 ossim2dBilinearTransform::m_inverseCoefficientsYTerm[4]
protected

◆ TYPE_DATA

ossim2dBilinearTransform::TYPE_DATA
protected

Definition at line 202 of file ossim2dBilinearTransform.h.


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