Basic Image AlgorithmS Library  2.8.0
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
Public Types | Public Member Functions | Static Public Attributes | Friends | List of all members
BIAS::AbsoluteOrientation Class Reference

Computes similarity transformation between 3D point sets. More...

#include <Geometry/AbsoluteOrientation.hh>

Public Types

enum  RotationEstimationMethod { HORN_ALGORITHM, KABSCH_ALGORITHM }
 Methods for rotation estimation. More...
 

Public Member Functions

 AbsoluteOrientation ()
 
int Compute (const std::vector< Vector3< double > > &X, const std::vector< Vector3< double > > &Y, RMatrix &dR, Vector3< double > &dt, double &ds, const std::vector< double > &w=std::vector< double >(0))
 Computes rotation dR, translation dt and isometric scale ds between coordinate systems from corresponding 3D point sets X and Y. More...
 
int Compute (const std::vector< Vector3< double > > &X, const std::vector< Vector3< double > > &Y, RMatrix &dR, Vector3< double > &dt, const std::vector< double > &w=std::vector< double >(0))
 Computes rotation dR and translation dt between coordinate systems from corresponding 3D point sets X and Y. More...
 
int ComputeRotation (const std::vector< Vector3< double > > &X, const std::vector< Vector3< double > > &Y, RMatrix &dR, const std::vector< double > &w=std::vector< double >(0))
 Computes rotation dR between corresponding 3D ray sets X and Y using the currently set algorithm. More...
 
double GetResidualErrors (std::vector< double > &errors, const std::vector< Vector3< double > > &X, const std::vector< Vector3< double > > &Y, const RMatrix &dR, const Vector3< double > &dt, const double &ds=1.0, const std::vector< double > &w=std::vector< double >(0))
 Computes residual errors of 3D point sets X and Y with respect to given rotation dR, translation dt and isometric scale ds. More...
 
double GetResidualErrors (std::vector< double > &errors, const std::vector< Vector3< double > > &X, const std::vector< Vector3< double > > &Y, const std::vector< Matrix3x3< double > > &CovX, const std::vector< Matrix3x3< double > > &CovY, const RMatrix &dR, const Vector3< double > &dt, const double &ds=1.0)
 Computes residual errors of 3D point sets X and Y with covariances CovX, CovY with respect to given rotation dR, translation dt and isometric scale ds. More...
 
double GetResidualErrors (std::vector< double > &errors, const std::vector< Vector3< double > > &X, const std::vector< Vector3< double > > &Y, const RMatrix &dR, const std::vector< double > &w=std::vector< double >(0))
 Computes residual errors of 3D point sets X and Y with respect to given rotation dR. More...
 
double GetResidualErrors (std::vector< double > &errors, const std::vector< Vector3< double > > &X, const std::vector< Vector3< double > > &Y, const std::vector< Matrix3x3< double > > &CovX, const std::vector< Matrix3x3< double > > &CovY, const RMatrix &dR)
 Computes residual errors of 3D point sets X and Y with covariances CovX, CovY with respect to given rotation dR. More...
 
void SetRotationAlgorithm (RotationEstimationMethod algorithm)
 Set algorithm used for rotation estimation. More...
 
 ~AbsoluteOrientation ()
 

Static Public Attributes

static const unsigned int MIN_CORRESPONDENCES = 3
 

Friends

class AbsoluteOrientationRANSAC
 

Detailed Description

Computes similarity transformation between 3D point sets.

Estimates the relationship between two coordinate systems using pairs of measurements of the coordinates of a number of 3D points in both systems. A SVD-based solution to the least-squares problem for at least three points is used based on an approach proposed in:

[1] B. Horn: Closed-form Solution of Absolute Orientation Using Unit Quaternions, 1987.

Another SVD-based solution estimating a rotation matrix directly instead of using unit quaternions is given by Kabsch's algorithm:

[2] W. Kabsch: A Solution for the Best Rotation to Relate Two Sets of Vectors, 1976.

Note
The transformation between the coordinate systems is given as rotation dR, translation dt, and isometric scale ds, such that points X in the first coordinate system are related to points Y in the second coordinate system by Y = ds*dR*X + dt.
Todo:
Implement Horn's closed-form solution and compare with our SVD-based approach!
Author
esquivel
Date
12/2008
Examples:
ExampleAbsoluteOrientation.cpp.

Definition at line 64 of file AbsoluteOrientation.hh.

Member Enumeration Documentation

Methods for rotation estimation.

Enumerator
HORN_ALGORITHM 
KABSCH_ALGORITHM 
Examples:
ExampleAbsoluteOrientation.cpp.

Definition at line 72 of file AbsoluteOrientation.hh.

Constructor & Destructor Documentation

AbsoluteOrientation::AbsoluteOrientation ( )

Definition at line 15 of file AbsoluteOrientation.cpp.

AbsoluteOrientation::~AbsoluteOrientation ( )

Definition at line 20 of file AbsoluteOrientation.cpp.

Member Function Documentation

int BIAS::AbsoluteOrientation::Compute ( const std::vector< Vector3< double > > &  X,
const std::vector< Vector3< double > > &  Y,
RMatrix dR,
Vector3< double > &  dt,
double &  ds,
const std::vector< double > &  w = std::vector<double>(0) 
)
inline

