无序点云预处理

本文详细介绍了点云数据的预处理过程,包括使用VoxelGrid进行体素滤波以去除背景地面,以及应用统计滤波和半径滤波进行点云去噪。此外,还展示了如何通过导向滤波进行平滑处理。最后,通过代码实例演示了如何读取、过滤和可视化处理后的点云数据。
摘要由CSDN通过智能技术生成

点云的预处理主要包括:点云去噪和点云的简化
点云的去噪主要是去除离群点点云的平滑处理
去除离群点方法:半径滤波和统计滤波
平滑处理方法:双边滤波和导向滤波
点云简化:体素滤波

去除背景:主要是去除地面
方法:渐进形态学滤波,平面拟合,布料法

点云体素滤波

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/voxel_grid.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <boost/thread/thread.hpp>

using namespace std;

int
main(int argc, char** argv)
{
   
	// -------------------------------读入点云数据--------------------------------
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::PCDReader reader;
	reader.read("data//table_scene_lms400.pcd", *cloud);
	cout << "PointCloud before filtering: " << *cloud << endl;
	// --------------------------------VoxelGrid----------------------------------
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::VoxelGrid<pcl::PointXYZ> vg;
	vg.setInputCloud(cloud);             // 输入点云
	vg.setLeafSize(0.3,0.3,0.3); // 设置最小体素边长
	vg.filter(*cloud_filtered);          // 进行滤波
	cout << "PointCloud after filtering: " << *cloud_filtered << endl;
	// ---------------------------------保存结果----------------------------------
	pcl::PCDWriter writer;
	writer.write<pcl::PointXYZ>("2f.pcd", *cloud_filtered, false);
	// ---------------------------------结果可视化--------------------------------
	boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("ShowCloud"));

	int v1(0);
	viewer->createViewPort(0.0, 0.0, 0.5, 1.0, v1);
	viewer->setBackgroundColor(0, 0, 0, v1);
	viewer->addText("Raw point clouds", 10, 10, "v1_text", v1);
	int v2(0);
	viewer->createViewPort(0.5, 0.0, 1, 1.0, v2);
	viewer->setBackgroundColor(0.1, 0.1, 0.1, v2);
	viewer->addText("filtered point clouds", 10, 10, "v2_text", v2);
	viewer->setWindowName("VoxelGrid");
	viewer->addPointCloud<pcl::PointXYZ>(cloud, "sample cloud", v1);
	viewer->addPointCloud<pcl::PointXYZ>(cloud_filtered, "cloud_filtered", v2);
	viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 1, 0, 0, "sample cloud", v1);
	viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 0, 1, 0, "cloud_filtered", v2);
	//view->addCoordinateSystem(1.0);
	//view->initCameraParameters();
	while (!viewer->wasStopped())
	{
   
		viewer->spinOnce(100);
		boost::this_thread::sleep(boost::posix_time::microseconds(100000));
	}

	return 0;
}

统计滤波

#include <iostream>
#include <pcl/io/pcd_io.h>
#include 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值