在点云库中的超体素聚类过程中保留自定义字段 (PCL)

Keep custom fields during supervoxel clustering process in Point Cloud Library (PCL)

我是 PCL(点云库)的新手,我试图在我的自定义数据集上实施 supervoxel_clustering (this link)。我的点云数据集有这些字段: X Y Z R G B L1 L2 其中 R、G、B 是 integer 0-255 和 L1 和 L2 之间的值 integer 个标签。

应用 supervoxel 后,我保存点云及其标签:

/// save the labeled cloud 
PointLCloudT::Ptr labeled_cloud = super.getLabeledCloud(); 
pcl::io::savePCDFileASCII("/path/labeled_cloud.pcd", *labeled_cloud);

我的问题是:如何从原点转移我的标签和颜色 过程中的云。我尝试定义我自己的点类型,例如:X Y Z R G B L1 L2 L3,但使用 关于点类型的教程,这样做并不容易。 我正在考虑的一种虚拟解决方案是使用 KD 树并从 supervoxel result to the original points,但我仍然需要阅读我的 pcl 中包含所有自定义字段的原始点。

任何人都可以帮助我吗?

谢谢, 布鲁斯

我了解到您已经定义了具有 L1 和 L2 字段的点类型。

点从 supervoxel_clustering 中以相同的顺序出现,getLabeledCloud() 方法 returns 所有原始点。最简单的解决方案是使用 L1、L2 和 L3 字段定义点云并将原始点云复制到该类型,然后迭代点云并从 labeled_cloud.

复制标签

类似于

pcl::PointCloud<your_custom_point_type_with_L1_L2_L3> combined_cloud;
pcl::copyPointCloud( original_cloud, combined_cloud );

for ( int i = 0; i < labeled_cloud->point.size(); i++ ){
    combined_cloud[i].label3 = labeled_cloud[i].label;
}