我有一个从3D摄像头捕获的有组织的点云(1280 * 720)。我只是想知道是否有一种方法可以将这个点云调整到更小的尺寸(例如128 * 72),以保持这个云组织。 (我认为这不应该与下采样相同。“调整大小”就像缩放图像一样)。调整组织点云
我正在使用Point Cloud Library 1.8.0,但坚持这一点。
欢迎任何建议,先谢谢!
我有一个从3D摄像头捕获的有组织的点云(1280 * 720)。我只是想知道是否有一种方法可以将这个点云调整到更小的尺寸(例如128 * 72),以保持这个云组织。 (我认为这不应该与下采样相同。“调整大小”就像缩放图像一样)。调整组织点云
我正在使用Point Cloud Library 1.8.0,但坚持这一点。
欢迎任何建议,先谢谢!
只是来点出你想要减少你的云, 类似的东西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就可以了。
希望这能帮助你!
默认情况下无法评论但从您的点云中删除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));
}
}
变化规模你的愿望。
该方法只是对原始点云进行采样,不会插入现有点之间的点。如果曲面不连续,则用十进制因子缩放比较棘手,可能会产生不想要的结果。
感谢@Anatole为您解释!其实我也想出了另一种类似于(也许比你更准确)的方式。我只是计算src云的每个m * m窗口的平均值作为dest云内的对应值。 –
我也意识到了NaN的问题。看起来“removeNaNFromPointCloud”并不能保持云组织。在计算平均值时,我忽略了任何NaN点,如果src图像窗口内的所有点都是NaN点,则保留NaN点。 此外,我认为应该有更好的插值方法,而不仅仅是计算窗口内的平均值。奇怪的是,没有任何来自PCL的相关API。 –
关于有组织的点云,@Anatole还有一个问题。您是否熟悉如何使用PCL对有组织的点云进行降采样?谢谢。 –