利用PDAL2.7.1 实现点云滤波

 利用PDAL2.7.1 实现点云滤波

      本文介绍利用PDAL实现点云滤波方法,包含pipeline命令行运行、C++代码两种方法,C++代码分别介绍对点云文件进行滤波、点云全部在内存中进行滤波的pdal两种调用方法。并简单探究pdal的设计结构。


目录

  • 1 pipeline命令调用方法
  • 2 文件滤波,C++调用方法
  • 3 全内存,C++调用方法
  • 4 pdal设计结构简单探究

  • 1 pipeline命令调用方法

       参照pdal官网介绍,以csf滤波为例:filters.csf — pdal.io

       直接调用pdal.exe pipeline filter.json 即可运行,实现点云滤波,其中filter.json中的内容如上图所示,其中"input.las"、"output.laz"分别为输入和输出点云文件,可更具本地具体路径进行相应的修改。滤波结果如下图所示:

  • 2 文件滤波,C++调用方法
// 添加读取点云文件的Stage
	pdal::StageFactory factory;
	pdal::Stage* reader = factory.createStage("readers.las");
	pdal::Options options_reader; 
	options_reader.add("filename", "test.las");
	reader->addOptions(options_reader);
	// 添加统计异常值滤波器的Stage
	pdal::Stage* csFilter = factory.createStage("filters.csf");
	csFilter->setInput(*reader);
	// 添加写入滤波后的点云文件的Stage
	pdal::Stage* writer = factory.createStage("writers.las");
	pdal::Options options_writer;
	options_writer.add("filename", "test2.las");
	writer->setOptions(options_writer);
	writer->setInput(*csFilter);
	pdal::PointTable table;

	// 添加维度(Dimensions)到PointTableRef
	table.layout()->registerDim(pdal::Dimension::Id::X);
	table.layout()->registerDim(pdal::Dimension::Id::Y);
	table.layout()->registerDim(pdal::Dimension::Id::Z);

	writer->prepare(table);
	writer->execute(table);

	factory.destroyStage(reader);
	factory.destroyStage(csFilter);
	factory.destroyStage(writer);

        具体代码如上,通过pdal::StageFactory创建对应的Stage,其中las文件的读取、滤波、写入都为一个Stage。如上代码分别创建"readers.las"、"filters.csf"、"writers.las"创建Stage对象,其实质为pdal::LasReader、pdal::CSFilter、pdal::LasWriter对象,然后将三个对象串接(前一个对象设置为后一个对象的Input),最后执行(execute)最后一个对象。

  • 3 全内存,C++调用方法
	pdal::StageFactory factory;
	pdal::PointTable table;
	table.layout()->registerDim(pdal::Dimension::Id::X);
	table.layout()->registerDim(pdal::Dimension::Id::Y);
	table.layout()->registerDim(pdal::Dimension::Id::Z);
	pdal::PointViewPtr view(new pdal::PointView(table));
	view->setField(pdal::Dimension::Id::X, 0, 1.0);
	view->setField(pdal::Dimension::Id::Y, 0, 2.0);
	view->setField(pdal::Dimension::Id::Z, 0, 3.0);
	view->setField(pdal::Dimension::Id::X, 1, 4.0);
	view->setField(pdal::Dimension::Id::Y, 1, 5.0);
	view->setField(pdal::Dimension::Id::Z, 1, 6.0);
	view->setField(pdal::Dimension::Id::X, 2, 7.0);
	view->setField(pdal::Dimension::Id::Y, 2, 8.0);
	view->setField(pdal::Dimension::Id::Z, 2, 9.0);
	pdal::Stage* csFilter = (factory.createStage("filters.csf"));
	csFilter->prepare(table);
	pdal::StageWrapper fw;
	fw.initialize(*csFilter, table);
	fw.ready(*csFilter, table);
	fw.run(*csFilter, view);
	fw.done(*csFilter, table);
	pdal::Stage* writer = factory.createStage("writers.las");
	pdal::Options options_writer;
	options_writer.add("filename", "4-1_out.las");
	writer->setOptions(options_writer);
	writer->prepare(table);
	pdal::StageWrapper ww;
	ww.initialize(*writer, table);
	ww.ready(*writer, table);
	ww.run(*writer, view);
	ww.done(*writer, table);
	factory.destroyStage(csFilter);
	factory.destroyStage(writer);

        采用pdal::StageWrapper执行相应的Stage。采用pdal::PointView类设置点的坐标,点全部在内存中。

  • 4 pdal设计结构简单探究

        todo:调试pipeline执行过程,了解类之间关系。

  文章中完整的代码下载地址如下(缺下载积分不得已而为之):https://download.csdn.net/download/CPWWHSU/89254289

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

R语言4版本安装mvstats(纯新手)

首先下载mvstats.R文件 下载mvstats.R文件点此链接:https://download.csdn.net/download/m0_62110645/89251535 第一种方法 找到mvstats.R的文件安装位置(R语言的工作路径) getwd() 将mvstats.R保存到工作路径 在R中输入命令 source(&qu…

飞腾D2000+X100 TYPE6全国产核心板

飞腾D2000X100 TYPE6核心板 产品概述 飞腾D2000X100 TYPE6核心板为增强型自主控制器核心板,其核心芯片CPU采用飞腾D2000/8核工业版CPU、飞腾桥片X100、双通道DDR4L插槽、PHY芯片等。 产品特点 l 基于飞腾D2000X100桥片 l 丰富的PCIE扩展资源,一路PCIE…

C++入门系列-函数重载

🌈个人主页: 羽晨同学 💫个人格言:“成为自己未来的主人~” 函数重载 自然语言当中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载了。 函数重载的概念 函数重载&#x…

