@[TOC](pclpy VoxelGrid 滤波器 (降体素化))
一、算法原理
使用体素化网格方法对点云数据集进行下采样(即减少点数)。VoxelGrid
类。在输入点云数据上创建一个3D 体素网格(将体素网格视为空间中的一组微小的 3D 框)。然后在每个体素(即 3D 框)中,所有存在的点都将用它们的质心进行近似(即下采样)。这种方法比用体素的中心近似它们要慢一些,但它更准确地表示下表面。
原理
代码注释写的比较详细。简单说就是根据设置的体素的大小就在这个体素大小内只保存一个点,不会移动其他点,较好的保存原来的形状。。
二、代码
from pclpy import pclif __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 viewerviewer.addPointCloud(cloud_filtered) # 将颜色和点云数据添加到可刷对象中while not viewer.wasStopped(): # 展示可视化对象viewer.spinOnce(10)
三、结果
1.原点云
2.降体素化后的点云
四、相关数据
测试数据链接:https://pan.baidu.com/s/1LHIVYCxwd_JTK7IxsY3weQ
提取码:uo3f