Open3D 从体素网格构建八叉树

目录

一、概述

1.1体素网格

1.2八叉树构建

1.3应用

二、代码实现

2.1关键函数

2.2完整代码

三、实现效果

3.1原始点云

3.2体素网格

3.3八叉树

3.4体素网格


一、概述

        八叉树(Octree)是一种树状数据结构,用于递归地将三维空间划分为更小的八个子空间,每个子空间称为一个八叉体(octant)。八叉树广泛应用于计算机图形学、三维建模、点云处理和碰撞检测等领域。使用八叉树可以高效地管理和查询三维空间中的数据点。

1.1体素网格

        体素网格是一种将三维空间划分为固定大小的立方体(称为体素)的结构。体素网格的每个体素可以用来存储空间中某个区域的特征或数据点。在点云处理中,体素网格可以用于数据降采样和空间分割。

1.2八叉树构建

从体素网格构建八叉树的步骤如下:

  1. 初始化八叉树:将整个点云数据的边界作为根节点的边界。
  2. 递归划分空间:将每个节点的空间递归地划分为八个子节点,直到满足停止条件(如达到最大深度或每个节点中的点数小于某个阈值)。
  3. 点分配:将点云中的点分配到对应的八叉体中,根据点的坐标决定其所属的子节点。

1.3应用

  • 加速空间查询:八叉树可以高效地进行空间查询,如邻域搜索、范围查询和最近邻搜索。通过递归划分空间,查询的时间复杂度大大降低。
  • 点云压缩和存储:通过递归划分空间并仅存储非空节点,可以有效地压缩点云数据,提高存储效率。
  • 碰撞检测:在物理模拟和计算机图形学中,八叉树用于加速碰撞检测,减少需要检测的对象对数目。
  • 层次细节(LOD)表示:在三维建模和渲染中,八叉树用于表示不同层次的细节,根据视距选择合适的细节级别进行渲染,提高渲染效率。

二、代码实现

2.1关键函数

1.从点云中构建体素

函数create_from_triangle_mesh实现从从三角形网格中创建一个体素网格。

2.从体素网格构建八叉树

  函数create_from_voxel_grid(voxel_grid)从Open3D的VoxelGrid几何结构中构造八叉树。 输入VoxelGrid的每个体素都被视为3D空间中的一个点,其坐标对应于该体素的原点。 每个叶节点都采用其相应体素的颜色。

3.从八叉树构建体素网格

  函数to_voxel_grid()将octree转化为VoxelGrid

2.2完整代码

import open3d as o3d
import numpy as nppcd = o3d.io.read_point_cloud("hand.pcd")
# 点云归一化到单位立方体中
pcd.scale(1 / np.max(pcd.get_max_bound() - pcd.get_min_bound()),center=pcd.get_center())o3d.visualization.draw_geometries([pcd])
# 从点云中创建体素网格
print('voxelization')
voxel_grid = o3d.geometry.VoxelGrid.create_from_point_cloud(pcd,voxel_size=0.001)
# 可视化体素网格
o3d.visualization.draw_geometries([voxel_grid])# 初始化八叉树,最大树深设置为8
octree = o3d.geometry.Octree(max_depth=8)
# 从体素网格中构建八叉树
octree.create_from_voxel_grid(voxel_grid)
# 可视化八叉树
o3d.visualization.draw_geometries([octree])
# 从八叉树转换成网格
voxel_g = octree.to_voxel_grid().create_from_point_cloud(pcd,voxel_size=0.01)
# 可视化体素网格
o3d.visualization.draw_geometries([voxel_g])

三、实现效果

3.1原始点云

3.2体素网格

3.3八叉树

3.4体素网格

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

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

相关文章

Java面试题--JVM大厂篇之深入解析G1 GC——革新Java垃圾回收机制

目录 引言: 正文: 一、G1 GC的区域划分及其作用 1. 伊甸园区(Eden Region) 2. 幸存者区(Survivor Region) 3. 老年代区(Old Generation Region) 二、区域划分的优势: 三、图片解析: 结…

java-数据结构与算法-02-数据结构-03-递归

1. 概述 定义 计算机科学中,递归是一种解决计算问题的方法,其中解决方案取决于同一类问题的更小子集 In computer science, recursion is a method of solving a computational problem where the solution depends on solutions to smaller instances…

动感剧场设计师:打造流畅而生动的三维动画和特效

三维画图软件是设计领域必不可少的工具,它可以创建非常精确的三维模型,能够帮助设计师直观感受产品的外观,随时进行编辑和调整。与传统的三维画图软件相比,的三维画图软件无需进行安装步骤,节省时间又节省内存。本文将…

自动驾驶AVM环视算法--540度全景的算法实现和exe测试demo

540度全景影像是什么 540度全景影像是在360度全景影像基础上的升级功能,它增加了更多的摄像头来收集周围的图像数据。通常,这些摄像头分布在车辆的更多位置,例如车顶、车底等,以便更全面地捕捉车辆周围的情况。在开启全景影像功能…

《Windows API每日一练》8.5 listbox控件

列表框是将一批文本字符串显示在一个具有滚动功能的方框中的控件。通过发送消息到列表框的窗口过程,程序可以添加或删除列表中的字符串。当列表框中的一个项目被选中时,列表框控件便发送 WM_COMMAND消息到其父窗口。然后父窗口确定哪个项目被选中。 本节…