Computes rotation dR, translation dt and isometric scale ds between coordinate systems from corresponding 3D point sets X and Y.

Returns
-1 if computation failed, else 0.
Examples:
ExampleAbsoluteOrientation.cpp.

Definition at line 84 of file AbsoluteOrientation.hh.

int BIAS::AbsoluteOrientation::Compute ( const std::vector< Vector3< double > > &  X,
const std::vector< Vector3< double > > &  Y,
RMatrix dR,
Vector3< double > &  dt,
const std::vector< double > &  w = std::vector<double>(0) 
)
inline

Computes rotation dR and translation dt between coordinate systems from corresponding 3D point sets X and Y.

Returns
-1 if computation failed, else 0.

Definition at line 95 of file AbsoluteOrientation.hh.

int AbsoluteOrientation::ComputeRotation ( const std::vector< Vector3< double > > &  X,
const std::vector< Vector3< double > > &  Y,
BIAS::RMatrix dR,
const std::vector< double > &  w = std::vector<double>(0) 
)

Computes rotation dR between corresponding 3D ray sets X and Y using the currently set algorithm.

Returns
-1 if computation failed, else 0.

Definition at line 117 of file AbsoluteOrientation.cpp.

References HORN_ALGORITHM, and KABSCH_ALGORITHM.

double AbsoluteOrientation::GetResidualErrors ( std::vector< double > &  errors,
const std::vector< Vector3< double > > &  X,
const std::vector< Vector3< double > > &  Y,
const RMatrix dR,
const Vector3< double > &  dt,
const double &  ds = 1.0,
const std::vector< double > &  w = std::vector<double>(0) 
)

Computes residual errors of 3D point sets X and Y with respect to given rotation dR, translation dt and isometric scale ds.

Note
Each error is given by (weighted) Euclidean distance dist(X',Y) with X' = ds*dR*X - dt for corresponding 3D points X and Y.
Returns
Sum of squared errors dist(X',Y) with X' = ds*dR*X - dt and residual error for each single correspondence.
Examples:
ExampleAbsoluteOrientation.cpp.

Definition at line 243 of file AbsoluteOrientation.cpp.

References BIAS::Vector3< T >::ScalarProduct().

Referenced by GetResidualErrors(), and BIAS::AbsoluteOrientationRANSAC::GetResidualErrors().

double AbsoluteOrientation::GetResidualErrors ( std::vector< double > &  errors,
const std::vector< Vector3< double > > &  X,
const std::vector< Vector3< double > > &  Y,
const std::vector< Matrix3x3< double > > &  CovX,
const std::vector< Matrix3x3< double > > &  CovY,
const RMatrix dR,
const Vector3< double > &  dt,
const double &  ds = 1.0 
)

Computes residual errors of 3D point sets X and Y with covariances CovX, CovY with respect to given rotation dR, translation dt and isometric scale ds.

Note
Computes Mahalanobis distances instead of Euclidean distances!
Returns
Sum of squared errors mahalanobis(X',Y) with X' = ds*dR*X - dt as well as residual error for each single correspondence.

Definition at line 276 of file AbsoluteOrientation.cpp.

References BIAS::Matrix3x3< T >::GetInverse(), BIAS::Matrix3x3< T >::Mult(), BIAS::Vector3< T >::ScalarProduct(), and BIAS::Matrix3x3< T >::Transpose().

double AbsoluteOrientation::GetResidualErrors ( std::vector< double > &  errors,
const std::vector< Vector3< double > > &  X,
const std::vector< Vector3< double > > &  Y,
const RMatrix dR,
const std::vector< double > &  w = std::vector<double>(0) 
)

Computes residual errors of 3D point sets X and Y with respect to given rotation dR.

Note
Each error is given by (weighted) Euclidean distance dist(X',Y) with X' = dR*X for corresponding 3D points X and Y.
Returns
Sum of squared errors dist(X',Y) with X' = dR*X and residual error for each single correspondence.

Definition at line 308 of file AbsoluteOrientation.cpp.

References GetResidualErrors().

double AbsoluteOrientation::GetResidualErrors ( std::vector< double > &  errors,
const std::vector< Vector3< double > > &  X,
const std::vector< Vector3< double > > &  Y,
const std::vector< Matrix3x3< double > > &  CovX,
const std::vector< Matrix3x3< double > > &  CovY,
const RMatrix dR 
)

Computes residual errors of 3D point sets X and Y with covariances CovX, CovY with respect to given rotation dR.

Note
Computes Mahalanobis distances instead of Euclidean distances!
Returns
Sum of squared errors mahalanobis(X',Y) with X' = dR*X as well as residual error for each single correspondence.

Definition at line 318 of file AbsoluteOrientation.cpp.

References GetResidualErrors().

void BIAS::AbsoluteOrientation::SetRotationAlgorithm ( RotationEstimationMethod  algorithm)
inline

Set algorithm used for rotation estimation.

Examples:
ExampleAbsoluteOrientation.cpp.

Definition at line 113 of file AbsoluteOrientation.hh.

Friends And Related Function Documentation

friend class AbsoluteOrientationRANSAC
friend

Definition at line 67 of file AbsoluteOrientation.hh.

Member Data Documentation

const unsigned int AbsoluteOrientation::MIN_CORRESPONDENCES = 3
static

Definition at line 74 of file AbsoluteOrientation.hh.


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