点云滤波介绍

news2024/9/21 2:41:13

一、介绍

1、Filtering a PointCloud using a PassThrough filter

2、Downsampling a PointCloud using a VoxelGrid filter

3、Removing sparse outliers using StatisticalOutlierRemoval

4、Projecting points using a parametric model

数据集:链接:https://pan.baidu.com/s/1jR7k5iI-acVyyehKcYbetA?pwd=mr16
     提取码:mr16

二、代码

1、PassThrough filter

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/passthrough.h>
#include <pcl/visualization/cloud_viewer.h>

int main()
{
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	if (-1 == pcl::io::loadPCDFile("rabbit.pcd", *cloud))
	{
		std::cout << "read pcd file error!" << std::endl;
	}
	std::cout << "cloud1 size = " << cloud->points.size() << std::endl;

	pcl::PointCloud<pcl::PointXYZ>::Ptr filter(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::PassThrough<pcl::PointXYZ> pass;
	pass.setInputCloud(cloud);
	pass.setFilterFieldName("x");
	pass.setFilterLimits(-10.0f, 0.0f);
	pass.filter(*filter);
	std::cout << "filter size = " << filter->points.size() << std::endl;

	pcl::visualization::CloudViewer viewer("Cloud Viewer");
	viewer.showCloud(filter);
	while (!viewer.wasStopped())
	{
	}

	return 0;
}

 

 

2、VoxelGrid filter

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/voxel_grid.h>

int main()
{
    pcl::PCLPointCloud2::Ptr cloud(new pcl::PCLPointCloud2());
	pcl::PCDReader reader;
    reader.read("rabbit.pcd", *cloud);
	std::cout << "cloud size = " << cloud->data.size() << std::endl;

	pcl::PCLPointCloud2::Ptr filter(new pcl::PCLPointCloud2());
	pcl::VoxelGrid<pcl::PCLPointCloud2> sor;
	sor.setInputCloud(cloud);
	sor.setLeafSize(0.5f, 0.5f, 0.5f);
	sor.filter(*filter);
	std::cout << "filter size = " << filter->data.size() << std::endl;

	pcl::PCDWriter writer;
	writer.write("rabbit_down.pcd", *filter, Eigen::Vector4f::Zero(), Eigen::Quaternionf::Identity(), false);

	return 0;
}

 

 

3、StatisticalOutlierRemoval

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/filters/statistical_outlier_removal.h>

int main()
{
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	if (-1 == pcl::io::loadPCDFile("filtered1.pcd", *cloud))
	{
		std::cout << "read pcd file error!" << std::endl;
	}
	std::cout << "cloud1 size = " << cloud->points.size() << std::endl;

	pcl::PointCloud<pcl::PointXYZ>::Ptr filter(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::StatisticalOutlierRemoval<pcl::PointXYZ> sor;
	sor.setInputCloud(cloud);
	sor.setMeanK(80);
	sor.setStddevMulThresh(1.0);
	sor.filter(*filter);
	std::cout << "filter size = " << filter->points.size() << std::endl;

	pcl::visualization::CloudViewer viewer("Cloud Viewer");
	viewer.showCloud(filter);
	while (!viewer.wasStopped())
	{
	}

	return 0;
}

  

4、Projecting points

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/project_inliers.h>
#include <pcl/visualization/cloud_viewer.h>

int main()
{
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	if (-1 == pcl::io::loadPCDFile("filtered1.pcd", *cloud))
	{
		std::cout << "read pcd file error!" << std::endl;
	}
	std::cout << "cloud1 size = " << cloud->points.size() << std::endl;

	
	// z=0 plane
	pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients());
	coefficients->values.resize(4);
	coefficients->values[0] = coefficients->values[1] = 0;
	coefficients->values[2] = 1.0;
	coefficients->values[3] = 0;

    pcl::PointCloud<pcl::PointXYZ>::Ptr filter(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::ProjectInliers<pcl::PointXYZ> proj;
	proj.setModelType(pcl::SACMODEL_PLANE);
	proj.setInputCloud(cloud);
	proj.setModelCoefficients(coefficients);
	proj.filter(*filter);
	std::cout << "filter size = " << filter->points.size() << std::endl;

	pcl::visualization::CloudViewer viewer("Cloud Viewer");
	viewer.showCloud(filter);
	while (!viewer.wasStopped())
	{
	}

	return 0;
}

 

 

三、参考

Introduction — Point Cloud Library 0.0 documentation

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/888390.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql mysql 容器 忽略大小写配置

首先能够连接上mysql&#xff0c;然后输入下面这个命令查看mysql是否忽略大小写 show global variables like %lower_case%; lower_case_table_names 0&#xff1a;不忽略大小写 lower_case_table_names 1&#xff1a;忽略大小写 mysql安装分为两种&#xff08;根据自己的my…

移动端身份证识别技术的应用,告别手动录入证件信息

随着移动互联网的的发展&#xff0c;越来越多的公司都推出了自己的移动APP&#xff0c;这些APP多数都涉及到个人身份证信息的输入认证&#xff08;即实名认证&#xff09;&#xff0c;如果手动去输入身份证号码和姓名&#xff0c;速度非常慢&#xff0c;且用户体验非常差。为了…

MotionBERT:人体运动表征

MotionBERT&#xff1a;A Unified Perspective on Learning Human Motion Representations解析 摘要1. 简介2. Related Work2.1 学习人体运动表征2.2 3D人体姿态估计2.3 基于骨骼的动作识别2.3 人体网格恢复 3. Method3.1 Overview3.2 网络架构Spatial BlockTemporal BlockDual…

MybatisPlus整合p6spy组件SQL分析

目录 p6spy java为什么需要 如何使用 其他配置 p6spy p6spy是一个开源项目&#xff0c;通常使用它来跟踪数据库操作&#xff0c;查看程序运行过程中执行的sql语句。 p6spy将应用的数据源给劫持了&#xff0c;应用操作数据库其实在调用p6spy的数据源&#xff0c;p6spy劫持到…

Python项目中怎么实现异步任务和定时任务

这里写目录标题 一、异步任务:二、定时任务:三、Celery介绍特点:Celery由三部分构成:工作原理:安装Celery选择一个Broker:RabbitMQKafka和RabbitMQ的区别:定义一个任务定义第二个任务定义一个生产者(producer) 来 调用异步任务启动celery服务定义一个获取结果的类定时任…

Activiti6

一、Activiti介绍与搭建开发环境 二、运行官方例子 三、编写第一个Activiti程序 3.1 流程部署 代码 /*** 部署流程* 涉及到的表有&#xff1a; * 1.act_ge_bytearray 两条记录&#xff0c;一条xml数据&#xff0c;一条png图片信息 * 2.act_re_deployment 一条记录 * 3.a…

BBS项目day02、注册、登录(登录之随机验证码)、退出登录、密码加密加盐、首页(导航条、模态框,修改密码)

一、注册 1.注册之前端页面 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>注册页面</title><!--动态引入文件-->{% load static %}<script src"{% static js/jquery.min.js %…

深度开发者故事 | 华为云API Explorer 自动化运维的得力助手

华为云API Explorer为开发者提供一站式API解决方案统一平台&#xff0c;集成华为云服务所有开放API&#xff0c;支持全量快速检索、可视化调试、帮助文档、代码示例等能力&#xff0c;帮助开发者快速学习API&#xff0c;使用API开发代码实现自动化运维。 体验通道&#xff1a;…

企业数字化时代,数据要素是什么?有什么作用价值?

信息化、数字化社会加速到来&#xff0c;企业纷纷开始布局数字化转型&#xff0c;数字经济将成为未来世界中最为火热的新型经济。 数据报表作为企业数字化转型的代表节点之一&#xff0c;未来会成为数字化企业的基本配置。 要想企业全身心投入数据报表体系建设中&#xff0c;…

个性化定制界面与极简版原装界面:我们为什么选择个性化?

个性化定制界面和极简版原装界面&#xff0c;哪一个你用起来更加顺手呢&#xff0c;相比之下你更喜欢哪一个&#xff1f;来聊一聊原因吧&#xff01; 随着科技的不断发展&#xff0c;人们对于界面设计也有了越来越高的要求。而在界面设计领域&#xff0c;个性化定制界面和极简版…

rust入门系列之Rust介绍及开发环境搭建

Rust教程 Rust基本介绍 网站: https://www.rust-lang.org/ rust是什么 开发rust语言的初衷是&#xff1a; 在软件发展速度跟不上硬件发展速度&#xff0c;无法在语言层面充分的利用硬件多核cpu不断提升的性能和 在系统界别软件开发上&#xff0c;C出生比较早&#xff0c;内…

Qt表格数据处理

概述 在Qt表格数据处理中&#xff0c;涉及到如下几个具体的类&#xff1a; QAbstractItemModel&#xff1a;这是一个抽象基类&#xff0c;定义了模型&#xff08;Model&#xff09;的接口规范。所有的模型类都应该派生自QAbstractItemModel&#xff0c;并实现它的纯虚函数&…

学习电工有哪些好处?在哪学习电工?

学习电工有哪些好处&#xff1f;在哪学习电工&#xff1f;学习电工可以做什么&#xff1f;优势有哪些&#xff1f; 学习电工可以做什么&#xff1f;学习电工有哪些好处&#xff1f; 就业去向&#xff1a;可在企业单位从事电气设备的安装、调试、操作、维护等工作&#xff0c;…

GDP药品供应管理规范确保冷链运输合规性

药品运输面临许多挑战&#xff0c;包括产品可能因暴露在不利条件下导致降解。药品供应管理规范 (GDP) 运输指南在确保整个运输链的冷链合规性方面发挥着关键作用。 药品的分销与生产和制造生产线一样精细和敏感。自全球物流公司成立以来&#xff0c;配送过程中对受控环境的需求…

运维自动化与Cobbler服务部署

运维自动化与Cobbler服务部署 一.Cobbler简介1.1.简介1.2.Cobbler的下属服务1.3.工作流程 二.Cobbler安装2.1.安装epel源2.2.安装Cobbler及其相关的服务和组件 三.Cobbler配置3.1.Cobbler配置文件及各目录情况3.2.配置及启动cobblerd服务 四.Cobbler使用4.1用法4.2配置linux发行…

IIC总线原理

1. IIC总线概述 IIC总线 IIC总线是Philips公司在八十年代初推出的一种串行、半双工总线 主要用于近距离、低速的芯片之间的通信&#xff1b;IIC总线有两根双向的信号线一根数据线SDA用于收发数据&#xff0c;一根时钟线SCL用于通信双方时钟的同步&#xff1b;IIC总线硬件结构简…

elementPlus——图标引入+批量注册全局组件——基础积累

因为我们要根据路由配置对应的图标&#xff0c;也要为了后续方便更改。因此我们将所有的图标注册为全局组件。&#xff08;使用之前将分页器以及矢量图注册全局组件的自定义插件&#xff09;&#xff08;所有图标全局注册的方法element-plus文档中已给出&#xff09; 全局注册…

vue中 .env .env.development .env.production 详细说明

1.配置文件有&#xff1a; .env 全局默认配置文件&#xff0c;不论什么环境都会加载合并 .env.development 开发环境下的配置文件 .env.production 生产环境下的配置文件 2.命名规则&#xff1a; 属性名必须以VUE_APP_开头&#xff0c;比如VUE_APP_XXX 3.关于文件的加载&#x…

kubernetes基于helm部署minecraft

kubernetes基于helm部署minecraft kubernetes容器集群中部署minecraft server服务器。 项目地址&#xff1a;https://github.com/itzg/minecraft-server-charts 官方文档&#xff1a;https://itzg.github.io/minecraft-server-charts/ 前置要求&#xff1a; 已准备kubern…

国标GB28181视频平台EasyGBS国标平台的应用场景以及方案实现

EasyGBS国标视频融合云平台基于端-边-云一体化架构&#xff0c;部署轻量简单、功能灵活多样&#xff0c;平台可支持多协议&#xff08;GB28181/RTSP/Onvif/海康SDK/Ehome/大华SDK/RTMP推流等&#xff09;、多类型设备接入(IPC/NVR/监控平台)&#xff0c;在视频能力上&#xff0…