PCL 计算点云AABB包围盒

目录

一、概述

1.1原理

1.2实现步骤

1.3应用场景

二、代码实现

2.1关键函数

2.1.1 计算AABB

2.1.2 可视化AABB

2.2完整代码

三、实现效果


PCL点云算法汇总及实战案例汇总的目录地址链接:

PCL点云算法与项目实战案例汇总(长期更新)


一、概述

        点云的包围盒(Bounding Box)是用于描述点云在三维空间中的边界范围的一种简单几何体。在三维点云处理中,包围盒可以用于碰撞检测、快速计算点云边界等应用。AABB(Axis-Aligned Bounding Box)是一种轴对齐的包围盒,始终与坐标轴对齐,因此计算起来较为简单高效。

1.1原理

        AABB 包围盒是指与坐标轴对齐的最小矩形框,它是通过获取点云中每个坐标轴的最小值和最大值来确定的。具体计算方式如下:

  • 对于给定的点云,计算 x、y、z 三个方向的最小值和最大值。
  • 包围盒的六个面分别由这些最大和最小值决定,从而包裹整个点云。

AABB 的计算公式为:

  • 最小点(min_x, min_y, min_z)和最大点(max_x, max_y, max_z)分别为点云中 x、y、z 方向的最小和最大坐标值。

1.2实现步骤

  1. 读取点云数据。
  2. 使用 PCL 的 getMinMax3D 函数来计算点云的 AABB。
  3. 可视化原始点云和 AABB 。

1.3应用场景

  1. 碰撞检测: AABB 可以用于简化复杂几何形状的碰撞检测。
  2. 物体定位与分割: 利用 AABB 来快速确定物体的边界范围,便于进一步的处理。
  3. 加速渲染: 在渲染中可以使用 AABB 来快速剔除不可见的对象。

二、代码实现

2.1关键函数

2.1.1 计算AABB

PCL 提供了 getMinMax3D 函数,用于计算点云的最小点和最大点,这些点构成了 AABB。

pcl::getMinMax3D(*cloud, min_point, max_point);

2.1.2 可视化AABB

通过 PCL 可视化库的 addCube 函数可以在视图中添加 AABB 立方体。

viewer->addCube(min_point.x, max_point.x, min_point.y, max_point.y, min_point.z, max_point.z, 1.0, 0.0, 0.0, "AABB");
viewer->setShapeRenderingProperties(pcl::visualization::PCL_VISUALIZER_LINE_WIDTH, 2, "AABB");

2.2完整代码

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/common/common.h>
#include <pcl/visualization/pcl_visualizer.h>// 计算点云的 AABB 并可视化
void computeAndVisualizeAABB(pcl::PointCloud<pcl::PointXYZ>::Ptr& cloud)
{// --------------------- 计算 AABB ---------------------pcl::PointXYZ min_point, max_point;pcl::getMinMax3D(*cloud, min_point, max_point);// --------------------- 创建可视化器 ---------------------pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("AABB Viewer"));// 设置第一个视口,显示原始点云int vp_1, vp_2;viewer->createViewPort(0.0, 0.0, 0.5, 1.0, vp_1);viewer->setBackgroundColor(1.0, 1.0, 1.0, vp_1);viewer->addText("Original Point Cloud", 10, 10, "vp1_text", vp_1);pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> cloud_color_handler(cloud, 255, 0, 0);  // 红色viewer->addPointCloud(cloud, cloud_color_handler, "original_cloud", vp_1);// 在第一个视口中添加 AABB,并设置透明度//viewer->addCube(min_point.x, max_point.x, min_point.y, max_point.y, min_point.z, max_point.z, 1.0, 0.0, 0.0, "AABB", vp_1);//viewer->setShapeRenderingProperties(pcl::visualization::PCL_VISUALIZER_LINE_WIDTH, 2, "AABB");//viewer->setShapeRenderingProperties(pcl::visualization::PCL_VISUALIZER_OPACITY, 0.1, "AABB");  // 设置立方体的透明度为 50%// 设置第二个视口,显示带有 AABB 的点云viewer->createViewPort(0.5, 0.0, 1.0, 1.0, vp_2);viewer->setBackgroundColor(0.98, 0.98, 0.98, vp_2);viewer->addText("Point Cloud with AABB", 10, 10, "vp2_text", vp_2);viewer->addPointCloud(cloud, cloud_color_handler, "cloud_with_AABB", vp_2);viewer->addCube(min_point.x, max_point.x, min_point.y, max_point.y, min_point.z, max_point.z, 0.0, 1.0, 0.0, "AABB_2", vp_2); // 绿色立方体viewer->setShapeRenderingProperties(pcl::visualization::PCL_VISUALIZER_LINE_WIDTH, 2, "AABB_2");viewer->setShapeRenderingProperties(pcl::visualization::PCL_VISUALIZER_OPACITY, 0.1, "AABB_2");  // 设置立方体的透明度为 50%// 添加坐标系viewer->addCoordinateSystem(1.0);while (!viewer->wasStopped()){viewer->spinOnce(100);}
}int main(int argc, char** argv)
{// -----------------------------读取点云数据---------------------------------pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);if (pcl::io::loadPCDFile<pcl::PointXYZ>("person2.pcd", *cloud) < 0){PCL_ERROR("点云文件不存在");return -1;}// -----------------------------计算并可视化 AABB----------------------------computeAndVisualizeAABB(cloud);return 0;
}