A4的PDF按A3打印

先用办公软件打开,比如WPS。 选择打印-属性。 纸张选A3,如果是双面打印,选短边装订,然后在版面-页面排版-每张页数(N合1)选2。 不同打印机的具体配置可能不一样,但大体都是这个套路。

rocketmq dashboard控制台中topic状态无法展示

现象 在使用rocketmq控制台查看topic状态和订阅状态时,出现错误和没有信息的情况。 原因 rocketmq控制台版本问题,最新版本为1.0.1,支持rocketmq5版本,如果使用rocketmq4版本的服务无法兼容对应的数据。同理1.0.0版本也无法兼容ro…

中兴ZXV10 B860AV2.1机顶盒刷机

移动的电视盒子如果不续费,连桌面都进不去,趁着五一有空把系统刷了。整体上比较顺利。 注意这个盒子只有两个螺丝,盒子上已经标识,如上图左上角和右下角。盒子里面有卡扣,卸掉螺丝直接扣是很难打开的,需要用…

【CLion】clion无法加载或找不到cmakekists文件

一、问题表象 最近工作中,在git pull远程仓库最新版本程序后,平时打开CLion自动加载的工程CMakeLists文件突然失效(显示找不到可编译的文件),无法debug程序。 二、原因分析 基于平时的编码经验和之前git pull也出现…

深度学习之基于CIFAR10图像分类可视化

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 深度学习之基于CIFAR-10图像分类可视化项目简介 一、项目背景 随着深度学习和计算机视觉技术的飞速发展&#xff…

边缘计算含义与应用简析

边缘计算概述 边缘计算使数据存储和处理靠近生成或收集数据的位置,而不是在位于数千公里的服务器上。它将通过保持灵活性在边缘无缝可靠地部署服务。它比云计算更安全,因为不需要传输数据。因此,在将数据从边缘移动到云端时,不用…

基于React实现B站评论区

今天继续来学习一下React,使用React实现B站评论区,如下图: 在使用React开发类似B站评论区的功能时,我们需要考虑以下几个关键点来构建一个基本的评论系统: 1. 设计组件结构 首先,设计组件结构是关键。至少…

什么是弹性云服务器(ECS)

弹性云服务器(Elastic Cloud Server,ECS)是由CPU、内存、操作系统、云硬盘组成的基础的计算组件。弹性云服务器创建成功后,您就可以像使用自己的本地PC或物理服务器一样,在云上使用弹性云服务器。 云服务器ECS&#x…

Re71:读论文 Sequence to Sequence Learning with Neural Networks

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文名称:Sequence to Sequence Learning with Neural Networks ArXiv下载地址:https://arxiv.org/abs/1409.3215 本文是2014年NeurIPS论文(那时候这个会还叫NIPS&#xf…

HBase的简单学习四

一 HBase的进阶 1.1 hbase的写流程 Hbase读取数据的流程: 1)是由客户端发起读取数据的请求,首先会与zookeeper建立连接 2)从zookeeper中获取一个hbase:meta表位置信息,被哪一个regionserver所管理着 hbase:meta表…

C语言:循环结构

循环结构 1. for循环概念举例示例结果分析 补充 2. while循环概念举例示例结果分析补充 3. do-while循环概念举例示例结果分析 补充 4.循环控制举例示例结果分析 C语言中的循环结构是一种重要的编程构造,它允许我们重复执行一段代码,直到满足某个条件为止…

Hive优化以及相关参数设置

1.表层面设计优化 1.1 表分区 分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。Hive 中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。在查询时通过 WHERE 子句中的表达式选择查询所需要…

Angular基础-搭建Angular运行环境

这篇文章介绍了在Angular项目中进行开发环境搭建的关键步骤。包括node.js安装和配置、安装Angular CLI工具、安装angular-router、创建Angular项目等步骤。这篇文章为读者提供了清晰的指南,帮助他们快速搭建Angular开发环境,为后续的项目开发奠定基础。 …

Python中动画显示与gif生成

1. 动画生成 主要使用的是 matplotlib.animation ,具体示例如下: import matplotlib.pyplot as plt import matplotlib.animation as animation import numpy as np fig, ax plt.subplots() t np.linspace(0, 3, 40) g -9.81 v0 12 z g * t**2 / …

【项目学习01_2024.05.02_Day04】

学习笔记 4 课程分类查询4.1需求分析4.2 接口定义4.3 接口开发4.3.1 树型表查询4.3.2 开发Mapper 4 课程分类查询 4.1需求分析 有课程分类的需求 course_category课程分类表的结构 这张表是一个树型结构,通过父结点id将各元素组成一个树。 利用mybatis-plus-gen…

第十五届蓝桥杯Java软件开发大学B组自我经验小结

自我介绍 23届大一 双非 计院科班 软件工程 江苏人在吉林上大学 Java蒟蒻 在学校的宣传下 有幸参加了第十五届蓝桥杯Java大学b组省赛 蓝桥杯说明 就是一个算法比赛吧 考试时间9.00到1.00 四小时 带准考证和身份证和笔 草稿纸会发 赛制是IOC就是不会给任何反馈 就是你…

IDEA 创建Servlet-HelloWorldServlet

servlet 1.创建空项目2.配置web项目3.配置Tomcat4.加载Tomcat包5.创建HelloWorldServlet类6.配置web.xml7.运行get与post请求 1.创建空项目 2.配置web项目 3.配置Tomcat 4.加载Tomcat包 5.创建HelloWorldServlet类 public class controller extends HttpServlet {Override//get…
最新文章