Open3D 在点云中构建八叉树

目录

一、概述

二、代码实现

2.1关键函数

2.2完整代码

三、实现效果

3.1原始点云

3.2构建后点云


一、概述

        八叉树(Octree)是一种树状数据结构,用于递归地将3D空间分割成较小的立方体。八叉树特别适用于3D计算机图形学、点云处理和空间索引。八叉树的每个节点表示一个正方体的体积元素,每个节点有八个子节点,这八个子节点所表示的体积元素加在一起就等于父节点的体积。一般中心点作为节点的分叉中心。
八叉树的构建原理:
1.初始分割:
        - 开始时,整个3D空间被包含在一个根立方体中。
2.递归分割:
        - 每个立方体(称为一个八叉树节点)被递归地分割成八个子立方体(每个维度一分为二)。
        - 这个过程根据需要进行,直到达到某个预定义的深度或满足某些条件(例如,每个叶节点包含的点数不超过某个阈值)。
3.节点存储:
        - 内部节点存储其子节点的信息。
        - 叶节点存储包含在该立方体中的点或其他数据。

二、代码实现

2.1关键函数

Open3D中的open3d.geometry.Octree可用于创建、搜索、遍历具有用户指定的最大树深度max_depth的八叉树。

convert_from_point_cloud(self, point_cloud, size_expand=0.01)

从点云中构建八叉树

  • point_cloud:为输入的点云数据
  • size_expand :一个小的扩展尺寸,使八叉树比原来的点云边界略大,以容纳所有的点。(默认值为:0.01m)

2.2完整代码

import numpy as np
import open3d as o3dpcd = o3d.io.read_point_cloud("Chair.pcd")
point = np.asarray(pcd.points)
N = point.shape[0]
# 点云随机着色
pcd.colors = o3d.utility.Vector3dVector(np.random.uniform(0, 1, size=(N, 3)))
# 可视化点云
o3d.visualization.draw_geometries([pcd], window_name="原始点云",width=1024, height=768,left=50, top=50)
# 创建八叉树, 树深为9
octree = o3d.geometry.Octree(max_depth=9)
# 从点云中构建八叉树,适当扩展边界0.001m
octree.convert_from_point_cloud(pcd, size_expand=0.001)
# 可视化八叉树
o3d.visualization.draw_geometries([octree], window_name="可视化八叉树",width=1024, height=768,left=50, top=50)

三、实现效果

3.1原始点云

3.2构建后点云

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

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

相关文章

[图解]企业应用架构模式2024新译本讲解22-标识映射

1 00:00:01,080 --> 00:00:04,710 我们来看一下标识映射这个模式 2 00:00:08,030 --> 00:00:10,110 它是属于对象-关系 3 00:00:10,120 --> 00:00:11,150 行为模式 4 00:00:11,160 --> 00:00:13,890 就是说,在动态的时候 5 00:00:15,770 --> 00:…

华为OD机考题(HJ65 查找两个字符串a,b中的最长公共子串)

前言 经过前期的数据结构和算法学习,开始以OD机考题作为练习题,继续加强下熟练程度。 描述 查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。 注:子串的定义:将一个字符串删去前缀和后…

【Git 】规范 Git 提交信息的工具 Commitizen

Commitizen是一个用于规范Git提交信息的工具,它旨在帮助开发者生成符合一定规范和风格的提交信息,从而提高代码维护的效率,便于追踪和定位问题。以下是对Commitizen的详细介绍。 1、Commitizen的作用与优势 规范提交信息:通过提供…

C# Application.DoEvents()的作用

文章目录 1、详解 Application.DoEvents()2、示例处理用户事件响应系统事件控制台输出游戏和多媒体应用与操作系统的交互 3、注意事项总结 Application.DoEvents() 是 .NET 框架中的一个方法,它主要用于处理消息队列中的事件。在 Windows 应用程序中,当一…

Oracle PL / SQL INTERVAL数据类型

INTERVAL YEAR TO MONTH数据类型 INTERVAL YEAR TO MONTH存储和操作年和月的间隔。 语法是: INTERVAL YEAR[(precision)] TO MONTH precision指定“years”字段中的数字位数。 我们必须在0..4的范围内使用整数字面值。默认值为2。 以下代码显示如何将字面值分配…

基于16通道AD采集(CL1616和AD7616)的FPGA设计简介

Cl1616是一款 16 位 DAS,支持对 16 个通道进行双路同步采样。CL1616 采用 5 V 单电源供电,可以 处理10 V、5 V 和2.5 V 真双极性输入信号,同时每对通道均能以高达 1 MSPS 的吞吐速率和 90 dB SNR 采样。利用片内过采样模式可实现更高的 SNR 性能。 AD7616与CL1616软硬件兼容…

实验四 图像增强—灰度变换之直方图变换

一.实验目的 1.掌握灰度直方图的概念及其计算方法; 2.熟练掌握直方图均衡化计算过程;了解直方图规定化的计算过程; 3.了解色彩直方图的概念和计算方法 二.实验内容: …

