27 #include "../common/MatrixUtils.h"
43 static std::string name(
"RST" );
54 const double& pt1Y,
double& pt2X,
double& pt2Y )
const
56 assert( isValid( params ) );
67 const double& pt2Y,
double& pt1X,
double& pt1Y )
const
69 assert( isValid( params ) );
93 m_computeParameters_tiepointsSize = params.
m_tiePoints.size();
94 if( m_computeParameters_tiepointsSize < 2 )
return false;
96 m_computeParameters_A.resize( 2 * m_computeParameters_tiepointsSize, 4 );
97 m_computeParameters_L.resize( 2 * m_computeParameters_tiepointsSize, 1 );
99 for ( m_computeParameters_tpIdx = 0 ; m_computeParameters_tpIdx < m_computeParameters_tiepointsSize ; ++m_computeParameters_tpIdx )
101 m_computeParameters_index1 = m_computeParameters_tpIdx*2;
102 m_computeParameters_index2 = m_computeParameters_index1 + 1;
107 m_computeParameters_A( m_computeParameters_index1, 0 ) = x_y.
x;
108 m_computeParameters_A( m_computeParameters_index1, 1 ) = -1.0 * x_y.
y;
109 m_computeParameters_A( m_computeParameters_index1, 2 ) = 1.0;
110 m_computeParameters_A( m_computeParameters_index1, 3 ) = 0.0;
112 m_computeParameters_A( m_computeParameters_index2, 0 ) = x_y.
y;
113 m_computeParameters_A( m_computeParameters_index2, 1 ) = x_y.
x;
114 m_computeParameters_A( m_computeParameters_index2, 2 ) = 0.0;
115 m_computeParameters_A( m_computeParameters_index2, 3 ) = 1.0;
117 m_computeParameters_L( m_computeParameters_index1, 0 ) = u_v.
x;
118 m_computeParameters_L( m_computeParameters_index2, 0 ) = u_v.
y;
125 m_computeParameters_At = boost::numeric::ublas::trans( m_computeParameters_A );
128 m_computeParameters_N = boost::numeric::ublas::prod( m_computeParameters_At, m_computeParameters_A );
131 m_computeParameters_U = boost::numeric::ublas::prod( m_computeParameters_At, m_computeParameters_L );
139 m_computeParameters_X = boost::numeric::ublas::prod( m_computeParameters_N_inv, m_computeParameters_U );
151 m_computeParameters_XExpanded.resize( 3, 3 );
152 m_computeParameters_XExpanded( 0, 0 ) = m_computeParameters_X(0,0);
153 m_computeParameters_XExpanded( 0, 1 ) = -1.0 * m_computeParameters_X(1,0);
154 m_computeParameters_XExpanded( 0, 2 ) = m_computeParameters_X(2,0);
155 m_computeParameters_XExpanded( 1, 0 ) = m_computeParameters_X(1,0);
156 m_computeParameters_XExpanded( 1, 1 ) = m_computeParameters_X(0,0);
157 m_computeParameters_XExpanded( 1, 2 ) = m_computeParameters_X(3,0);
158 m_computeParameters_XExpanded( 2, 0 ) = 0;
159 m_computeParameters_XExpanded( 2, 1 ) = 0;
160 m_computeParameters_XExpanded( 2, 2 ) = 1;
2D Rotation/scale/translation (rigid body) Geometric transformation.
std::vector< TiePoint > m_tiePoints
Tie points.
void inverseMap(const GTParameters ¶ms, const double &pt2X, const double &pt2Y, double &pt1X, double &pt1Y) const
Inverse mapping (from pt2 space into pt1 space).
std::vector< double > m_directParameters
Transformation numeric direct parameters.
RSTGT()
Default constructor.
const std::string & getName() const
Returns the current transformation name.
An utility struct for representing 2D coordinates.
void directMap(const GTParameters ¶ms, const double &pt1X, const double &pt1Y, double &pt2X, double &pt2Y) const
Direct mapping (from pt1 space into pt2 space).
2D Rotation/scale/translation(rigid body) Geometric transformation.
bool GetInverseMatrix(const boost::numeric::ublas::matrix< T > &inputMatrix, boost::numeric::ublas::matrix< T > &outputMatrix)
Matrix inversion.
std::vector< double > m_inverseParameters
Transformation numeric inverse parameters.
unsigned int getMinRequiredTiePoints() const
Returns the minimum number of required tie-points for the current transformation. ...
GeometricTransformation * clone() const
Creat a clone copy of this instance.
2D Geometric transformation parameters.
bool computeParameters(GTParameters ¶ms) const
Calculate the transformation parameters following the new supplied tie-points.