三、实现效果

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

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

相关文章

ChatGPT国内中文版镜像网站整理合集(2024/9/30)

一、GPT中文镜像站 ① yixiaai.com 支持GPT4、4o以及o1&#xff0c;支持MJ绘画 ② chat.lify.vip 支持通用全模型&#xff0c;支持文件读取、插件、绘画、AIPPT ③ AI Chat 支持GPT3.5/4&#xff0c;4o以及MJ绘画 1. 什么是镜像站 镜像站&#xff08;Mirror Site&#xff…

如何实现不同VLAN间互通?

问题描述 客户要求不同VLAN的PC机互通&#xff0c;如下图拓扑所示。 此外&#xff0c;仅允许在设备 LSW3 上进行配置修改。 分析 由于所有的PC都在同一个网段&#xff0c;当任何一个设备想要和另一个设备通信时&#xff0c;它会首先根据数据交互的流程广播一个ARP请求报文来获…

微服务架构Gin-etcd-gRPC接合的入门实践

最近在学习微服务&#xff0c;先后学习gRPC、etcd。学习过这两个技术之后&#xff0c;结合Gin框架&#xff0c;简单实现了一个微服务的小demo了。 以下是各技术在微服务架构中的功能。 Gin框架作为网关&#xff0c;外部请求的统一出口。负责将外部的HTTP请求转化为RPC请求&…

量子数字签名概述

我们都知道&#xff0c;基于量子力学原理研究密钥生成和使用的学科称为量子密码学。其内容包括了量子密钥分发、量子秘密共享、量子指纹识别、量子比特承诺、量子货币、秘密通信扩展量子密钥、量子安全计算、量子数字签名、量子隐性传态等。虽然各种技术发展的状态不同&#xf…

YOLOv8实战TT100K中国交通标志检测【数据集+YOLOv8模型+源码+PyQt5界面】

YOLOv8实战TT100k交通标志识别 文章目录 研究背景资源获取1.前言1.1 YOLO 系列&#xff1a;中国交通标志检测领域的璀璨明星1.2 Transformer与注意力机制&#xff1a;为中国交通标志检测注入新活力1.3 中国交通标志检测技术&#xff1a;迎接挑战&#xff0c;砥砺前行1.4 YOLOv8…

『网络游戏』协程回调事件实现Tips弹窗【09】

创建脚本&#xff1a;DynamicWnd.cs 编写脚本&#xff1a;DynamicWnd.cs 修改脚本&#xff1a;WindowRoot.cs - 适配修改错误 修改脚本&#xff1a;GameRoot.cs 拖拽框选 运行项目 - 显示Tips弹窗 本章结束

3.C语言入门:解锁基础概念,动手实现首个C程序

C语言入门&#xff1a;解锁基础概念&#xff0c;动手实现首个C程序 文章目录 C语言入门&#xff1a;解锁基础概念&#xff0c;动手实现首个C程序前言一、源文件和头文件1.1 如何新建项目1.2 添加头文件和源文件 二、第一个C语言程序1.创建一个源文件2.写代码3.运行代码 三、mai…

水库大坝安全监测预警系统守护大坝安全卫士

一、系统背景 近年来&#xff0c;受全球气候变化和人类活动影响&#xff0c;极端天气发生频度强度增加&#xff0c;加之我国城市化进程中&#xff0c;水库下游人口聚集、基础设施密集&#xff0c;对水库工程安全运行提出了新的更高要求。“十四五”以来我国建成并投入使用37593…

微服务架构---认识Zuul

