在保持形状的同时将点云下采样到特定数量的点

Downsampling point clouds to specific number of points while retaining shape

环境:Python-PCL,WIndows10,Python3.6

我需要将点云采样到特定数量的点。这些点云的大小各不相同,因此我被卡住了。通过文档,我了解到只有 VoxelGridConditionalOutlierRemovalStatisticalOutlierRemovalRadiusOutlierRemoval 是可用的选项。

在VoxelGrid中,叶子的大小并不能保证点的数量,去除Radius对保持形状没有帮助,而统计异常值主要有助于去除噪声。

有什么解决办法吗?可以用numpy.random.choice()期待奇迹吗?

编辑:numpy.random.choice 有效,但前提是您不关心点云的几何形状,我很关心。无论如何要动态使用 VoxelGrid?

很遗憾,答案是否定的。使用 PCL 的 VoxelGrid 的输出点数始终是占用体素数的函数。控制占用体素数量的唯一方法是改变叶大小,没有动态方法可以做到这一点。

或者,您可能会幸运地使用最远点采样,因为它可以让您 select N 点并且具有很好的蓝噪声特性,但据我所知,这在 PCL.