如何将多个视图的层合并到一个 360 度视图的单个对象中

How to combine ply of multiple views into a single object of 360 degree view

提问人:Nikitha 提问时间:9/21/2023 最后编辑:Nikitha 更新时间:9/26/2023 访问量:42

问:

我为单个对象有 8 个层文件,但每个文件都有不同的视图。我需要整合所有这些场景并形成 360 度网格。pcl中是否有一种技术可以集成所有这些场景。icp 可以用于集成场景吗?如果是这样,如果有人提供集成它的示例代码,它将很有用。

我需要整合单个场景的不同视图。我尝试了 icp,但我无法集成它。我不确定源和目标是如何固定的,以及如何对齐。ICP可以用于场景集成吗?

查看 Cloud Point PCL ply-file-format

评论

0赞 Community 9/22/2023
请编辑问题,将其限制在特定问题上,并具有足够的细节以确定适当的答案。

答:

0赞 IBitMyBytes 9/22/2023 #1

您要执行的操作称为注册。PCL 教程对您来说可能是一个很好的起点: https://pcl.readthedocs.io/projects/tutorials/en/master/#registration 是的,ICP 是一种可能的方法。它是否会成功取决于你选择的参数、对象本身,以及你给 ICP 的起始猜测有多好。

评论

0赞 Nikitha 9/26/2023
我有两种不同的看法。一个是前视图,另一个是剖面图(侧视图)。在这种情况下,我尝试使用 icp。但它只是对齐并只产生一个云,而不是合并它。有没有办法集成它,我什至尝试将 icp 的结果与视图 1 连接起来。但合并并不准确。
0赞 IBitMyBytes 9/27/2023
那么“集成”到底是什么意思呢?“合并不准确”是怎么回事?我不明白这个问题。
0赞 Nikitha 9/27/2023
就我而言,集成是我需要结合前视图和侧视图。所以在组合时,我无法执行它。因此,如果有任何算法可以实现最终目标
0赞 Nikitha 9/26/2023 #2

这是示例代码。B它没有集成两个不同的视图。

pcl::IterativeClosestPoint<pcl::PointXYZRGB, pcl::PointXYZRGB> icp;
icp.setMaximumIterations(500);
icp.setInputSource(mls_points_with_normals);
icp.setInputTarget(mls_points_with_normals2);
// icp.setMaxCorrespondenceDistance (0.05);
icp.setEuclideanFitnessEpsilon(1);
icp.setTransformationEpsilon(1);
pcl::PointCloud<pcl::PointXYZRGB>::Ptr aligned_cloud(new pcl::PointCloud<pcl::PointXYZRGB>);
icp.align(*aligned_cloud);

Eigen::Matrix4f transformation_matrix = icp.getFinalTransformation();
pcl::PointCloud<pcl::PointXYZRGB>::Ptr transformed_cloud(new pcl::PointCloud<pcl::PointXYZRGB>);
pcl::transformPointCloud(*mls_points_with_normals, *transformed_cloud, transformation_matrix);
pcl::PointCloud<pcl::PointXYZRGB>::Ptr integrated_cloud(new pcl::PointCloud<pcl::PointXYZRGB>);
*integrated_cloud = *transformed_cloud + *mls_points_with_normals2;