2017-02-23 45 views
0

我有一个从3D摄像头捕获的有组织的点云(1280 * 720)。我只是想知道是否有一种方法可以将这个点云调整到更小的尺寸(例如128 * 72),以保持这个云组织。 (我认为这不应该与下采样相同。“调整大小”就像缩放图像一样)。调整组织点云

我正在使用Point Cloud Library 1.8.0,但坚持这一点。

欢迎任何建议,先谢谢!

回答

1

只是来点出你想要减少你的云, 类似的东西shloud工作时数:

for (pcl::PointCloud<pcl::PointXYZ>::const_iterator it = src->begin(); it< src->end(); it+=times) 
{ 
    dest.points.push_back(*it); 
} 

唯一的问题是云计算可能containt一些NaN值。为了纠正它,只需将is_dense设置为false,然后调用removeNaNFromPointCloud就可以了。

希望这能帮助你!

+0

感谢@Anatole为您解释!其实我也想出了另一种类似于(也许比你更准确)的方式。我只是计算src云的每个m * m窗口的平均值作为dest云内的对应值。 –

+0

我也意识到了NaN的问题。看起来“removeNaNFromPointCloud”并不能保持云组织。在计算平均值时,我忽略了任何NaN点,如果src图像窗口内的所有点都是NaN点,则保留NaN点。 此外,我认为应该有更好的插值方法,而不仅仅是计算窗口内的平均值。奇怪的是,没有任何来自PCL的相关API。 –

+0

关于有组织的点云,@Anatole还有一个问题。您是否熟悉如何使用PCL对有组织的点云进行降采样?谢谢。 –

0

默认情况下无法评论但从您的点云中删除NaN使其无法组织。如果仪器无法观察矩阵中的某个点只是为了保持矩阵的正确性,那么很可能NaN就是虚拟点。删除这些打破矩阵结构,你会有不同的1280 * 720矩阵所期望的点数。

如果你想品尝下一个有组织的点云的2倍说,你可以尝试像

int scale = 2; 
pcl::PointCloud<pcl::your_point_type> down_sampled_cloud; 
down_sampled_cloud.width = original_cloud.width/scale; 
down_sampled_cloud.height = original_cloud.height/scale; 

for(int ii = 0; ii < original_cloud.height; ii+=scale){ 
    for(int jj = 0; jj < original_cloud.width; jj+=scale){ 
    down_sampled_cloud.push_back(original_cloud.at(ii,jj)); 

    } 
} 

变化规模你的愿望。

该方法只是对原始点云进行采样,不会插入现有点之间的点。如果曲面不连续,则用十进制因子缩放比较棘手,可能会产生不想要的结果。