Main MRPT website > C++ reference
MRPT logo
Classes | Typedefs | Functions

Geometry_Module

Classes

class  AlignedBox< _Scalar, _AmbientDim >
  More...
class  AngleAxis< _Scalar >
  More...
class  Homogeneous< MatrixType, _Direction >
  More...
class  Hyperplane< _Scalar, _AmbientDim >
  More...
class  ParametrizedLine< _Scalar, _AmbientDim >
  More...
class  Quaternion< _Scalar >
  More...
class  Rotation2D< _Scalar >
  More...
class  Scaling
  More...
class  Transform< _Scalar, _Dim, _Mode >
  More...
class  Translation< _Scalar, _Dim >
  More...

Typedefs

typedef Projective2f Transform2f
typedef Projective2d Transform2d
typedef Projective3f Transform3f
typedef Projective3d Transform3d
typedef AngleAxis< float > AngleAxisf
 single precision angle-axis type
typedef AngleAxis< double > AngleAxisd
 double precision angle-axis type
typedef Quaternion< float > Quaternionf
 single precision quaternion type
typedef Quaternion< double > Quaterniond
 double precision quaternion type
typedef Map< Quaternion< float >, 0 > QuaternionMapf
 Map an unaligned array of single precision scalar as a quaternion.
typedef Map< Quaternion
< double >, 0 > 
QuaternionMapd
 Map an unaligned array of double precision scalar as a quaternion.
typedef Map< Quaternion< float >
, Aligned > 
QuaternionMapAlignedf
 Map a 16-bits aligned array of double precision scalars as a quaternion.
typedef Map< Quaternion
< double >, Aligned > 
QuaternionMapAlignedd
 Map a 16-bits aligned array of double precision scalars as a quaternion.
typedef Rotation2D< float > Rotation2Df
 single precision 2D rotation type
typedef Rotation2D< double > Rotation2Dd
 double precision 2D rotation type
typedef DiagonalMatrix< float, 2 > AlignedScaling2f
typedef DiagonalMatrix< double, 2 > AlignedScaling2d
typedef DiagonalMatrix< float, 3 > AlignedScaling3f
typedef DiagonalMatrix< double, 3 > AlignedScaling3d
typedef Transform< float,
2, Isometry > 
Isometry2f
typedef Transform< float,
3, Isometry > 
Isometry3f
typedef Transform< double,
2, Isometry > 
Isometry2d
typedef Transform< double,
3, Isometry > 
Isometry3d
typedef Transform< float,
2, Affine > 
Affine2f
typedef Transform< float,
3, Affine > 
Affine3f
typedef Transform< double,
2, Affine > 
Affine2d
typedef Transform< double,
3, Affine > 
Affine3d
typedef Transform< float,
2, AffineCompact > 
AffineCompact2f
typedef Transform< float,
3, AffineCompact > 
AffineCompact3f
typedef Transform< double,
2, AffineCompact > 
AffineCompact2d
typedef Transform< double,
3, AffineCompact > 
AffineCompact3d
typedef Transform< float,
2, Projective > 
Projective2f
typedef Transform< float,
3, Projective > 
Projective3f
typedef Transform< double,
2, Projective > 
Projective2d
typedef Transform< double,
3, Projective > 
Projective3d
typedef Translation< float, 2 > Translation2f
typedef Translation< double, 2 > Translation2d
typedef Translation< float, 3 > Translation3f
typedef Translation< double, 3 > Translation3d

Functions

template<typename Derived , typename OtherDerived >
internal::umeyama_transform_matrix_type
< Derived, OtherDerived >
::type 
umeyama (const MatrixBase< Derived > &src, const MatrixBase< OtherDerived > &dst, bool with_scaling=true)
 
Matrix< Scalar, 3, 1 > MatrixBase::eulerAngles (Index a0, Index a1, Index a2) const
 

Typedef Documentation

typedef Transform<double,2,Affine> Affine2d

Definition at line 588 of file Geometry/Transform.h.

typedef Transform<float,2,Affine> Affine2f