目录 认识Zuul简单的例子 第一个Zuul程序步骤1&#xff1a;创建父工程zuul-1步骤2&#xff1a;创建HystrixController类步骤3&#xff1a;搭建服务消费者eureka-consumer项目&#xff08;1&#xff09;创建一个config包&#xff0c;在config包下新建配置类RestConfig&#xff0…

跨境卖家品牌出海要注意哪些方面

随着目前互联网的发展&#xff0c;市场由线下扩张到全国&#xff0c;再扩张到了全球&#xff0c;但是海外市场和国内并不相同跨境卖家品牌想要出海&#xff0c;需要注意多个方面&#xff0c;以确保能够在国际市场上成功立足并发展。以下是一些关键点&#xff1a; 首先想得拥有…

基于matlab的语音信号处理

摘要 利用所学习的数字信号处理知识&#xff0c;设计了一个有趣的音效处理系统&#xff0c;首先设计了几种不同的滤波器对声音进行滤波处理&#xff0c;分析了时域和频域的变化&#xff0c;比较了经过滤波处理后的声音与原来的声音有何变化。同时设计实现了语音的倒放&#xf…

【HarmonyOS开发笔记 2 】 -- ArkTS语法中的变量与常量

ArkTS是HarmonyOS开发的编程语言 ArkTS语法中的变量 【语法格式】&#xff1a; let 变量名: 类型 值 let&#xff1a;是定义变量的关键字类型&#xff1a; 值数据类型&#xff0c; 常用的数据类型 字符型&#xff08;string&#xff09;、数字型&#xff08;number&#xf…

最新发布!Windows 11 24H2 纯净版:无捆绑,即刻升级!

今日&#xff0c;系统之家小编给大家带来最新的Windows11 24H2纯净版系统下载&#xff0c;该版本系统基于微软官方Windows11 24H2 26100.1882专业版进行离线制作&#xff0c;删除各种流氓软件&#xff0c;确保系统安全纯净&#xff0c;大家日常操作更放心。系统的兼容性出色&am…

人工智能的未来:从知识廉价时代到AI主导国家模式

随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;知识的获取和使用正变得更加普及与廉价。这不仅引发了技术领域的深刻变革&#xff0c;也将对全球社会经济模式产生广泛影响。特别是在《时代》杂志对风险投资巨头维诺德科斯拉&#xff08;Vinod Khosla&#…

免费送源码:Apache+B/S+Springboot+MySQL 商城综合项目自动化系统 计算机毕业设计原创定制

摘 要 目前电商系统商城项目管理极其频繁,迫切地需要自动化测试来代替人工繁琐而又重复的劳动。自动化测试相关的研究已经很多,但多数只是针对某一方面,比如单一接口或者单一页面或者性能等,而缺乏将接口、页面、持续集成系统和缺陷管理系统整合的自动化测试平台。本研究采用混…

解决雪花ID在前端精度丢失问题

解决雪花ID在前端精度丢失问题 在现代分布式系统中&#xff0c;雪花算法&#xff08;Snowflake&#xff09;被广泛用于生成唯一的ID。这些ID通常是Long类型的整数。然而&#xff0c;当这些ID从后端传递到前端时&#xff0c;JavaScript的精度限制可能会导致精度丢失&#xff0c…

No.14 笔记 | XSS漏洞:原理、类型与防御策略

一、HTML和JavaScript基础 1. HTML基础 HTML概述&#xff1a;超文本标记语言&#xff0c;用于实现页面跳转和显示数据。结构标准&#xff1a;包括<!doctype html>声明文档类型&#xff0c;<html>根标签&#xff0c;<head>头部标签和<body>主体标签等。…

鸿鹄企业电子招投标采购系统视频详解|在线招投标|评标|竞标|单一采购|询价|邀标|在线开标|招标公告发布|评审专家|招标代理机构|招投标采购系统视频讲解

鸿鹄企业电子招投标采购系统视频详解|在线招投标|评标|竞标|单一采购|询价|邀标|在线开标|招标公告发布|评审专家|招标代理机构|招投标采购系统视频讲解 鸿鹄企业招投标采购系统视频讲解地址企业软件定制擅长跟我学习springcloud,honghu b2b2c,知识付费,等方面的知识,企业软件定…

了解网页 blob 链接

blob 链接 自从 HTML5 提供了 video 标签&#xff0c;在网页中播放视频变得非常简单&#xff0c;只要在代码中插入一个 video 标签&#xff0c;再将 video 标签的 src 属性设置为视频的链接就可以了。由于 src 指向的是视频文件真实的地址&#xff0c;所以当我们通过浏览器的调…

自动驾驶系列—从IMU到惯性定位算法:自动驾驶精准定位的幕后科技

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…