无序点云下采样方法

VoxelGrid 和 UniformSampling 都是 PCL 中用于点云下采样的常见算法。它们的主要区别如下:

1、采样方式

VoxelGrid 算法是一种基于体素网格化的下采样方法。它将点云数据划分为一个个大小相同的立方体体素,例如 0.05m×0.05m×0.05m,并对每个体素内的点进行处理。在每个体素内,VoxelGrid算法会选择距离该体素中心最近的点作为采样结果。

UniformSampling 算法则是一种基于随机性质的下采样方法,它同样会将点云数据划分为一个个立方体体素,并在每个体素内随机选择一个点作为采样结果。与VoxelGrid不同的是,UniformSampling中的体素大小是由用户设置的搜索半径决定的,例如0.05m。

2、适用场景

VoxelGrid 算法可以快速且有效地降低点云数目,适用于需要对点云数据进行较大程度下采样的场景,如配准、三维重建等。

UniformSampling 算法可以保证采样结果更加均匀,能够更好地保留点云数据的分布特征。适用于需要对点云数据进行轻量级下采样的场景,如特征提取、分类和识别等。

3、采样结果

由于 VoxelGrid 算法是基于体素网格化的,其采样结果可能会在空间上出现较大的间隙,无法完全保留原始点云的分布特征。

UniformSampling 算法则能够更好地保留点云数据的分布特征,采样结果更加均匀。

在 PCL 中,VoxelGrid 算法可以通过 pcl::VoxelGrid 类进行实现,而UniformSampling 算法则可以通过 pcl::UniformSampling 类进行实现。下面是一个使用 VoxelGrid 和 UniformSampling 进行点云下采样的例子:

#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
// 包含相关头文件
#include <pcl/filters/voxel_grid.h>
#include <pcl/filters/uniform_sampling.h>

typedef pcl::PointXYZ PointT;

int main10(int argc, char** argv)
{
	// 读取点云
	pcl::PointCloud<PointT>::Ptr cloud(new pcl::PointCloud<PointT>);
	pcl::io::loadPCDFile("../input_cloud/rabbit.pcd", *cloud);
	std::cout << "original cloud size : " << cloud->size() << std::endl;

	// 使用体素化网格(VoxelGrid)进行下采样
	pcl::VoxelGrid<PointT> grid; //创建滤波对象
	const float leaf = 0.5f; //创建体素大小为50cm的立方体
	grid.setLeafSize(leaf, leaf, leaf); // 设置体素体积
	grid.setInputCloud(cloud); // 设置点云
	pcl::PointCloud<PointT>::Ptr voxelResult(new pcl::PointCloud<PointT>);
	grid.filter(*voxelResult); // 执行滤波,输出结果
	std::cout << "voxel downsample size :" << voxelResult->size() << std::endl;

	// 使用UniformSampling进行下采样
	pcl::UniformSampling<PointT> uniform_sampling;
	uniform_sampling.setInputCloud(cloud);
	double radius = 0.5f;
	uniform_sampling.setRadiusSearch(radius);
	pcl::PointCloud<PointT>::Ptr uniformResult(new pcl::PointCloud<PointT>);
	uniform_sampling.filter(*uniformResult);
	std::cout << "UniformSampling size :" << uniformResult->size() << std::endl;

	system("pause");
	return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值