Definition at line 584 of file Geometry/Transform.h.

typedef Transform<double,3,Affine> Affine3d

Definition at line 590 of file Geometry/Transform.h.

typedef Transform<float,3,Affine> Affine3f

Definition at line 586 of file Geometry/Transform.h.

typedef Transform<double,2,AffineCompact> AffineCompact2d

Definition at line 597 of file Geometry/Transform.h.

typedef Transform<float,2,AffineCompact> AffineCompact2f

Definition at line 593 of file Geometry/Transform.h.

typedef Transform<double,3,AffineCompact> AffineCompact3d

Definition at line 599 of file Geometry/Transform.h.

typedef Transform<float,3,AffineCompact> AffineCompact3f

Definition at line 595 of file Geometry/Transform.h.

typedef DiagonalMatrix<double,2> AlignedScaling2d
Deprecated:

Definition at line 152 of file Scaling.h.

typedef DiagonalMatrix<float, 2> AlignedScaling2f
Deprecated:

Definition at line 150 of file Scaling.h.

typedef DiagonalMatrix<double,3> AlignedScaling3d
Deprecated:

Definition at line 156 of file Scaling.h.

typedef DiagonalMatrix<float, 3> AlignedScaling3f
Deprecated:

Definition at line 154 of file Scaling.h.

typedef AngleAxis<double> AngleAxisd

double precision angle-axis type

Definition at line 162 of file AngleAxis.h.

typedef AngleAxis<float> AngleAxisf

single precision angle-axis type

Definition at line 159 of file AngleAxis.h.

typedef Transform<double,2,Isometry> Isometry2d

Definition at line 579 of file Geometry/Transform.h.

typedef Transform<float,2,Isometry> Isometry2f

Definition at line 575 of file Geometry/Transform.h.

typedef Transform<double,3,Isometry> Isometry3d

Definition at line 581 of file Geometry/Transform.h.

typedef Transform<float,3,Isometry> Isometry3f

Definition at line 577 of file Geometry/Transform.h.

typedef Transform<double,2,Projective> Projective2d

Definition at line 606 of file Geometry/Transform.h.

typedef Transform<float,2,Projective> Projective2f

Definition at line 602 of file Geometry/Transform.h.

typedef Transform<double,3,Projective> Projective3d

Definition at line 608 of file Geometry/Transform.h.

typedef Transform<float,3,Projective> Projective3f

Definition at line 604 of file Geometry/Transform.h.

typedef Quaternion<double> Quaterniond

double precision quaternion type

Definition at line 282 of file Quaternion.h.

typedef Quaternion<float> Quaternionf

single precision quaternion type

Definition at line 279 of file Quaternion.h.

typedef Map<Quaternion<double>, Aligned> QuaternionMapAlignedd

Map a 16-bits aligned array of double precision scalars as a quaternion.

Definition at line 385 of file Quaternion.h.

typedef Map<Quaternion<float>, Aligned> QuaternionMapAlignedf

Map a 16-bits aligned array of double precision scalars as a quaternion.

Definition at line 382 of file Quaternion.h.

typedef Map<Quaternion<double>, 0> QuaternionMapd

Map an unaligned array of double precision scalar as a quaternion.

Definition at line 379 of file Quaternion.h.

typedef Map<Quaternion<float>, 0> QuaternionMapf

Map an unaligned array of single precision scalar as a quaternion.

Definition at line 376 of file Quaternion.h.

typedef Rotation2D<double> Rotation2Dd

double precision 2D rotation type

Definition at line 139 of file Rotation2D.h.

typedef Rotation2D<float> Rotation2Df

single precision 2D rotation type

Definition at line 136 of file Rotation2D.h.

Definition at line 31 of file Eigen2Support/Transform.h.

Definition at line 29 of file Eigen2Support/Transform.h.

Definition at line 35 of file Eigen2Support/Transform.h.

Definition at line 33 of file Eigen2Support/Transform.h.

typedef Translation<double,2> Translation2d

