点云库,两点云的鲁棒注册 [英] Point Cloud Library, robust registration of two point clouds

查看:1108
本文介绍了点云库,两点云的鲁棒注册的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要找到两个3d点云之间的变换和旋转差异。因为这看起来很理想。



在干净的测试数据我有迭代最近点工作,但给出奇怪的结果(虽然我可能已经实现不正确...)
我有 pcl :: estimateRigidTransformation 工作,看起来更好,虽然我认为会更糟的数据噪音。



我的问题是:



这两个云会很吵,点数,会有一些差异。什么是最好的办法来处理这个?



我应该在两个云中找到相应的功能,然后使用 estimateTransform ?或者,我应该看一个 RANSAC 函数来删除异常值?是 ICP 一个更好的方式比 estimateRigidTransform

解决方案

设置一个强大的点云注册算法可以是一个具有挑战性的任务,具有不同的选项,超参数和技术的变化,以正确设置,以获得强大的结果。



但是,



你可以看到成对注册应该运行通过不同的计算步骤来执行最好。单个步骤是:


  1. 数据获取:输入云和参考云


  2. 估算关键点:关键点(兴趣点)是点云内具有以下特征的点:



    1. 它在图像空间中具有明确的位置,

    2. 本地图像兴趣点周围的结构丰富了本地信息内容

    点云中的这种突出点是非常有用的,它们表征点云,并帮助使其不同部分可区分。

      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>

    详细信息: PCL关键点 - 文档


  3. 描述关键点 - 要素描述符:关键点,我们继续为它们中的每一个计算描述符。 局部描述符是点的局部邻域的紧凑表示与描述完整对象或点云的全局描述符相反,局部描述符试图仅在围绕点的局部邻域中类似形状和外观,因此非常适合于表示它在匹配方面。 (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>

    详细信息: PCL功能 - 文档


  4. 通讯估算找到点云中找到的关键点之间的对应关系。通常,利用计算的局部特征描述符,并将它们中的每一个匹配到其他点云中的相应对应物。然而,由于来自类似场景的两次扫描不一定具有相同数目的特征描述符,因为一个云可以具有比另一个云更多的数据,我们需要运行单独的通信拒绝过程。

      pcl :: registration :: CorrespondenceEstimation< PointSource,PointTarget,Scalar> 
    pcl :: registration :: CorrespondenceEstimationBackProjection< PointSource,PointTarget,NormalT,Scalar>
    pcl :: registration :: CorrespondenceEstimationNormalShooting< PointSource,PointTarget,NormalT,Scalar>


  5. 通信拒绝通信拒绝是使用 RANSAC (随机抽样协商一致意见)。但PCL有更多的拒绝算法,值得仔细看看:

      pcl :: registration :: CorrespondenceRejectorSampleConsensus<点T> 
    pcl :: registration :: CorrespondenceRejectorDistance
    pcl :: registration :: CorrespondenceRejectorFeatures :: FeatureContainer< FeatureT>
    pcl :: registration :: CorrespondenceRejectorPoly< SourceT,TargetT>

    详细信息: PCL模块注册 - 文档


  6. 转换估计计算两个点云。绝对定向算法用于计算应用在输入云上以匹配参考点云的6DOF(6自由度)变换。有许多不同的算法方法可以这样做,但PCL包括基于奇异值分解的实现(SVD)。计算描述匹配点云所需的旋转和平移的4×4矩阵。

      pcl :: registration :: TransformationEstimationSVD& PointSource,PointTarget,Scalar> 

    详细信息: PCL模块注册 - 文档


p>


I need to find the transformation and rotation difference between two 3d point clouds. For this I am looking at PCL, as it seems ideal.

On clean test data I have Iterative closest point working, but giving strange results(although I may have implemented it incorrectly...) I have pcl::estimateRigidTransformation working, and it seems better, although I assume will deal worse with noisy data.

My question is:

The two clouds will be noisy, and although they should contain the same points, there will be some discrepancies. What is the best way to deal with this?

Should I find corresponding features in the two clouds to begin with and THEN use estimateTransform? Or should I look at a RANSAC function to remove outliers? Is ICP a better way to go than estimateRigidTransform?

解决方案

Setting up a robust point cloud registration algorithm can be a challenging task with a variaty of different options, hyperparameters and techniques to be set correctly to obtain strong results.

However the Point Cloud Library comes with a whole set of preimplemented function to solve this kind of task. The only thing left to do is to understand what each blocks is doing and to then set up a so called ICP Pipeline consisting of these blocks stacked on each other.

An ICP pipeline can follow two different paths:

1. Iterative registration algorithm

The easier path starts right away applying an Iterative Closest Point Algorithm on the Input-Cloud (IC) to math it with the fixed Reference-Cloud (RC) by always using the closest point method. The ICP takes an optimistic asumption that the two point clouds are close enough (good prior of rotation R and translation T) and the registration will converge without further initial alignment.

This path of course can get stucked in a local minimum and therefore perform very poorly as it is prone to get fooled by any kind of inaccuracies in the given input data.

2. Feature-based registration algorithm

To overcome this people have worked on developing all kinds of methods and ideas to overcome bad performing registration. In contrast to a merely iterative registration algorithm a feature-based registration first tires to find higher lever correspondences between the two point clouds to speed up the process and to improve the accuracy. The methods are capsuled and then embedded in the registration pipleline to form a complete registration model.

The following picture from the PCL documentation shows such a Registation pipeline:

As you can see a pairwise registration should run trough different computational steps to perform best. The single steps are:

  1. Data acquisition: An input cloud and a reference cloud are fed into the algorithm.

  2. Estimating Keypoints: A keypoint (interest point) is a point within the point cloud that has the following characteristics:

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

    Such salient points in a point cloud are so usefull because the sum of them characterizes a point cloud and helps making different parts of it 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 we go on to compute a descriptor for every one of them. "A local descriptor a compact representation of a point’s local neighborhood. In contrast to global descriptors describing a complete object or point cloud, local descriptors try to resemble shape and appearance only in a local neighborhood around a point and thus are very suitable for representing it 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: The next task is to find correspondences between the keypoints found in the point clouds. Usually one takes advantage of the computed local featur-descriptors and match each one of them to his corresponding counterpart in the other point cloud. However due to the fact that two scans from a similar scene don't necessarily have the same number of feature-descriptors as one cloud can have more data then the other, we need to run a 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: One of the most common approaches to perform correspondence rejection is to use RANSAC (Random Sample Consensus). But PCL comes with more rejection algorithms that a worth it giving them a 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 the two point clouds are computed an Absolute Orientation Algorithm is used to calculate a 6DOF (6 degrees of freedom) transformation which is applied on the input cloud to match the reference point cloud. There are many different algorithmic approaches to do so, PCL however includes an implementation based on the Singular Value Decomposition(SVD). A 4x4 matrix is computed that describes the rotation and translation needed to match the point clouds.

    pcl::registration::TransformationEstimationSVD< PointSource, PointTarget, Scalar >
    

    Detailed information: PCL Module registration - Documentation

Further reading:

这篇关于点云库,两点云的鲁棒注册的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