pclpy VoxelGrid 滤波器 (降体素化)

@[TOC](pclpy VoxelGrid 滤波器 (降体素化))

一、算法原理

使用体素化网格方法对点云数据集进行下采样(即减少点数)。VoxelGrid类。在输入点云数据上创建一个3D 体素网格(将体素网格视为空间中的一组微小的 3D 框)。然后在每个体素(即 3D 框)中,所有存在的点都将用它们的质心进行近似(即下采样)。这种方法比用体素的中心近似它们要慢一些,但它更准确地表示下表面。

原理

代码注释写的比较详细。简单说就是根据设置的体素的大小就在这个体素大小内只保存一个点,不会移动其他点,较好的保存原来的形状。。

二、代码

from pclpy import pcl

if __name__ == '__main__':
    # 读取点云数据
    cloud = pcl.PointCloud.PointXYZ()
    reader = pcl.io.PCDReader()
    reader.read('res/bunny.pcd', cloud)
    print("降体素化前点云数目:", cloud.size())  # 等价 cloud.width * cloud.height ==  cloud.size() 打印点云数目

    # 创建滤波器
    vox = pcl.filters.VoxelGrid.PointXYZ()
    vox.setInputCloud(cloud)
    vox.setLeafSize(0.01, 0.01, 0.01)  # 设置体素大小 分别表示 x、y 和 z 方向上的体素尺寸 当前被设置为 0.01x0.01x0.01的立方体
    cloud_filtered = pcl.PointCloud.PointXYZ()  # 创建点云对象
    vox.filter(cloud_filtered)  # 装填降体素后的点云
    print("降体素化后点云数目:", cloud_filtered.size())  # 等价 cloud.width * cloud.height ==  cloud.size() 打印点云数目

    viewer = pcl.visualization.PCLVisualizer("3D viewer")  # 建立一个可视化对象,窗口名 3D viewer
    viewer.addPointCloud(cloud_filtered)  # 将颜色和点云数据添加到可刷对象中
    while not viewer.wasStopped():  # 展示可视化对象
        viewer.spinOnce(10)

三、结果

1.原点云

在这里插入图片描述

2.降体素化后的点云

在这里插入图片描述

四、相关数据

测试数据链接:https://pan.baidu.com/s/1LHIVYCxwd_JTK7IxsY3weQ
提取码:uo3f

  • 29
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在PCL中,可以使用VoxelGrid滤波器对点云进行采样操作。VoxelGrid滤波器将点云划分为一个个(Voxel),并将每个内的点云数据压缩为一个单独的代表点。 以下是在PCL中使用VoxelGrid滤波器进行点云采样的示例代码: ```cpp #include <pcl/point_cloud.h> #include <pcl/filters/voxel_grid.h> pcl::PointCloud<pcl::PointXYZ>::Ptr downsamplePointCloud(const pcl::PointCloud<pcl::PointXYZ>::Ptr cloud, float leaf_size) { pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_downsampled(new pcl::PointCloud<pcl::PointXYZ>); pcl::VoxelGrid<pcl::PointXYZ> voxelgrid; voxelgrid.setInputCloud(cloud); voxelgrid.setLeafSize(leaf_size, leaf_size, leaf_size); voxelgrid.filter(*cloud_downsampled); return cloud_downsampled; } ``` 在上述示例中,我们首先创建了输入点云 `cloud` 和输出点云 `cloud_downsampled`。然后,我们创建了一个 `pcl::VoxelGrid` 对象 `voxelgrid`,并设置了输入点云。 使用 `setLeafSize` 方法,我们设置了的大小,即 `leaf_size`。的大小决定了采样后的点云密度,较小的大小会产生更多的点云数据,较大的大小则会减少点云数据。 最后,通过调用 `filter` 方法,我们对点云进行了采样操作,并将结果保存到 `cloud_downsampled` 中,并返回该点云。 你可以根据需要调整的大小,以获得所需的采样效果。这样,你就可以使用VoxelGrid滤波器对点云进行采样了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云杂项

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值