c++ - Point Cloud Library, robust registration of two point clouds -


i need find transformation , rotation difference between 2 3d point clouds. looking @ pcl, seems ideal.

on clean test data have iterative closest point working, giving strange results(although may have implemented incorrectly...) have pcl::estimaterigidtransformation working, , seems better, although assume deal worse noisy data.

my question is:

the 2 clouds noisy, , although should contain same points, there discrepancies. best way deal this?

should find corresponding features in 2 clouds begin , use estimatetransform? or should @ ransac function remove outliers? icp better way go estimaterigidtransform?

setting robust point cloud registration algorithm can challenging task variaty of different options, hyperparameters , techniques set correctly obtain strong results.

however point cloud library comes whole set of preimplemented function solve kind of task. thing left understand each blocks doing , set called icp pipeline consisting of these blocks stacked on each other.

an icp pipeline can follow 2 different paths:

1. iterative registration algorithm

the easier path starts right away applying iterative closest point algorithm on input-cloud (ic) math fixed reference-cloud (rc) using closest point method. icp takes optimistic asumption 2 point clouds close enough (good prior of rotation r , translation t) , registration converge without further initial alignment.

this path of course can stucked in local minimum , therefore perform poorly prone fooled kind of inaccuracies in given input data.

2. feature-based registration algorithm

to overcome people have worked on developing kinds of methods , ideas overcome bad performing registration. in contrast merely iterative registration algorithm feature-based registration first tires find higher lever correspondences between 2 point clouds speed process , improve accuracy. methods capsuled , embedded in registration pipleline form complete registration model.

the following picture pcl documentation shows such registation pipeline:

pcl pairwise registration

as can see pairwise registration should run trough different computational steps perform best. single steps are:

  1. data acquisition: input cloud , reference cloud fed algorithm.

  2. estimating keypoints: keypoint (interest point) point within point cloud has following characteristics:

    1. it has clear, preferably mathematically well-founded, definition,
    2. it has well-defined position in image space,
    3. the local image structure around interest point rich in terms of local information contents

    such salient points in point cloud usefull because sum of them characterizes point cloud , helps making different parts of distinguishable.

    pcl::narfkeypoint pcl::isskeypoint3d< pointint, pointoutt, normalt > pcl::harriskeypoint3d< pointint, pointoutt, normalt > pcl::harriskeypoint6d< pointint, pointoutt, normalt > pcl::siftkeypoint< pointint, pointoutt > pcl::susankeypoint< pointint, pointoutt, normalt, intensityt > 

    detailed information: pcl keypoint - documentation

  3. describing keypoints - feature descriptors: after detecting keypoints go on compute descriptor every 1 of them. "a local descriptor compact representation of point’s local neighborhood. in contrast global descriptors describing complete object or point cloud, local descriptors try resemble shape , appearance in local neighborhood around point , suitable representing in terms of matching." (dirk holz et al.)

    pcl::fpfhestimation< pointint, pointnt, pointoutt > pcl::normalestimation< pointint, pointoutt > pcl::normalestimationomp< pointint, pointoutt > pcl::ourcvfhestimation< pointint, pointnt, pointoutt > pcl::principalcurvaturesestimation< pointint, pointnt, pointoutt > pcl::intensityspinestimation< pointint, pointoutt > 

    detailed information: pcl features - documentation

  4. correspondence estimation: next task find correspondences between keypoints found in point clouds. 1 takes advantage of computed local featur-descriptors , match each 1 of them corresponding counterpart in other point cloud. due fact 2 scans similar scene don't have same number of feature-descriptors 1 cloud can have more data other, need run seperated correspondence rejection process.

    pcl::registration::correspondenceestimation< pointsource, pointtarget, scalar > pcl::registration::correspondenceestimationbackprojection< pointsource, pointtarget, normalt, scalar > pcl::registration::correspondenceestimationnormalshooting< pointsource, pointtarget, normalt, scalar > 
  5. correspondence rejection: 1 of common approaches perform correspondence rejection use ransac (random sample consensus). pcl comes more rejection algorithms worth giving them closer look:

    pcl::registration::correspondencerejectorsampleconsensus< pointt > pcl::registration::correspondencerejectordistance pcl::registration::correspondencerejectorfeatures::featurecontainer< featuret > pcl::registration::correspondencerejectorpoly< sourcet, targett > 

    detailed information: pcl module registration - documentation

  6. transformation estimation: after robust correspondences between 2 point clouds computed absolute orientation algorithm used calculate 6dof (6 degrees of freedom) transformation applied on input cloud match reference point cloud. there many different algorithmic approaches so, pcl includes implementation based on singular value decomposition(svd). 4x4 matrix computed describes rotation , translation needed match point clouds.

    pcl::registration::transformationestimationsvd< pointsource, pointtarget, scalar > 

    detailed information: pcl module registration - documentation

further reading:


Comments

Popular posts from this blog

angularjs - ADAL JS Angular- WebAPI add a new role claim to the token -

php - CakePHP HttpSockets send array of paramms -

node.js - Using Node without global install -