#include <PointCorrespondenceDistance.h>
Public Member Functions | |
bool | DoEvaluateSourceError () const |
Whether to evaluate source to target error. | |
bool | DoEvaluateTargetError () const |
Whether to evaluate target to source error. | |
virtual void | Initialize () |
Initialize error measure once input and parameters have been set. | |
PointCorrespondenceDistance & | operator= (const PointCorrespondenceDistance &) |
Assignment operator. | |
virtual ParameterList | Parameter () const |
Get parameter key/value as string map. | |
PointCorrespondenceDistance (const char *="", double=1.0) | |
Constructor. | |
PointCorrespondenceDistance (const PointCorrespondenceDistance &) | |
Copy constructor. | |
virtual void | Reinitialize () |
Reinitialize error measure after change of input topology. | |
virtual void | Update (bool=true) |
Update moving input points and internal state of distance measure. | |
virtual bool | Upgrade () |
Update energy term after convergence. | |
virtual void | WriteDataSets (const char *, const char *, bool=true) const |
Write input of data fidelity term. | |
virtual void | WriteGradient (const char *, const char *) const |
Write gradient of data fidelity term w.r.t each transformed input. | |
virtual | ~PointCorrespondenceDistance () |
Destructor. | |
![]() | |
virtual | ~PointSetDistance () |
Destructor. | |
![]() | |
virtual | ~DataFidelity () |
Destructor. | |
![]() | |
virtual enum EnergyMeasure | EnergyMeasure () const =0 |
Energy measure implemented by this term. | |
void | Gradient (double *gradient, double step) |
virtual void | GradientStep (const double *gradient, double &min, double &max) const |
double | InitialValue () |
Returns initial value of energy term. | |
void | NormalizedGradient (double *gradient, double step) |
string | Prefix (const char *=NULL) const |
Prefix to be used for debug output files. | |
virtual void | Print (Indent=0) const |
Print debug information. | |
virtual double | RawValue (double) const |
double | RawValue () |
void | ResetInitialValue () |
Reset initial value of energy term. | |
void | ResetValue () |
Reset cached value of energy term. | |
double | Value () |
Evaluate energy term. | |
virtual | ~EnergyTerm () |
Destructor. | |
![]() | |
string | DefaultName () const |
virtual bool | Set (const char *, const char *) |
Set parameter value from string. | |
virtual | ~Configurable () |
Destructor. | |
![]() | |
void | AddObserver (Observer &) |
Add observer. | |
void | Broadcast (Event, const void *=NULL) |
Broadcast event to observers. | |
void | ClearObservers () |
Delete all observers. | |
void | DeleteObserver (Observer &) |
Delete observer. | |
void | NotifyObservers (Event, const void *=NULL) |
Notify all observers about given event if this object has changed. | |
int | NumberOfObservers () const |
Number of current observers. | |
virtual | ~Observable () |
Destructor. | |
![]() | |
virtual const char * | NameOfClass () const =0 |
Get name of class, which this object is an instance of. | |
bool | Parameter (const ParameterList &) |
Set parameters from name/value pairs. | |
virtual | ~Object () |
Destructor. | |
Protected Member Functions | |
virtual double | Evaluate () |
Evaluate unweighted energy term. | |
void | EvaluateGradient (double *gradient, double step, double weight) |
void | ForwardEvent (Observable *, Event, const void *) |
Forward point correspondence map event. | |
mirtkAttributeMacro (Array< int >, TargetSample) | |
Indices of sampled target points. | |
mirtkAttributeMacro (Array< int >, SourceSample) | |
Indices of sampled source points. | |
mirtkAttributeMacro (int, NumberOfUpdates) | |
Number of invocations of Update modulo _UpdatePeriod. | |
mirtkComponentMacro (PointCorrespondence, Correspondence) | |
Point correspondence map. | |
mirtkComponentMacro (RadialErrorFunction, ErrorFunction) | |
Polydata registration error weight function. | |
mirtkPublicAttributeMacro (double, TargetSampleDistance) | |
Approximate distance between sampled target points. | |
mirtkPublicAttributeMacro (double, SourceSampleDistance) | |
Approximate distance between sampled source points. | |
mirtkPublicAttributeMacro (int, NumberOfTargetSamples) | |
Maximum number of target samples used. | |
mirtkPublicAttributeMacro (int, NumberOfSourceSamples) | |
Maximum number of target samples used. | |
mirtkPublicAttributeMacro (int, UpdatePeriod) | |
Number of Update calls between reevaluation of correspondences. | |
mirtkPublicAttributeMacro (bool, EvaluateTargetError) | |
Whether to evaluate error of target points and corresponding source points. | |
mirtkPublicAttributeMacro (bool, EvaluateSourceError) | |
Whether to evaluate error of source points and corresponding target points. | |
virtual void | NonParametricGradient (const RegisteredPointSet *source, GradientType *gradient) |
virtual void | ParametricGradient (const RegisteredPointSet *source, const GradientType *np_gradient, double *gradient, double weight) |
PointCorrespondenceDistance (const char *, double, PointCorrespondence *, RadialErrorFunction *=NULL) | |
Construct distance with given default point correspondence type and error function. | |
void | SamplePoints () |
Sample point sets. | |
virtual bool | SetWithoutPrefix (const char *, const char *) |
Set parameter value from string. | |
virtual void | WriteDataSet (const char *, const RegisteredPointSet *, const Array< int > &, const PointCorrespondence *) const |
Write given input data set to specified file. | |
![]() | |
void | AllocateGradientWrtSource (int) |
Allocate memory for (non-parametric) gradient w.r.t points of source. | |
void | AllocateGradientWrtTarget (int) |
Allocate memory for (non-parametric) gradient w.r.t points of target. | |
void | CopyAttributes (const PointSetDistance &, int=-1, int=-1) |
Copy attributes from other point set distance measure. | |
void | Initialize (int, int) |
Initialize distance measure once input and parameters have been set. | |
mirtkAttributeMacro (bool, InitialUpdate) | |
Whether Update has not been called since initialization. | |
mirtkComponentMacro (GradientType, GradientWrtTarget) | |
Memory for (non-parametric) gradient w.r.t points of target. | |
mirtkComponentMacro (GradientType, GradientWrtSource) | |
Memory for (non-parametric) gradient w.r.t points of source. | |
mirtkPublicAggregateMacro (RegisteredPointSet, Target) | |
First point set. | |
mirtkPublicAggregateMacro (RegisteredPointSet, Source) | |
Second point set. | |
PointSetDistance & | operator= (const PointSetDistance &) |
Assignment operator. | |
PointSetDistance (const char *="", double=1.0) | |
Constructor. | |
PointSetDistance (const PointSetDistance &, int=-1, int=-1) | |
Copy constructor. | |
void | Reinitialize (int, int) |
virtual void | WriteGradient (const char *, const RegisteredPointSet *, const GradientType *, const Array< int > *=NULL) const |
Write gradient of data fidelity term w.r.t each transformed input. | |
![]() | |
DataFidelity (const char *="", double=1.0) | |
Constructor. | |
DataFidelity (const DataFidelity &) | |
Copy constructor. | |
DataFidelity & | operator= (const DataFidelity &) |
Assignment operator. | |
virtual bool | SetWithPrefix (const char *, const char *) |
Set parameter value from string. | |
![]() | |
EnergyTerm (const char *="", double=1.0) | |
Constructor. | |
EnergyTerm (const EnergyTerm &) | |
Copy constructor. | |
EnergyTerm & | operator= (const EnergyTerm &) |
Assignment operator. | |
![]() | |
Configurable (const char *="") | |
Constructor. | |
Configurable (const Configurable &) | |
Copy constructor. | |
string | DefaultPrefix () const |
Get default object name prefix (if any) | |
bool | HasName () const |
Whether this object has an explicit name. | |
bool | HasPrefix () const |
Whether this object has either an explicit name or default prefix. | |
template<class T > | |
bool | InsertWithPrefix (ParameterList &, string, T) const |
Insert parameter into name/value list with object name prefix. | |
bool | InsertWithPrefix (ParameterList &, const ParameterList &) const |
Insert parameters into name/value list with object name prefix. | |
Configurable & | operator= (const Configurable &) |
Assignment operator. | |
string | ParameterNameWithoutPrefix (const char *) const |
Get name of parameter without object name prefix. | |
string | ParameterNameWithPrefix (const string &) const |
Get name of parameter with default object name prefix. | |
string | ParameterNameWithPrefix (const char *) const |
Get name of parameter with default object name prefix. | |
![]() | |
Observable () | |
Default constructor. | |
Observable (const Observable &) | |
Copy constructor. | |
Observable & | operator= (const Observable &) |
Assignment operator. | |
![]() | |
template<typename... Args> | |
void | Throw (ErrorType err, const char *func, Args... args) const |
Protected Attributes | |
EventDelegate | _EventDelegate |
Forwards correspondence map event messages to observers of energy term. | |
Additional Inherited Members | |
![]() | |
typedef Vector3D< double > | GradientType |
Type of gradient w.r.t a single transformed data point. | |
![]() | |
typedef ObjectFactory< enum EnergyMeasure, EnergyTerm > | FactoryType |
Type of energy term factory. | |
![]() | |
static PointSetDistance * | New (PointSetDistanceMeasure, const char *="", double=1.0) |
Instantiate specified similarity measure. | |
![]() | |
static FactoryType & | Factory () |
Get global energy term factory instance. | |
static EnergyTerm * | New (EnergyMeasure, const char *="", double=1.0) |
Construct new energy term. | |
static EnergyTerm * | TryNew (EnergyMeasure, const char *="", double=1.0) |
Construct new energy term or return nullptr if term not available. | |
![]() | |
static const char * | NameOfType () |
Get name of this class type. | |
![]() | |
template<typename... Args> | |
static void | ThrowStatic (ErrorType err, const char *cls, const char *func, Args... args) |
Distance error of established/known point correspondences
This distance term evaluates the residual registration error of each transformed target point relative to its corresponding source point. It is a generic point set distance measure which can be used for many types of point sets, including in particular point clouds, curves, and surface meshes.
A corresponding point locator is utilized to find the corresponding point in the source data set. This can be, for example, the closest point in the source data set, the closest point on the source surface, or the matched source data set point which is closest in terms of some other feature than just Euclidean distance of the points. A special case of point correspondence is one which remains fixed and maps the i-th point in the target data set to the j-th point in the source data set. This is the case for manually labeled fiducial markers (cf. FiducialRegistrationError) or pre-computed correspondence maps using an external point/surface matching algorithm.
The Euclidean distance of corresponding points is further weighted by an error function which may non-linearly penalize established correspondences and reduce influence of outliers or incorrect matches in order to improve the robustness of the point set registration.
Definition at line 63 of file PointCorrespondenceDistance.h.
|
protectedvirtual |
Evaluate gradient of point distance measure
This function calls the virtual NonParametricGradient function to be implemented by subclasses for each transformed input data set to obtain the gradient of the point set distance measure. It then converts this gradient into a gradient w.r.t the transformation parameters using the ParametricGradient.
If both target and source data sets are transformed by different transformations, the resulting gradient vector contains first the derivative values w.r.t the parameters of the target transformation followed by those computed w.r.t the parameters of the source transformation. If both data sets are transformed by the same transformation, the sum of the derivative values is added to the resulting gradient vector. This is in particular the case for a velocity based transformation model which is applied to deform both data sets "mid-way". Otherwise, only one input data set is transformed (usually the target) and the derivative values of only the respective transformation parameters added to the gradient vector.
[in,out] | gradient | Gradient to which the computed gradient of the point set distance measure is added after multiplying by the given similarity weight . |
[in] | step | Step length for finite differences (unused). |
[in] | weight | Weight of point set distance measure. |
Reimplemented from mirtk::PointSetDistance.
|
protectedvirtual |
Compute non-parametric gradient w.r.t the given point set
[in] | source | Set of transformed fiducial points. |
[out] | gradient | Non-parametric fiducial registration error gradient. |
Implements mirtk::PointSetDistance.
|
protectedvirtual |
Convert non-parametric gradient of point set distance measure into gradient w.r.t transformation parameters
This function calls Transformation::ParametricGradient of the transformation to apply the chain rule in order to obtain the gradient of the distance measure w.r.t the transformation parameters. It adds the weighted gradient to the final registration energy gradient.
[in] | source | Transformed point set. |
[in] | np_gradient | Point-wise non-parametric gradient. |
[in,out] | gradient | Gradient to which the computed parametric gradient is added, after multiplication by the given weight . |
[in] | weight | Weight of point set distance measure. |
Reimplemented from mirtk::PointSetDistance.