ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
cloudViewer::ICPRegistrationTools Class Reference

ICP point cloud registration algorithm (Besl et al.). More...

#include <RegistrationTools.h>

Inheritance diagram for cloudViewer::ICPRegistrationTools:
Collaboration diagram for cloudViewer::ICPRegistrationTools:

Classes

struct  Parameters
 ICP Parameters. More...
 

Public Types

enum  CONVERGENCE_TYPE { MAX_ERROR_CONVERGENCE = 0 , MAX_ITER_CONVERGENCE = 1 }
 Convergence control method. More...
 
enum  RESULT_TYPE {
  ICP_NOTHING_TO_DO = 0 , ICP_APPLY_TRANSFO = 1 , ICP_ERROR = 100 , ICP_ERROR_REGISTRATION_STEP = 101 ,
  ICP_ERROR_DIST_COMPUTATION = 102 , ICP_ERROR_NOT_ENOUGH_MEMORY = 103 , ICP_ERROR_CANCELED_BY_USER = 104 , ICP_ERROR_INVALID_INPUT = 105
}
 Errors. More...
 
enum  NORMALS_MATCHING { NO_NORMAL = 0 , OPPOSITE_NORMALS = 1 , SAME_SIDE_NORMALS = 2 , DOUBLE_SIDED_NORMALS = 3 }
 Normals matching method. More...
 
- Public Types inherited from cloudViewer::RegistrationTools
enum  TRANSFORMATION_FILTERS {
  SKIP_NONE = 0 , SKIP_RXY = 1 , SKIP_RYZ = 2 , SKIP_RXZ = 4 ,
  SKIP_ROTATION = 7 , SKIP_TX = 8 , SKIP_TY = 16 , SKIP_TZ = 32 ,
  SKIP_TRANSLATION = 56
}
 Transformation constraints. More...
 
using ScaledTransformation = PointProjectionTools::Transformation
 Shortcut to PointProjectionTools::ScaledTransformation. More...
 

Static Public Member Functions

static RESULT_TYPE Register (GenericIndexedCloudPersist *modelCloud, GenericIndexedMesh *modelMesh, GenericIndexedCloudPersist *dataCloud, const Parameters &params, ScaledTransformation &totalTrans, double &finalRMS, unsigned &finalPointCount, GenericProgressCallback *progressCb=nullptr)
 Registers two clouds or a cloud and a mesh. More...
 
- Static Public Member Functions inherited from cloudViewer::RegistrationTools
static void FilterTransformation (const ScaledTransformation &inTrans, int transformationFilters, const CCVector3 &toBeAlignedGravityCenter, const CCVector3 &referenceGravityCenter, ScaledTransformation &outTrans)
 

Additional Inherited Members

- Static Protected Member Functions inherited from cloudViewer::RegistrationTools
static bool RegistrationProcedure (GenericCloud *P, GenericCloud *X, ScaledTransformation &trans, bool adjustScale=false, ScalarField *coupleWeights=nullptr, PointCoordinateType aPrioriScale=1.0f, CCVector3 *Gp=nullptr, CCVector3 *Gx=nullptr)
 ICP Registration procedure with optional scale estimation. More...
 

Detailed Description

ICP point cloud registration algorithm (Besl et al.).

Definition at line 122 of file RegistrationTools.h.

Member Enumeration Documentation

◆ CONVERGENCE_TYPE

Convergence control method.

Enumerator
MAX_ERROR_CONVERGENCE 
MAX_ITER_CONVERGENCE 

Definition at line 125 of file RegistrationTools.h.

◆ NORMALS_MATCHING

Normals matching method.

Enumerator
NO_NORMAL 
OPPOSITE_NORMALS 
SAME_SIDE_NORMALS 
DOUBLE_SIDED_NORMALS 

Definition at line 144 of file RegistrationTools.h.

◆ RESULT_TYPE

Errors.

Enumerator
ICP_NOTHING_TO_DO 
ICP_APPLY_TRANSFO 
ICP_ERROR 
ICP_ERROR_REGISTRATION_STEP 
ICP_ERROR_DIST_COMPUTATION 
ICP_ERROR_NOT_ENOUGH_MEMORY 
ICP_ERROR_CANCELED_BY_USER 
ICP_ERROR_INVALID_INPUT 

Definition at line 131 of file RegistrationTools.h.

Member Function Documentation

◆ Register()

ICPRegistrationTools::RESULT_TYPE ICPRegistrationTools::Register ( GenericIndexedCloudPersist modelCloud,
GenericIndexedMesh modelMesh,
GenericIndexedCloudPersist dataCloud,
const Parameters params,
ScaledTransformation totalTrans,
double &  finalRMS,
unsigned &  finalPointCount,
GenericProgressCallback progressCb = nullptr 
)
static

Registers two clouds or a cloud and a mesh.

This method implements the ICP algorithm (Besl et al.).

