LabVIEW OcTree(八叉树数据容器)

工作过程中经常要对散乱三维点云进行处理,其处理的前提是建立点与点之间的拓扑关系,因为是散乱只能建立临近点区域块邻接关系。比较常用的办法就是根据点云的体积,用做大的立体包围盒进行包裹,然后对包围盒划分为边长等距的小立方体,该方法适用于在整个立体空间中,分布相对平均,密度一致的点云。但大部分的点云都是基于轮廓扫描获取的点云,属于表面型点云,中空。如果还用等间距立体包围盒进行划分,浪费很多的内存空间,增加检索数据的时间。解决觉思路是,有点云的地方就划分,没有点云的地方就不划分,更高效的利用内存、减少检索数据的时间。基于这样的思路,线性存储_数组数据类型是没有办法构建这样的数据结构的,只能非线性存储数据结构_OcTree。

八叉树OcTree,一个立方体等分为八份,并可以持续的细分下去,虽然每个节点都能分出八个叉,但形象,且等分空间,是等分立方体方法的优化。

图片

LabVIEW没有现成的树形数据容器,但可以借助LabVIEW Framework Engineer Chris Cilino&Cirrus Logic两位博士设计一套树形容器来搭建OcTree,用于云数据拓扑关系的建立。

数据容器节点数据类型:

Data:该子节点的点云数据

Range:该立方体的范围

Center:该立方体的中间位置。

Parent:该节点的父类名字

Child:该节点的子类的名字

ParentOcTree:父类节点的数值引用

ChildOcTree:子类节点的数值引用

Current:当前节点的数值引用

图片

创建OcTree数据容器首节点:

图片

节点进行递归分裂:

读出点云,根据规则,插入8个立方体,并对8个立方体创建树形容器,加入父类并更新父类子节点的数值引用。在创建每个节点的时候都要递归分裂下去。

图片

递归读出所有节点

首先读出跟节点的所有子类,读出Node值,递归所有子类读出Node值。

图片

分裂深度为3时,点云OcTree拓扑关系如下:

图片

分裂深度为5时,点云OcTree拓扑关系如下:

图片

声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/314178.html

(0)
联系我们
联系我们
分享本页
返回顶部