ArcGIS Pro SDK (八)地理数据库 1 地理数据库和数据存储

ArcGIS Pro SDK (八)地理数据库 1 地理数据库和数据存储 文章目录 ArcGIS Pro SDK (八)地理数据库 1 地理数据库和数据存储1 打开给定路径的文件地理数据库2 使用连接属性打开企业级地理数据库3 使用 sde 文件路径打开企业级地理数…

Bootstrap 提示工具

Bootstrap 提示工具 Bootstrap 是一个流行的前端框架,它提供了一套丰富的工具和组件,用于快速开发响应式和移动设备优先的网页。其中,提示工具(Tooltip)是 Bootstrap 提供的一个非常有用的组件,它可以在用户将鼠标悬停在某个元素上时显示额外的信息。本文将详细介绍 Boo…

课设:选课管理系统(Java+MySQL)

在本博客中,我将介绍用Java、MySQL、JDBC和Swing GUI开发一个简单的选课管理系统。 技术栈 Java:用于编写应用程序逻辑MySQL:用于存储和管理数据JDBC:用于连接Java应用程序和MySQL数据库Swing GUI:用于构建桌面应用程…

555 定时器芯片工作原理

在本教程中,您将学习如何使用 555 定时器做一些有趣的事情。许多人用它做的第一件事就是制造闪烁的灯光。但这只是用该芯片可以做很多事情的简单示例之一。您还可以控制电机、创建闹钟、创建乐器等等。 让我们先来概览一下这些引脚。 555 定时器引脚排列 引脚 1 接地…

【SpringCloud】概述 -- 微服务入门

在Java的整个学习过程中,大家势必会听见一些什么分布式-微服务、高并发、高可用这些专业术语,给人的感觉很高级,有一种高深莫测的感觉。可以看一下这篇博客对这些技术架构的演变有一个初步的认识: 服务端⾼并发分布式结构演进之路-CSDN博客文…

image媒体组件属性配合swiper轮播

图片组件&#xff08;image&#xff09; 先插入个图片试试&#xff0c;插入图片用src属性&#xff0c;这是图片&#xff1a; 代码如下&#xff1a; <template><view><swiper indicator-dots indicator-color "#126bae" indicator-active-color &…

Jectpack Navigation组件设置统一跳转动画

Activity的跳转一般通过Theme设置即可&#xff0c;但是Framment的跳转除了NavigationUI类提供的方法会有动画以外&#xff0c;直接调用navigate方法是没有动画的。 网上的实现个人认为比较麻烦&#xff0c;帮自己写了一套&#xff0c;主要就是自定义NavHostFragement和Fragmen…

CobaltStrike的内网安全

1.上线机器的Beacon的常用命令 2.信息收集和网站克隆 3.钓鱼邮件 4.CS传递会话到MSF 5.MSF会话传递到CS 1上线机器的Beacon的常用命令 介绍&#xff1a;CobaltStrike分为服务端和客户端&#xff0c;一般我们将服务端放在kali&#xff0c;客户端可以在物理机上面&#xff0…

tongweb 部署软航流版签一体化应用示例 提示跨域错误CORS ERROR

目录 问题现象与描述 解决办法 原理解析 什么是CORS 浏览器跨域请求限制 跨域问题解决方法 跨域请求流程 浏览器请求分类解析 http请求方法简介 问题现象与描述 重庆软航科技有限公司提供了一套针对针对word、excel等流式文件转换成PDF版式文件并进行版式文件在线签章…

ai积累-具体应用的大概设想

这些场景展示了以 ChatGPT 为代表的生成式 AI 可能的具体应用&#xff1a; 教育辅助&#xff1a; AI 可以充当学生的个性化辅导老师&#xff0c;提供定制化的学习材料和练习。例如&#xff0c;它可以生成针对学生能力水平和兴趣的数学问题或历史教学文章。 客户支持&#xff1…

LESS 的嵌套写法有什么优势?

LESS的嵌套写法可以提高代码的可读性和维护性。通过将相关的样式规则嵌套在父选择器中&#xff0c;可以更清晰地表达样式之间的层级关系&#xff0c;避免重复的代码&#xff0c;并且使样式结构更加整洁。 例如&#xff0c;假设有以下HTML结构&#xff1a; <div class"…

Qt 加载图片的几种方式 以及加载 loading

项目中经常使用加载图片&#xff1a; 常用有两种方式&#xff1a; 1.使用 QWidget 加载图片&#xff1a; 效果&#xff1a; 样例源码&#xff1a; int pict_H ui->widgetImage->height();int pict_W ui->widgetImage->width();ui->widgetImage->setFixe…

白骑士的C语言教学高级篇 3.4 C语言中的算法

算法是解决问题的核心。无论是排序、搜索&#xff0c;还是递归与动态规划&#xff0c;算法的选择和实现对程序的效率和性能有着重要影响。本节将介绍几种常见的算法&#xff0c;包括排序算法、搜索算法&#xff0c;以及递归和动态规划的应用。 排序算法 排序算法是将一组数据按…