Open3D 计算最近邻点的距离

目录 一、概述 1.1应用 1.2 应用实例 二、代码实现 2.1关键函数 2.2完整代码 2.3程序详解 三、实现效果 一、概述 在Open3D中,可以通过构建KD树(K-D Tree)来有效地进行最近邻搜索,从而计算点云中每个点的最近邻点距离。 …

Milvus lite start 及存储策略

背景 今天开始写下Milvus,为了方便,我直接使用的是 milvus-lite 版本,default 情况下,你可能不知道他到底将 db 存储到什么位置了。启动 default-server,看下Milvus 的start及存储逻辑 主逻辑 def start(self):sel…

STM32F446RE实现多通道ADC转换功能实现(DMA)

目录 概述 1 软硬件介绍 1.1 软件版本 1.2 ADC引脚介绍 2 STM32Cube配置项目 2.1 配置基本参数 2.2 ADC通道配置 2.3 DMA通道配置 3 项目代码介绍 3.1 自生成代码 3.2 ADC-DMA初始化 3.3 测试函数 3.4 ADC1、ADC2、ADC3轮询采集数据存贮格式 4 测试 源代码下载地…

小米MIX Fold 4折叠屏手机背面渲染图曝光

ChatGPT狂飙160天,世界已经不是之前的样子。 更多资源欢迎关注 7 月 3 日消息,消息源 Evan Blass 今天在 X 平台发布推文,分享了小米 MIX Fold 4 折叠屏手机的高清渲染图(图片有加工成分在,最终零售版本可能会存在差异…

70.WEB渗透测试-信息收集- WAF、框架组件识别(10)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:69.WEB渗透测试-信息收集- WAF、框架组件识别(9) 关于waf相应的识…

【C++修行之道】类和对象(四)运算符重载

目录 一、 运算符重载 函数重载和运算符重载有什么关系? 二、.*运算符的作用 三、运算符重载的正常使用 四、重载成成员函数 五、赋值运算符重载 1.赋值运算符重载格式 传值返回和引用返回 有没有办法不生成拷贝? 2. 赋值运算符只能重载成类的…

【Elasticsearch】开源搜索技术的演进与选择:Elasticsearch 与 OpenSearch

开源搜索技术的演进与选择:Elasticsearch 与 OpenSearch 1.历史发展2.OpenSearch 与 Elasticsearch 相同点3.OpenSearch 与 Elasticsearch 不同点3.1 版本大不同3.2 许可证不同3.3 社区不同3.4 功能不同3.5 安全性不同3.6 性能不同3.7 价格不同3.8 两者可相互导入 4…

unity知识点 专项四 一文彻底说清楚(锚点(anchor)、中心点(pivot)、位置(position)之间的关系)

一 概述 想要使UI控件在屏幕中达到正确的显示效果,比如自适应屏幕尺寸、固定边距等等,首先要理清楚几个基本概念和设置:锚点(anchor)、中心点(pivot)、位置(position)、UI缩放模式、父物件的transform设置 二 Anchor、Pivot与Position 2…

Javascript常见数据结构和设计模式

在JavaScript中,常见的数据结构包括两大类:原始数据类型(Primitive Types)和对象类型(Object Types)。对象类型又可以进一步细分为多种内置对象、数组、函数等。下面是一些JavaScript中常见的数据结构&…

Vulnhub靶场DC-6练习

目录 0x00 准备0x01 主机信息收集0x02 站点信息收集1. wordpress扫描2. wordlists字典爆破 0x03 漏洞查找与利用1. 漏洞查找2. CVE-2018-15877漏洞利用3. 反弹shell5. nmap提权 0x04 总结 0x00 准备 下载链接:https://download.vulnhub.com/dc/DC-6.zip 介绍&#…

近红外光谱脑功能成像(fNIRS):2.实验设计、指标计算与多重比较

一、实验设计的策略与方法 近红外光谱成像(INIRS)作为一种非侵入性脑功能成像技术,为研究大脑活动提供了一种高效、生态效度高的方法。然而,为了充分利用INIRS技术并确保实验结果的准确性和可靠性,研究者必须精心设计实…

高阶面试-dubbo的学习

SPI机制 SPI,service provider interface,服务发现机制,其实就是把接口实现类的全限定名配置在文件里面,然后通过加载器ServiceLoader去读取配置加载实现类,比如说数据库驱动,我们把mysql的jar包放到项目的…

【库架一体立体库】与【传统立体库】对比

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 随着冷链物流行业的快速发展,对于冷藏设施的要求也在不断提高。库架一体式智能立体冷藏库以其高效、节能、智能化的特点,正逐渐成为行业发展的新趋势。 分享一…

UML中用例之间的可视化表示

用例除了与参与者有关联关系外,用例之间也存在着一定的关系,如泛化关系、包含关系、扩展关系等。 4.2.1 包含关系 包含关系指的是两个用例之间的关系,其中一个用例(称为基本用例,Base Use Case)的行为包…

el-tree 获取当前勾选节点的选中状态以及选中值对象 触发check-change多次事件问题原因

1.需求 现在需要一个树状结构的资产树 但是现在需求是 获取当前选中的值的状态是选中还是取消选中 然后再用当前选中 or 取消选中的值 进行 选中 or 取消选中的操作 一开始使用的是 check-change 方法 接收参数如图 但是我勾选父节点 或者 子节点后 他会打印一堆数据 是因…