This class implements a very efficient and robust variant of the iterative closest point (ICP) algorithm. The task is to register a 3D model (or point cloud) against a set of noisy target data. The variants are put together by myself after certain tests. The task is to be able to match partial, noisy point clouds in cluttered scenes, quickly. You will find that my emphasis is on the performance, while retaining the accuracy. This implementation is based on Tolga Birdal's MATLAB implementation in here: http://www.mathworks.com/matlabcentral/fileexchange/47152icpregistrationusingefficientvariantsandmultiresolutionscheme The main contributions come from:
More...
#include <opencv2/surface_matching/icp.hpp>

 ICP () 

 ICP (const int iterations, const float tolerence=0.05f, const float rejectionScale=2.5f, const int numLevels=6, const int sampleType=ICP::ICP_SAMPLING_TYPE_UNIFORM, const int numMaxCorr=1) 
 ICP constructor with default arguments. More...


virtual  ~ICP () 

int  registerModelToScene (const Mat &srcPC, const Mat &dstPC, double &residual, Matx44d &pose) 
 Perform registration. More...


int  registerModelToScene (const Mat &srcPC, const Mat &dstPC, std::vector< Pose3DPtr > &poses) 
 Perform registration with multiple initial poses. More...


This class implements a very efficient and robust variant of the iterative closest point (ICP) algorithm. The task is to register a 3D model (or point cloud) against a set of noisy target data. The variants are put together by myself after certain tests. The task is to be able to match partial, noisy point clouds in cluttered scenes, quickly. You will find that my emphasis is on the performance, while retaining the accuracy. This implementation is based on Tolga Birdal's MATLAB implementation in here: http://www.mathworks.com/matlabcentral/fileexchange/47152icpregistrationusingefficientvariantsandmultiresolutionscheme The main contributions come from:
 Picky ICP: http://www5.informatik.unierlangen.de/Forschung/Publikationen/2003/Zinsser03ARI.pdf
 Efficient variants of the ICP Algorithm: http://docs.happycoders.org/orgadoc/graphics/imaging/fasticp_paper.pdf
 Geometrically Stable Sampling for the ICP Algorithm: https://graphics.stanford.edu/papers/stabicp/stabicp.pdf
 Multiresolution registration: http://www.cvl.iis.utokyo.ac.jp/~oishi/Papers/Alignment/Jost_MultiResolutionICP_3DIM03.pdf
 Linearization of PointtoPlane metric by Kok Lim Low: https://www.comp.nus.edu.sg/~lowkl/publications/lowk_pointtoplane_icp_techrep.pdf
◆ anonymous enum
Enumerator 

ICP_SAMPLING_TYPE_UNIFORM  
ICP_SAMPLING_TYPE_GELFAND  
◆ ICP() [1/2]
cv::ppf_match_3d::ICP::ICP 
( 
 ) 


inline 
◆ ~ICP()
virtual cv::ppf_match_3d::ICP::~ICP 
( 
 ) 


inlinevirtual 
◆ ICP() [2/2]
cv::ppf_match_3d::ICP::ICP 
( 
const int 
iterations, 


const float 
tolerence = 0.05f , 


const float 
rejectionScale = 2.5f , 


const int 
numLevels = 6 , 


const int 
sampleType = ICP::ICP_SAMPLING_TYPE_UNIFORM , 


const int 
numMaxCorr = 1 

) 
 

inline 
ICP constructor with default arguments.
 Parameters

[in]  iterations  
[in]  tolerence  Controls the accuracy of registration at each iteration of ICP. 
[in]  rejectionScale  Robust outlier rejection is applied for robustness. This value actually corresponds to the standard deviation coefficient. Points with rejectionScale * &sigma are ignored during registration. 
[in]  numLevels  Number of pyramid levels to proceed. Deep pyramids increase speed but decrease accuracy. Too coarse pyramids might have computational overhead on top of the inaccurate registrtaion. This parameter should be chosen to optimize a balance. Typical values range from 4 to 10. 
[in]  sampleType  Currently this parameter is ignored and only uniform sampling is applied. Leave it as 0. 
[in]  numMaxCorr  Currently this parameter is ignored and only PickyICP is applied. Leave it as 1. 
◆ registerModelToScene() [1/2]
int cv::ppf_match_3d::ICP::registerModelToScene 
( 
const Mat & 
srcPC, 


const Mat & 
dstPC, 


double & 
residual, 


Matx44d & 
pose 

) 
 
Python: 

 cv.ppf_match_3d.ICP.registerModelToScene(  srcPC, dstPC  ) >  retval, residual, pose 
Perform registration.
 Parameters

[in]  srcPC  The input point cloud for the model. Expected to have the normals (Nx6). Currently, CV_32F is the only supported data type. 
[in]  dstPC  The input point cloud for the scene. It is assumed that the model is registered on the scene. Scene remains static. Expected to have the normals (Nx6). Currently, CV_32F is the only supported data type. 
[out]  residual  The output registration error. 
[out]  pose  Transformation between srcPC and dstPC. 
 Returns
 On successful termination, the function returns 0.
It is assumed that the model is registered on the scene. Scene remains static, while the model transforms. The output poses transform the models onto the scene. Because of the point to plane minimization, the scene is expected to have the normals available. Expected to have the normals (Nx6).
◆ registerModelToScene() [2/2]
int cv::ppf_match_3d::ICP::registerModelToScene 
( 
const Mat & 
srcPC, 


const Mat & 
dstPC, 


std::vector< Pose3DPtr > & 
poses 

) 
 
Python: 

 cv.ppf_match_3d.ICP.registerModelToScene(  srcPC, dstPC  ) >  retval, residual, pose 
Perform registration with multiple initial poses.
 Parameters

[in]  srcPC  The input point cloud for the model. Expected to have the normals (Nx6). Currently, CV_32F is the only supported data type. 
[in]  dstPC  The input point cloud for the scene. Currently, CV_32F is the only supported data type. 
[in,out]  poses  Input poses to start with but also list output of poses. 
 Returns
 On successful termination, the function returns 0.
It is assumed that the model is registered on the scene. Scene remains static, while the model transforms. The output poses transform the models onto the scene. Because of the point to plane minimization, the scene is expected to have the normals available. Expected to have the normals (Nx6).
The documentation for this class was generated from the following file: