MeshLib C++ Docs
Loading...
Searching...
No Matches
MR::ICPProperties Struct Reference

parameters of ICP algorithm More...

#include <MRICP.h>

Public Attributes

ICPMethod method = ICPMethod::PointToPlane
 The method how to update transformation from point pairs, see description of each option in ICPMethod.
 
float p2plAngleLimit = PI_F / 6.0f
 
float p2plScaleLimit = 2
 
float cosThreshold = 0.7f
 
float distThresholdSq = 1.f
 
float farDistFactor = 3.f
 
ICPMode icpMode = ICPMode::AnyRigidXf
 
Vector3f fixedRotationAxis
 Additional parameter for ICPMode::OrthogonalAxis and ICPMode::FixedAxis transformation groups.
 
int iterLimit = 10
 
int badIterStopCount = 3
 
float exitVal = 0
 
bool mutualClosest = false
 

Detailed Description

parameters of ICP algorithm

Member Data Documentation

◆ badIterStopCount

int MR::ICPProperties::badIterStopCount = 3

The algorithm will stop before making all (iterLimit) iterations, if there were consecutive (badIterStopCount) iterations, during which the average distance between points in active pairs did not diminish.

◆ cosThreshold

float MR::ICPProperties::cosThreshold = 0.7f

If source and target points in a pair both have normals, then dot-product of normals must be not smaller than (cosThreshold), otherwise such point pair will be deactivated (ignored) during transformation computation. This is to get rid of erroneous pairs on unrelated parts of objects, which are close only by chance.

◆ distThresholdSq

float MR::ICPProperties::distThresholdSq = 1.f

The squared distance between source and target points in a pair must be not greater than (distThresholdSq), otherwise such point pair will be deactivated (ignored) during transformation computation. This is to get rid of outliers in input objects.

◆ exitVal

float MR::ICPProperties::exitVal = 0

The algorithm will stop before making all (iterLimit) iterations, if the average distance between points in active pairs became smaller than this value.

◆ farDistFactor

float MR::ICPProperties::farDistFactor = 3.f

First, root-mean-square distance between points in all active pairs is computed as D. Then, the distance between source and target points in a pair must be not greater than (farDistFactor * D), otherwise such point pair will be deactivated (ignored) during transformation computation. This is to progressively reduce the distance threshold as the algorithm converge to a solution.

◆ fixedRotationAxis

Vector3f MR::ICPProperties::fixedRotationAxis

Additional parameter for ICPMode::OrthogonalAxis and ICPMode::FixedAxis transformation groups.

◆ icpMode

ICPMode MR::ICPProperties::icpMode = ICPMode::AnyRigidXf

Selects the group of transformations, where to find a solution (e.g. with scaling or without, with rotation or without, ...). See the description of each option in ICPMode.

◆ iterLimit

int MR::ICPProperties::iterLimit = 10

The maximum number of iterations that the algorithm can perform. Increase this parameter if you need a higher precision or if initial approximation is not very precise.

◆ method

ICPMethod MR::ICPProperties::method = ICPMethod::PointToPlane

The method how to update transformation from point pairs, see description of each option in ICPMethod.

◆ mutualClosest

bool MR::ICPProperties::mutualClosest = false

A pair of points is activated only if both points in the pair are mutually closest (reciprocity test passed), some papers recommend this mode for filtering out wrong pairs, but it can be too aggressive and deactivate (almost) all pairs.

◆ p2plAngleLimit

float MR::ICPProperties::p2plAngleLimit = PI_F / 6.0f

Rotation angle during one iteration of ICPMethod::PointToPlane will be limited by this value. This is to reduce possible instability.

◆ p2plScaleLimit

float MR::ICPProperties::p2plScaleLimit = 2

Scaling during one iteration of ICPMethod::PointToPlane will be limited by this value. This is to reduce possible instability.


The documentation for this struct was generated from the following file: