27 #include "../common/MatrixUtils.h" 39 static std::string name(
"Affine" );
50 const double& pt1Y,
double& pt2X,
double& pt2Y )
const 63 const double& pt2Y,
double& pt1X,
double& pt1Y )
const 189 double& translationX,
double& translationY,
190 double& scalingFactorX,
double& scalingFactorY,
double& skew,
191 double& squeeze,
double& scaling,
double& rotation )
193 assert( transfParams.size() == 6 );
195 double APar = transfParams[ 0 ];
196 double BPar = transfParams[ 1 ];
197 double CPar = transfParams[ 3 ];
198 double DPar = transfParams[ 4 ];
200 double determinant = ( APar * DPar ) - ( BPar * CPar );
202 if( determinant == 0.0 )
206 else if( determinant < 0.0 )
208 APar = transfParams[ 1 ];
209 BPar = transfParams[ 0 ];
210 CPar = transfParams[ 4 ];
211 DPar = transfParams[ 3 ];
213 determinant = ( APar * DPar ) - ( BPar * CPar );
215 const double FVar = 1.0 / ( ( APar * APar ) +
218 skew = ( ( APar * BPar ) + ( CPar * DPar ) ) * FVar;
220 squeeze = 1.0 / sqrt( FVar * determinant );
222 scaling = sqrt( determinant );
224 scalingFactorX = scaling / squeeze;
226 scalingFactorY = scaling * squeeze;
228 rotation = atan( APar / CPar );
232 const double FVar = 1.0 / ( ( APar * APar ) +
235 skew = ( ( APar * BPar ) + ( CPar * DPar ) ) * FVar;
237 squeeze = 1.0 / sqrt( FVar * determinant );
239 scaling = sqrt( determinant );
241 scalingFactorX = scaling * squeeze;
243 scalingFactorY = scaling / squeeze;
245 rotation = atan( CPar / APar );
248 translationX = transfParams[ 2 ];
250 translationY = transfParams[ 5 ];
std::vector< TiePoint > m_tiePoints
Tie points.
void directMap(const GTParameters ¶ms, const double &pt1X, const double &pt1Y, double &pt2X, double &pt2Y) const
Direct mapping (from pt1 space into pt2 space).
boost::numeric::ublas::matrix< double > m_computeParameters_U
unsigned int m_computeParameters_tiepointsSize
boost::numeric::ublas::matrix< double > m_computeParameters_L
boost::numeric::ublas::matrix< double > m_computeParameters_A
boost::numeric::ublas::matrix< double > m_computeParameters_XExpandedInv
unsigned int m_computeParameters_index1
std::vector< double > m_directParameters
Transformation numeric direct parameters.
AffineGT()
Default constructor.
unsigned int m_computeParameters_tpIdx
An utility struct for representing 2D coordinates.
unsigned int m_computeParameters_index2
2D Affine Geometric transformation.
const std::string & getName() const
Returns the current transformation name.
bool computeParameters(GTParameters ¶ms) const
Calculate the transformation parameters following the new supplied tie-points.
static bool decompose(const std::vector< double > &transfParams, double &translationX, double &translationY, double &scalingFactorX, double &scalingFactorY, double &skew, double &squeeze, double &scaling, double &rotation)
Returns the basic set of transform parameters given by the decomposition of a given affine transforma...
boost::numeric::ublas::matrix< double > m_computeParameters_XExpanded
boost::numeric::ublas::matrix< double > m_computeParameters_At
boost::numeric::ublas::matrix< double > m_computeParameters_X
void inverseMap(const GTParameters ¶ms, const double &pt2X, const double &pt2Y, double &pt1X, double &pt1Y) const
Inverse mapping (from pt2 space into pt1 space).
boost::numeric::ublas::matrix< double > m_computeParameters_N_inv
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.
2D Geometric transformation parameters.
boost::numeric::ublas::matrix< double > m_computeParameters_N
unsigned int getMinRequiredTiePoints() const
Returns the minimum number of required tie-points for the current transformation. ...
2D Affine Geometric transformation.
GeometricTransformation * clone() const
Creat a clone copy of this instance.