Definition at line 184 of file Translation.h.

typedef Translation<float, 2> Translation2f

Definition at line 183 of file Translation.h.

typedef Translation<double,3> Translation3d

Definition at line 186 of file Translation.h.

typedef Translation<float, 3> Translation3f

Definition at line 185 of file Translation.h.


Function Documentation

template<typename Derived >
Matrix< typename MatrixBase< Derived >::Scalar, 3, 1 > MatrixBase< Derived >::eulerAngles ( Index  a0,
Index  a1,
Index  a2 
) const [inline, inherited]

Returns:
the Euler-angles of the rotation matrix *this using the convention defined by the triplet (a0,a1,a2)

Each of the three parameters a0,a1,a2 represents the respective rotation axis as an integer in {0,1,2}. For instance, in:

 Vector3f ea = mat.eulerAngles(2, 0, 2); 

"2" represents the z axis and "0" the x axis, etc. The returned angles are such that we have the following equality:

 mat == AngleAxisf(ea[0], Vector3f::UnitZ())
      * AngleAxisf(ea[1], Vector3f::UnitX())
      * AngleAxisf(ea[2], Vector3f::UnitZ()); 

This corresponds to the right-multiply conventions (with right hand side frames).

Definition at line 46 of file EulerAngles.h.

References EIGEN_STATIC_ASSERT_MATRIX_SPECIFIC_SIZE.

template<typename Derived , typename OtherDerived >
internal::umeyama_transform_matrix_type<Derived, OtherDerived>::type umeyama ( const MatrixBase< Derived > &  src,
const MatrixBase< OtherDerived > &  dst,
bool  with_scaling = true 
)

Returns the transformation between two point sets.

The algorithm is based on: "Least-squares estimation of transformation parameters between two point patterns", Shinji Umeyama, PAMI 1991, DOI: 10.1109/34.88573

It estimates parameters $ c, \mathbf{R}, $ and $ \mathbf{t} $ such that

\begin{align*} \frac{1}{n} \sum_{i=1}^n \vert\vert y_i - (c\mathbf{R}x_i + \mathbf{t}) \vert\vert_2^2 \end{align*}

is minimized.

The algorithm is based on the analysis of the covariance matrix $ \Sigma_{\mathbf{x}\mathbf{y}} \in \mathbb{R}^{d \times d} $ of the input point sets $ \mathbf{x} $ and $ \mathbf{y} $ where $d$ is corresponding to the dimension (which is typically small). The analysis is involving the SVD having a complexity of $O(d^3)$ though the actual computational effort lies in the covariance matrix computation which has an asymptotic lower bound of $O(dm)$ when the input point sets have dimension $d \times m$.

Currently the method is working only for floating point matrices.

Todo:
Should the return type of umeyama() become a Transform?
Parameters:
src Source points $ \mathbf{x} = \left( x_1, \hdots, x_n \right) $.
dst Destination points $ \mathbf{y} = \left( y_1, \hdots, y_n \right) $.
with_scaling Sets $ c=1 $ when false is passed.
Returns:
The homogeneous transformation

\begin{align*} T = \begin{bmatrix} c\mathbf{R} & \mathbf{t} \\ \mathbf{0} & 1 \end{bmatrix} \end{align*}

minimizing the resudiual above. This transformation is always returned as an Eigen::Matrix.

Definition at line 108 of file Umeyama.h.

References DenseBase< Derived >::colwise(), ComputeFullU, ComputeFullV, EIGEN_SIZE_MIN_PREFER_DYNAMIC, EIGEN_STATIC_ASSERT, internal::isMuchSmallerThan(), JacobiSVD< _MatrixType, QRPreconditioner >::matrixU(), JacobiSVD< _MatrixType, QRPreconditioner >::matrixV(), rank(), DenseBase< Derived >::rowwise(), and JacobiSVD< _MatrixType, QRPreconditioner >::singularValues().




Page generated by Doxygen 1.7.1 for MRPT 0.9.4 SVN: at Mon Jan 10 23:33:19 UTC 2011