This class provides functions determining the absolute transformation between two point sets.
More...
#include <AbsoluteTransformation.h>
|
static bool | calculateTransformation (const Vector3 *left, const Vector3 *right, const size_t correspondences, HomogenousMatrix4 &right_T_left, const ScaleErrorType scaleErrorType=ScaleErrorType::RightBiased, Scalar *scale=nullptr) |
| Calculates the absolute transformation between two corresponding 3D point sets.
|
|
static bool | calculateTransformation (const HomogenousMatrix4 *leftWorld_T_transformations, const HomogenousMatrix4 *rightWorld_T_transformations, const size_t correspondences, HomogenousMatrix4 &rightWorld_T_leftWorld, const ScaleErrorType scaleErrorType=ScaleErrorType::RightBiased, Scalar *scale=nullptr) |
| Calculates the absolute transformation between two sets of 6-DOF transformations not containing outliers.
|
|
static bool | calculateTransformationWithOutliers (const HomogenousMatrix4 *leftWorld_T_transformations, const HomogenousMatrix4 *rightWorld_T_transformations, const size_t correspondences, HomogenousMatrix4 &rightWorld_T_leftWorld, const Scalar inlierRate=Scalar(0.75), const ScaleErrorType scaleErrorType=ScaleErrorType::RightBiased, Scalar *scale=nullptr) |
| Calculates the absolute transformation between two sets of 6-DOF transformations which may contain outliers.
|
|
This class provides functions determining the absolute transformation between two point sets.
◆ ScaleErrorType
Defines whether the error term for the scale calculation is in the space of right coordinate system, the left coordinate system, or uses a symmetric formulation.
Enumerator |
---|
RightBiased | Error term for scaling computation is in the units of the right coordinate system (e = || Pright - s * R * Pleft ||^2).
|
LeftBiased | Error term for scaling computation is in the units of the left coordinate system (e = || (1 / s) * (R^{-1}) * Pright - Pleft ||^2).
|
Symmetric | Error term for scaling computation uses a symmetric formulation (e = || (1 / sqrt(s)) * Pright - sqrt(s) * R * Pleft) ||^2 ). (Recommended by Horn in the general case.)
|
◆ calculateTransformation() [1/2]
Calculates the absolute transformation between two sets of 6-DOF transformations not containing outliers.
The implementation follows "Comparing two sets of corresponding six degree of freedom data, Shah, 2011"
Beware: This function does not support outliers.
- Parameters
-
leftWorld_T_transformations | The individual transformations defined in the left world, must be valid |
rightWorld_T_transformations | The idividual transformations defines in the right world, one for each transformation in the left world, must be valid |
correspondences | The number of given transformation correspondences, with range [1, infinity) |
rightWorld_T_leftWorld | The resulting transformation between the left world and the right world |
scaleErrorType | The error type to use for the scale computation |
scale | If non-null, will be populated with the resulting scale. The caller may want to update the transformation as follows: rightWorld_T_leftWorld.applyScale(Vector3(*scale, *scale, *scale)) |
- Returns
- True, if succeeded
◆ calculateTransformation() [2/2]
Calculates the absolute transformation between two corresponding 3D point sets.
The implementation follows "Closed-form solution of absolute orientation using unit quaternions, Horn, 1986"
The resulting transformation contains translation and rotation, but no scaling. The scale term can be retrieved optionally – this allows the transformation to be inverted more reliably.
Beware: This function does not support outliers.
- Parameters
-
left | The object points defined in the 'left' coordinate system, must be valid |
right | The object points define in the 'right' coordinate system, one for each object point in the 'left' coordinate system, must be valid |
correspondences | Number of point correspondences, with range [3, infinity) |
right_T_left | Resulting transformation between left and right points, with no scaling. |
scaleErrorType | The error type to use for the scale computation |
scale | If non-null, will be populated with the resulting scale. The caller may want to update the transformation as follows: right_T_left.applyScale(Vector3(*scale, *scale, *scale)) |
- Returns
- True, if succeeded
◆ calculateTransformationWithOutliers()
Calculates the absolute transformation between two sets of 6-DOF transformations which may contain outliers.
The implementation follows "Comparing two sets of corresponding six degree of freedom data, Shah, 2011"
- Parameters
-
leftWorld_T_transformations | The individual transformations defined in the left world, must be valid |
rightWorld_T_transformations | The idividual transformations defines in the right world, one for each transformation in the left world, must be valid |
correspondences | the number of given transformation correspondences, with range [1, infinity) |
rightWorld_T_leftWorld | The resulting transformation between the left world and the right world |
inlierRate | The rate of inlier in the given input data with range (0, 1) |
scaleErrorType | The error type to use for the scale computation |
scale | If non-null, will be populated with the resulting scale. The caller may want to update the transformation as follows: rightWorld_T_leftWorld.applyScale(Vector3(*scale, *scale, *scale)) |
- Returns
- True, if succeeded
◆ removeOutliers()
Removes the outliers from the set of 6-DOF input transformations.
- Parameters
-
leftWorld_T_transformations | The individual transformations defined in the left world, must be valid |
rightWorld_T_transformations | The idividual transformations defines in the right world, one for each transformation in the left world, must be valid |
correspondences | the number of given transformation correspondences, with range [1, infinity) |
rightWorld_T_leftWorld | The transformation between the left world and the right world |
leftWorld_T_subsetTransformations | The resulting inlier transformations for 'leftWorld_T_transformations' |
rightWorld_T_subsetTransformations | The resulting inlier transformations for 'rightWorld_T_transformations' |
- Returns
- True, if the input data contained some outliers; False, if the input data did not contain any outliers
The documentation for this class was generated from the following file: