【编程实践】使用pcl提取给定点云的三维边界点

news2024/11/28 13:40:20

1 执行结果

原始点云可视化
在这里插入图片描述
搜索半径设置为0.1m
在这里插入图片描述
搜索半径设置为0.05m
在这里插入图片描述

2 代码实现

// boundary

#include <pcl/point_types.h>
#include <pcl/features/normal_3d.h>
#include <pcl/features/boundary.h>
#include <pcl/io/file_io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/io/io.h>
using namespace std;
int main() {
	// 加载点云数据
	std::cout << "Process start" << endl;
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	//pcl::io::loadPCDFile<pcl::PointXYZ>(".\\input\\KuangshanCut_S85_cp30.pcd", *cloud);
	//数据输入路径
	pcl::io::loadPCDFile<pcl::PointXYZ>(".\\input\\cloud_in.pcd", *cloud);
	//auto start_tm = std::chrono::high_resolution_clock::now();
	// 估计法线
	pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne;
	ne.setInputCloud(cloud);
	pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>);
	ne.setSearchMethod(tree);
	pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>);
	ne.setRadiusSearch(0.08);
	ne.compute(*normals);
	std::cout << " Wait... " << endl;
	// 计算边界
	pcl::PointCloud<pcl::Boundary>::Ptr boundaries(new pcl::PointCloud<pcl::Boundary>);
	pcl::PointCloud<pcl::PointXYZ>::Ptr boundary_points(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::PointCloud<pcl::Normal>::Ptr boundary_normals(new pcl::PointCloud<pcl::Normal>);
	pcl::PointCloud<pcl::PointXYZ>::Ptr non_boundary_points(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::PointCloud<pcl::Normal>::Ptr non_boundary_normals(new pcl::PointCloud<pcl::Normal>);
	pcl::BoundaryEstimation<pcl::PointXYZ, pcl::Normal, pcl::Boundary> est;
	est.setInputCloud(cloud);
	est.setInputNormals(normals);
	est.setRadiusSearch(0.1);
	est.setSearchMethod(tree);
	est.compute(*boundaries);
	// 获取边界点和法线
	for (size_t i = 0; i < cloud->size(); ++i) {
		if (boundaries->points[i].boundary_point) {
			boundary_points->push_back(cloud->points[i]);
			boundary_normals->push_back(normals->points[i]);
		}
		else {
			non_boundary_points->push_back(cloud->points[i]);
			non_boundary_normals->push_back(normals->points[i]);
		}
	}
	// 保存边界点云和非边界点云,数据输出路径
	pcl::io::savePCDFile<pcl::PointXYZ>(".\\output\\cloud_out_boundary_r01_points.pcd", *boundary_points);
	pcl::io::savePCDFile<pcl::PointXYZ>(".\\output\\cloud_out_nonboundary_r01_points.pcd", *non_boundary_points);
	//计算程序执行时间
	/*auto end_tm = std::chrono::high_resolution_clock::now();
	std::chrono::duration<double> dura = end_tm - start_tm;
	double execu_tm = dura.count();
	std::cout<<" The time of software executionTime"<<execu_tm<<" s"<<endl;*/
	std::cout << "Process Done!" << endl;
	return 0;
}

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

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

相关文章

面对 HR 的空窗期提问,你会如何回答?

原文链接 面对 HR 的空窗期提问&#xff0c;你会如何回答&#xff1f; 你是否有过这样的经历&#xff0c;在一段时间内&#xff0c;你离开了工作岗位&#xff0c;或者在寻找新的工作机会&#xff0c;这段时间我们称之为“空窗期”。 对于这段时间&#xff0c;我们该如何看待&…

idea中的debug界面上没有进入方法的红色按钮

问题描述&#xff1a; 这里缺少进入系统方法的红色按钮。 问题解决方法&#xff1a; 在上面图片红框范围内右键点击进入。 点击号 搜索 ‘force’ 添加即可完成 上下拖动即可调整界面按钮顺序

I2C总线协议

什么是I2C I2C&#xff08;Inter-Integrated Circuit&#xff09;&#xff0c;也可以叫IIC、I2C&#xff0c;译作集成电路总线&#xff0c;是两线式串行通信总线&#xff0c;用于设备间的通讯等&#xff0c;标准情况下最高传送速率达100Kbps。顾名思义&#xff0c;I2C通讯只需…

如何用示波器测量放电波形

示波器那么重要&#xff0c;你确定不进来看看&#xff1f;_哔哩哔哩_bilibili 5分钟搞明白示波器的 带宽 采样率 存储深度_哔哩哔哩_bilibili 年轻人的第一台示波器选手持还是台式&#xff1f;_哔哩哔哩_bilibili 以示波器为例&#xff0c;测量某设备波形。 1、开机&#xff…

在Excel中使用SQL

说明: Excel中许多函数虽然能代替SQL的功能&#xff0c;但是比起SQL&#xff0c;还是有一些逊色&#xff0c;特意做了这个教程&#xff0c;主要有: 分组统计&#xff0c;Excel中用数据透视表&#xff0c;SQL中用Group By去重&#xff0c;Excel中可以用条件标识功能(开始->条…

Lyft 计划开源人工智能算法测试工具

共享租车公司 Lyft 投入大量时间和资源开发工具来测试机器学习算法&#xff0c;近日 Lyft 宣布将向公众开源这些工具。正式投入生产环境之前&#xff0c;一款机器学习算法的测试和更替非常耗费时间&#xff0c;Lyft 开发的测试工具&#xff0c;是属于一种模拟器&#xff0c;能够…

LLM 03-大模型的有害性

LLM 03-大模型的有害性 3.1 引言1 在这次内容中&#xff0c;我们将开始探讨大型语言模型的有害性&#xff08;危害&#xff09;。在这门课程中&#xff0c;我们将涵盖几种这些危害: 性能差异社会偏见和刻板印象有害信息虚假信息 另外在之后的课程中会讲述其他更多层面的危害…

内存管理机制

aCoral内存管理机制 aCoral内存管理机制在伙伴系统基础上&#xff0c;采用了位图法方式提高内存分配和回收速度的确定性&#xff0c;更能满足系统实时性的需求。 aCoral内存管理机制分为两级&#xff0c;上一级采用改进的伙伴系统&#xff0c;负责确定要分配的内存的大小&…

莫比乌斯召回系统介绍

当前召回系统只能召回相关性高的广告&#xff0c;但不能保证该广告变现能力强。莫比乌斯做了如下两点创新&#xff1a; 在召回阶段&#xff0c;引入CPM等业务指标作为召回依据在召回阶段&#xff0c;引入CTR模型&#xff0c;从而召回更多相关性高且变现能力强的广告 参考 百度…

【ROS】Ubuntu20.04+ROS Noetic 配置PX4-v1.12.2和Gazebo11联合仿真环境【教程】

【ROS】Ubuntu20.04ROS Noetic 配置PX4-v-v1.12.2和Gazebo11联合仿真环境【教程】 文章目录 【ROS】Ubuntu20.04ROS Noetic 配置PX4-v-v1.12.2和Gazebo11联合仿真环境【教程】0. 安装UbuntuROS1. 安装依赖2. 安装QGC地面站3. 配置PX4-v1.12.23.1 安装PX43.2 测试PX4是否成功安装…

大数据Flink(八十):Checkpoint的状态后端和重启策略

文章目录 Checkpoint的状态后端和重启策略 一、状态后端

第21章_瑞萨MCU零基础入门系列教程之事件链接控制器ELC

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

Django:二、模板、静态文件及请求相应

一、HTML 在app01中创建文件夹“templates”&#xff0c;在templates中创建HTML文件。 二、静态文件 创建静态文件夹&#xff0c;并把相关包导入 在HTML中引入Jquery等包&#xff0c;需要完成几步&#xff1a; 三、模板语法 1、字符串和列表 2、字典 3、if语句

TouchGFX之缓存位图

位图缓存是专用RAM缓冲区&#xff0c;应用可将位图保存&#xff08;或缓存&#xff09;在其中。 如果缓存了位图&#xff0c;在绘制位图时&#xff0c;TouchGFX将自动使用RAM缓存作为像素来源。位图缓存在许多情况下十分有用。 从RAM读取数据通常比从闪存读取要快&#xff08;特…

济南某类国企单位面试复盘

题目 背景1. 多线程有哪些基本参数&#xff1f;2. 线程池是如何实现的&#xff1f;3. ThreadLocal是怎么存的&#xff1f;4. JVM内存模型&#xff08;JDK1.8&#xff09;了解吗&#xff1f;5. 直接内存是用来存什么的&#xff1f;6.NIO采用的是Linux哪种IO模型7.常用的限流算法…

linux驱动开发--day4(字符设备驱动注册内部流程、及实现备文件和设备的绑定下LED灯实验)

一、字符设备驱动注册的内部过程 1.分配struct cdev对象空间 2.初始化struct cdev对象 3.注册cdev对象 二、注册字符设备驱动分步实现 1.分配字符设备驱动对象 2.字符设备驱动对象初始化 3.设备号的申请 4.根据申请的设备号和驱动对象注册驱动 三、open函数回调驱动中…

了解冒泡排序

package com.mypackage.array;import java.util.Arrays;public class Demo07 {public static void main(String[] args) {int[] a {3,2,6,7,4,5,6,34,56,7};int[] sort1 sort1(a); //调用我们自己写的排序方法后&#xff0c;返回一个排序后的数组System.out.println(Array…

密码学概述

密码学的概念 密码&#xff0c;最初的目的是用于对信息加密&#xff0c;计算机领域的密码技术种类繁多。但随着密码学的运用&#xff0c;密码还被用于身份认证、防止否认等功能上。密码是通信双方按约定的法则进行信息特殊变换的一种重要保密手段。依照这些法则&#xff0c;变…

5.k8s jenkins集成k8s一键发布案例

文章目录 前言一、jenkins配置1.1 jenkins配置git1.2 jenkins 配置maven1.3 jenkins配置java 二、jenkins流水线配置2.1.新增项目2.2 springboot项目配置git仓库2.3 springboot项目配置maven打包2.4 系统配置 ssh到hadoop1配置&#xff0c;也就是k8s的master节点2.6 springboot…

Handler原理

Handler原理 前言1. Handler作用2. Handler概述3. 核心类 一、Handler源码分析1.创建Handler2.发送消息3.取消息4.消息处理5.线程切换 二、相关内容1.Handler原理2.epoll机制2.1什么是epoll机制&#xff1f;2.2 select/poll/epoll2.3 Handler中epoll是如何实现消息队列的阻塞和…