PCL:RandomSample ❤️ 随机下采样

Posted 没事就要敲代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PCL:RandomSample ❤️ 随机下采样相关的知识,希望对你有一定的参考价值。

1 原理

原理十分简单,首先指定要下采样的点数,然后随机进行采样。

2 代码实现

代码:

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/filters/random_sample.h>
#include <pcl/console/time.h>

using namespace std;

typedef pcl::PointXYZ PointT;

int main()
{
	//------------------------------------ 加载点云 ---------------------------------
	pcl::PointCloud<PointT>::Ptr cloud(new pcl::PointCloud<PointT>);
	pcl::PCDReader reader;
	if (reader.read("happy buddha.pcd", *cloud) < 0)
	{
		PCL_ERROR("\\a->点云文件不存在!\\n");
		system("pause");
		return -1;
	}
	cout << "->加载了 " << cloud->points.size() << " 个数据点" << endl;
	//==============================================================================

	//---------------------------------- 随机下采样 --------------------------------
	pcl::console::TicToc time;
	time.tic();
	cout << "->正在进行随机下采样..." << endl;
	pcl::PointCloud<PointT>::Ptr cloud_sub(new pcl::PointCloud<PointT>);	//随机下采样点云
	pcl::RandomSample<PointT> rs;	//创建滤波器对象
	rs.setInputCloud(cloud);				//设置待滤波点云
	rs.setSample(20000);					//设置下采样点云的点数
	//rs.setSeed(1);						//设置随机函数种子点
	rs.filter(*cloud_sub);					//执行下采样滤波,保存滤波结果于cloud_sub
	cout << "->随机下采样用时:" << time.toc() / 1000 << " s" << endl;
	//==============================================================================

	//--------------------------------- 保存下采样点云 ------------------------------
	if (!cloud_sub->empty())
	{
		pcl::io::savePCDFileBinary("RandomSample.pcd", *cloud_sub);
		cout << "->随机下采样点云的点数为:" << cloud_sub->points.size() << endl;
	}
	else
	{
		PCL_ERROR("\\a->下采样点云为空!\\n");
		system("pause");
		return -1;
	}
	//==============================================================================

	return 0;
}

输出结果:

->加载了 543652 个数据点
->正在进行随机下采样...
->随机下采样用时:0.096 s
->随机下采样点云的点数为:20000

3 下采样结果展示


左侧为原始点云,右侧为随机下采样点云。


相关链接:

PCL点云数据处理基础❤️❤️❤️目录

以上是关于PCL:RandomSample ❤️ 随机下采样的主要内容,如果未能解决你的问题,请参考以下文章

PCL:UniformSampling ❤️ 点云均匀下采样

PCL:VoxelGrid ❤️ 点云体素下采样

PCL中常用的高级采样方法

点云体素下采样 ❤️(体素质心 | 体素中心)

PCL随机采样一致性:RANSAC 圆拟合(二维圆 + 空间圆)

PCL随机采样一致性:RANSAC 平面拟合