ImFusion C++ SDK 4.5.0
ImFusion::ICPCore< TransformationModel > Class Template Reference

#include <AnatomyPlugin/include/ImFusion/AnatomyPlugin/ASCRegistrationMethods/ICPCore.h>

Core Iterative Closest Point (ICP) algorithm for point set registration. More...

Inheritance diagram for ImFusion::ICPCore< TransformationModel >:

Detailed Description

template<typename TransformationModel>
class ImFusion::ICPCore< TransformationModel >

Core Iterative Closest Point (ICP) algorithm for point set registration.

Iteratively aligns two point sets by finding nearest neighbor correspondences and fitting transformations until convergence. The transformation model is injected via template parameter, allowing for single or per-object transformations.

Template Parameters
TransformationModelThe transformation fitting strategy (must provide Hypothesis type and init/fit/apply methods)

Public Types

using Hypothesis = typename TransformationModel::Hypothesis

Public Member Functions

 ICPCore (TransformationModel &transformationModel, const std::vector< PointsWithMetadata > &ptsFixed, std::vector< PointsWithMetadata > &ptsMoving)
 ICPCore (const ICPCore &)=delete
 disable copy, enable move
ICPCore & operator= (const ICPCore &)=delete
 ICPCore (ICPCore &&)=default
ICPCore & operator= (ICPCore &&)=default
void initCaches ()
 Initialize nearest neighbor search structures and correspondence caches.
Hypothesis singleIteration (const Hypothesis &currentHypothesis)
 Perform one ICP iteration: find correspondences and fit transformation.
void compute ()
 Run the complete ICP algorithm until convergence or max iterations.
Public Member Functions inherited from ImFusion::Configurable
virtual void configure (const Properties *p)
 Configure this object instance by de-serializing the given Properties.
virtual void configuration (Properties *p) const
 Serialize the current object configuration into the given Properties object.
virtual void configureDefaults ()
 Retrieve the properties of this object, replaces values with their defaults and sets it again.
void registerParameter (ParameterBase *param)
 Register the given Parameter or SubProperty, so that it will be configured during configure()/configuration().
void unregisterParameter (const ParameterBase *param)
 Remove the given Parameter or SubProperty from the list of registered parameters.
 Configurable (const Configurable &rhs)
 Configurable (Configurable &&rhs) noexcept
Configurable & operator= (const Configurable &)
Configurable & operator= (Configurable &&) noexcept

Public Attributes

Parameter< double > p_maxIterations = {"maxIterations", 100, this}
 Maximum number of ICP iterations before stopping.
Parameter< CorrespondenceDirection > p_correspondenceDirection
 Strategy for finding point correspondences.
Public Attributes inherited from ImFusion::Configurable
Signal signalParametersChanged
 Emitted whenever one of the registered Parameters' or SubPropertys' signalValueChanged signal was emitted.

Additional Inherited Members

Protected Attributes inherited from ImFusion::Configurable
std::vector< Paramm_params
 List of all registered Parameter and SubProperty instances.

Member Function Documentation

◆ singleIteration()

template<typename TransformationModel>
Hypothesis ImFusion::ICPCore< TransformationModel >::singleIteration ( const Hypothesis & currentHypothesis)

Perform one ICP iteration: find correspondences and fit transformation.

Parameters
currentHypothesisCurrent transformation estimate
Returns
Updated transformation hypothesis for the next iteration

◆ compute()

template<typename TransformationModel>
void ImFusion::ICPCore< TransformationModel >::compute ( )

Run the complete ICP algorithm until convergence or max iterations.

Automatically initializes caches, runs iterations, and applies the final transformation to the moving points in-place.

Member Data Documentation

◆ p_correspondenceDirection

template<typename TransformationModel>
Parameter<CorrespondenceDirection> ImFusion::ICPCore< TransformationModel >::p_correspondenceDirection
Initial value:
= {"correspondenceDirection",
CorrespondenceDirection::ProjectOntoFixed,
this}

Strategy for finding point correspondences.


The documentation for this class was generated from the following file:
  • AnatomyPlugin/include/ImFusion/AnatomyPlugin/ASCRegistrationMethods/ICPCore.h
Search Tab / S to search, Esc to close