降采样
小技巧
我们的网络研讨会 Getting your point cloud ready for your application (为您的应用准备好点云)部分涵盖了降采样的相关内容。
介绍
本文介绍了降采样的概念,解释了它为何有价值并演示了如何对Zivid点云进行降采样。
Zivid 2+ 相机使用具有5 MP ( 2448 x 2048 ) 的传感器来捕获场景的点云。点云由XYZ(3D)、RGB(颜色)和SNR数据组成。生成的点云由500万个点组成。
Zivid 2 相机使用具有2.3 MP ( 1944 x 1200 ) 的传感器来捕获场景的点云。点云由XYZ(3D)、RGB(颜色)和SNR数据组成。生成的点云由230万个点组成。
有些应用不需要高密度点云数据。例如,通过将平面拟合到盒子表面来进行盒子检测以及 CAD 匹配,其中对象具有独特且易于识别的特征。此外,对于机器视觉算法来说,这样的数据量通常太大,无法以应用程序所需的速度进行处理。点云降采样正是在此类应用中发挥作用。
点云上下文中的降采样是在保持相同3D表征的情况下降低空间分辨率。它通常用于将数据转换为更易于管理的大小,从而减少存储和处理要求。
使用 Zivid SDK 对点云进行降采样有两种方法:
通过设置
Settings::Processing::Resampling
( Resampling(重采样) )实现,这意味着它是通过捕获设置进行控制的。通过 API
PointCloud::downsample
实现。
这两种方法都对点云应用了相同的操作。通过 API 的方法,您可以选择就地降采样或使用降采样数据获取新的点云实例。
问题 |
点云的大小或分辨率(密度)太大。 |
解决方案 |
对Zivid点云进行降采样以减小其大小和分辨率。 |
备注
本文讨论了在后期处理过程中应用的降采样;有关降低分辨率并由此缩短采集和捕获时间的基于硬件的子采样方法,请参阅 Monochrome Capture(单色捕获) 。
降采样API
可以就地进行降采样,从而修改当前点云。
pointCloud.downsample(Zivid::PointCloud::Downsampling::by2x2);
pointCloud.Downsample(Zivid.NET.PointCloud.Downsampling.By2x2);
point_cloud.downsample(zivid.PointCloud.Downsampling.by2x2)
也可以将降采样后的点云作为一个新的点云实例,它不会改变现有的点云。
auto downsampledPointCloud = pointCloud.downsampled(Zivid::PointCloud::Downsampling::by2x2);
var downsampledPointCloud = pointCloud.Downsampled(Zivid.NET.PointCloud.Downsampling.By2x2);
downsampled_point_cloud = point_cloud.downsampled(zivid.PointCloud.Downsampling.by2x2)
Zivid SDK支持以下降采样率: by2x2
, by3x3
, 和 by4x4
, 可以进行多次降采样。
备注
Zivid SDK中的降采样API速度很快,因为它是在GPU上并行完成的,而此时点云数据仍在GPU内存中。使用第三方库进行降采样可能更耗时:CPU计算通常要慢得多,而GPU计算则需要多出一次数据复制过程。查看 点云捕获过程 了解更多信息。
如果您对如何实现该功能感兴趣,请查看我们的降采样代码示例 C++, C#, Python, 和 MATLAB。
小技巧
出于性能原因的考量,可以将降采样API与转换和法线API结合使用,因为GPU执行所有这些计算时, 点云数据仍在GPU内存中时。
为了最快地完成数据处理,可以先对点云进行降采样,然后对其进行转换。
如需对点云进行降采样,您可以运行我们的代码示例。
示例: downsample.py
python /path/to/downsample.py --zdf-path /path/to/file.zdf
要了解有关如何进行降采样以及它为什么并非是一个无足轻重的功能,请查看文章 降采样理论。
版本历史
SDK |
变更 |
---|---|
2.12.0 |
现在也可以通过 |
2.10.0 |
Monochrome Capture(单色捕获) 引入了更快的降采样替代方案。 |
2.1.0 |
添加了降采样API。 |