Warning
Be sure to activate an INPUT/OUTPUT scalar field on the point cloud.
The mesh is always the reference/model entity.
Parameters
modelCloudthe reference cloud or the vertices of the reference mesh --> won't move
modelMeshthe reference mesh (optional) --> won't move
dataCloudthe cloud to register --> will move
paramsICP parameters
[out]totalTransthe resulting transformation (once the algorithm has converged)
[out]finalRMSfinal error (RMS)
[out]finalPointCountnumber of points used to compute the final RMS
progressCbthe client application can get some notification of the process progress through this callback mechanism (see GenericProgressCallback)
Returns
algorithm result

Definition at line 145 of file RegistrationTools.cpp.

References abs(), Garbage< C >::add(), cloudViewer::ScalarField::addElement(), cloudViewer::PointCloudTpl< T >::addPoint(), cloudViewer::ReferenceCloud::addPointIndex(), cloudViewer::PointProjectionTools::Transformation::apply(), cloudViewer::PointProjectionTools::applyTransformation(), cloudViewer::DgmOctree::build(), cloudViewer::ReferenceCloud::clear(), ModelCloud::cloud, DataCloud::cloud, cloudViewer::DistanceComputationTools::computeCloud2CloudDistances(), cloudViewer::DistanceComputationTools::computeCloud2MeshDistances(), cloudViewer::ScalarField::computeMinAndMax(), cloudViewer::NormalDistribution::computeParameters(), count, cloudViewer::DistanceComputationTools::Cloud2CloudDistancesComputationParams::CPSet, cloudViewer::DistanceComputationTools::Cloud2MeshDistancesComputationParams::CPSet, DataCloud::CPSetPlain, DataCloud::CPSetRef, cloudViewer::ScalarField::currentSize(), Garbage< C >::destroy(), cloudViewer::ReferenceCloud::enableScalarField(), cloudViewer::RegistrationTools::FilterTransformation(), cloudViewer::DgmOctree::findBestLevelForComparisonWithOctree(), cloudViewer::ReferenceCloud::getAssociatedCloud(), cloudViewer::NormalDistribution::getParameters(), cloudViewer::PointCloudTpl< T >::getPoint(), cloudViewer::ReferenceCloud::getPointGlobalIndex(), cloudViewer::ReferenceCloud::getPointScalarValue(), cloudViewer::ScalarField::getValue(), ICP_APPLY_TRANSFO, ICP_ERROR, ICP_ERROR_CANCELED_BY_USER, ICP_ERROR_DIST_COMPUTATION, ICP_ERROR_INVALID_INPUT, ICP_ERROR_NOT_ENOUGH_MEMORY, ICP_ERROR_REGISTRATION_STEP, ICP_NOTHING_TO_DO, cloudViewer::PointCloudTpl< T >::invalidateBoundingBox(), cloudViewer::ReferenceCloud::invalidateBoundingBox(), cloudViewer::GenericProgressCallback::isCancelRequested(), cloudViewer::GenericDistribution::isValid(), cloudViewer::SquareMatrixTpl< Scalar >::isValid(), cloudViewer::LessThanEpsilon(), MAX_ERROR_CONVERGENCE, MAX_ITER_CONVERGENCE, cloudViewer::DistanceComputationTools::Cloud2CloudDistancesComputationParams::maxThreadCount, cloudViewer::DistanceComputationTools::Cloud2MeshDistancesComputationParams::maxThreadCount, cloudViewer::DistanceComputationTools::Cloud2MeshDistancesComputationParams::octreeLevel, ParallelSort, params, PC_ONE, cloudViewer::PointProjectionTools::Transformation::R, cloudViewer::RegistrationTools::RegistrationProcedure(), cloudViewer::ReferenceCloud::reserve(), cloudViewer::PointCloudTpl< T >::reserve(), cloudViewer::ScalarField::reserveSafe(), cloudViewer::ReferenceCloud::resize(), cloudViewer::PointCloud::resize(), cloudViewer::ScalarField::resizeSafe(), result, DataCloud::rotatedCloud, cloudViewer::PointProjectionTools::Transformation::s, cloudViewer::ReferenceCloud::setAssociatedCloud(), cloudViewer::GenericProgressCallback::setInfo(), cloudViewer::GenericProgressCallback::setMethodTitle(), cloudViewer::ScalarField::setValue(), cloudViewer::GenericCloud::size(), cloudViewer::PointCloudTpl< T >::size(), cloudViewer::ReferenceCloud::size(), cloudViewer::RegistrationTools::SKIP_NONE, cloudViewer::GenericProgressCallback::start(), cloudViewer::GenericProgressCallback::stop(), cloudViewer::CloudSamplingTools::subsampleCloudRandomly(), cloudViewer::PointProjectionTools::Transformation::T, cloudViewer::GenericProgressCallback::textCanBeEdited(), cloudViewer::GenericProgressCallback::update(), cloudViewer::ScalarField::ValidValue(), ModelCloud::weights, and DataCloud::weights.

Referenced by define_RegistrationTools(), and ccRegistrationTools::ICP().


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