我正在尝试扩大点云数据集。假设我有一个由100点和100点组成的点云数据集。我想把它放大5倍。其实我正在研究一些非常小的特定结构,所以我想放大&做一些计算。我想在Matlab中使用像imresize()这样的东西。 这有什么功能吗? resize()函数在PCL中做了什么?关于我该怎么做的任何想法?
答案 0 :(得分:1)
你为什么需要这个?点数只是数字,无论它们是1还是100,直到它们都在相同的比例和相同的坐标系中。它们在屏幕上的大小只是一个直观的表示,您可以根据需要放大和缩小。
您希望它们是原始值的千分之一(例如毫米 - >米变化)?将它们除以1000。
您希望它们在特定坐标系中的5倍大的空间中展开吗?将它们的坐标乘以5.但即便如此,它们的视觉表示在屏幕上看起来完全相同。数据基本保持不变,它们本身不会调整大小,它们的数字表示会有所改变。它是最简单的仿射变换,只需一次乘法。
您希望您的数字表示具有更精细或更粗略的分辨率吗?或者有不同的范围?相应地更改您的数据类型。
也就是说,如果你处理一套。
如果您处理不同的设置,比如说,使用不同类型的传感器记录并且数字表示略有不同(坐标系之间存在角度,mm与厘米刻度等),您只需要找到转换一个坐标系与另一个坐标系并将其应用于第一个坐标系。
答案 1 :(得分:0)
除了(Ziker提到的)增加分配的内存(这不是你想要的,对吗?)或放大可视化,你可以重新调整你的点云。
这可以通过将每个点维度乘以常数因子或使用affine transformation来完成。所以你可以从mm切换到m。
答案 2 :(得分:0)
由于你想在保留云的形状/结构的同时增加点数,我想你想做一些类似于“上采样”的事情。
Here是另一个关于此的问题。
PCL为bilateral upsampling提供课程。
并且像往常一样google为您提供了很多有关此主题的提示。
答案 3 :(得分:-1)
如果我理解你的问题 如果您已经像这样定义了云
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
实际上你可以做大小调整
cloud->points.resize (cloud->width * cloud->height);
请注意,调整大小只会为变量分配更多内存,因此在调整原始数据大小后仍保留在云中。因此,如果您想要空调整大小的云,请不要忘记添加cloud->clear();
如果你只想放大一些pcd用于视觉目的(即你不能看到什么是云的形状,因为它太小)为什么不使用PCL Visualization
并通过向上/向下滚动来缩放