- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我需要找到两个3D点云之间的变换和旋转差异。为此,我正在看点云库,因为它似乎很理想。
在干净的测试数据上,我可以使用迭代最近点(ICP),但是得到的结果很奇怪(尽管我可能实现不正确)。
我可以使用pcl::estimateRigidTransformation
,而且看起来更好,尽管我认为处理嘈杂的数据会更糟。
我的问题是:
两层云将很嘈杂,尽管它们应包含相同的点,但仍存在一些差异。处理此问题的最佳方法是什么?
我是否应该在两朵云中找到相应的功能,然后再使用estimateTransform
?还是应该查看RANSAC
函数以消除异常值? ICP
比estimateRigidTransform
更好吗?
最佳答案
设置健壮的点云注册算法可能是一项具有挑战性的任务,需要正确设置各种选项,超参数和技术,以获得强大的结果。
但是Point Cloud Library附带了一整套预实现的函数来解决此类任务。剩下要做的唯一一件事就是了解每个模块的作用,然后建立一个所谓的ICP管道,该ICP管道将这些模块彼此堆叠在一起。
ICP管道可以遵循两种不同的路径:
1.迭代注册算法
始终通过使用最接近点方法,更容易的路径立即开始在输入云(IC)上应用迭代最近点算法,以使用固定引用云(RC)对它进行数学运算。 ICP乐观地假设两点云足够接近(在旋转R和平移T之前先出现),并且配准将收敛而无需进一步的初始对准。
当然,此路径可能会卡在局部最小值中,因此执行起来会很差,因为它很容易被给定输入数据中的任何类型的错误所欺骗。
2.基于特征的注册算法
为了克服这个问题,人们致力于开发各种方法和思想来克服不良的注册。与单纯的迭代配准算法相比,基于特征的配准首先要在两个点云之间找到更高的杠杆对应关系,以加快过程并提高准确性。将这些方法进行封装,然后嵌入配准管路中以形成完整的配准模型。
下图PCL documentation中的图片显示了这样的注册管道:
如您所见,成对注册应该通过不同的计算步骤来运行以达到最佳性能。单个步骤是:
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 Keypoint - Documentation
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 Features - Documentationpcl::registration::CorrespondenceEstimation< PointSource, PointTarget, Scalar >
pcl::registration::CorrespondenceEstimationBackProjection< PointSource, PointTarget, NormalT, Scalar >
pcl::registration::CorrespondenceEstimationNormalShooting< PointSource, PointTarget, NormalT, Scalar >
pcl::registration::CorrespondenceRejectorSampleConsensus< PointT >
pcl::registration::CorrespondenceRejectorDistance
pcl::registration::CorrespondenceRejectorFeatures::FeatureContainer< FeatureT >
pcl::registration::CorrespondenceRejectorPoly< SourceT, TargetT >
详细信息:PCL Module registration - Documentationpcl::registration::TransformationEstimationSVD< PointSource, PointTarget, Scalar >
详细信息:PCL Module registration - Documentation关于c++ - 两点云的稳健配准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30559556/
我正在尝试创建(在Java中)一个包含指定数量的整数k(例如,50、500、1000等)的整数数组,该数组不使用库函数或集合,但包含随机数范围内(即从 1 到 k)的数字分类,具有指定的重复百分比。
例如: MY_MESSAGE = 'Dear %s, hello.' # ... name = "jj" print MY_MESSAGE % name python 是否具有完成类似我上面的代码的功
我有一个使用 NUnit 3.4.1、NSubstitute 1.10.0 和 NCrunch 2.23.0.2 的文本夹具 此夹具中在任何时间点都有 2 个失败测试。每次我更改某些内容时,哪个测试失
我是一名优秀的程序员,十分优秀!