点数据的八叉树模型

上传人:飞*** 文档编号:43297363 上传时间:2018-06-05 格式:DOC 页数:4 大小:98.50KB
返回 下载 相关 举报
点数据的八叉树模型_第1页
第1页 / 共4页
点数据的八叉树模型_第2页
第2页 / 共4页
点数据的八叉树模型_第3页
第3页 / 共4页
点数据的八叉树模型_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《点数据的八叉树模型》由会员分享,可在线阅读,更多相关《点数据的八叉树模型(4页珍藏版)》请在金锄头文库上搜索。

1、点数据的八叉树模型1、八叉树的原理八叉树(Octree)又称为分层树结构,它将指定的三维空间区域分成 8 个卦限(Octants), 且在树上的每个非叶子节点处存储 8 个数据元素(体素)。每个元素称为体元,其对应的三 维空间称为体素。 假设要表示的形体 V 可以放在一个充分大的正方体 C 内,它的八叉树可以用以下的递 归方法来定义: 利用物体的最大和最小坐标值,围绕该物体定义一个平行六面体(包围盒),把它分解 成8个子立方体,并对立方体依次编号为0,1,2,7。八叉树的每个节点与C的一个子立 方体对应,树根与C本身相对应,如果VC,那么V的八叉树仅有树根,如果VC,则将C等 分为八个子立方体

2、,每个子立方体与树根的一个子节点相对应。只要某个子立方体不是完 全空白或完全为V所占据,就要被八等分(图1) ,从而对应的节点也就有了八个子节点。这 样的递归判断、分割一直要进行到节点所对应的立方体或是完全空白,或是完全为V占据, 或是其大小已是预先定义的体素大小,并且对它与V之交作一定的“舍入” ,使体素或认为 是空白的,或认为是V占据的。图 1 立方体的八叉树分割如此所生成的八叉树上的节点可分为三类:灰节点,它对应的立方体部分地为 V 所占据;白节点,它所对应的立方体中无 V 的内容;黑节点,它所对应的立方体全为 V 所占据。后两类又称为叶结点。因此,综上所述,形体 V 关于 C 的八叉树

3、的逻辑结构是这样的: 它是一颗树,其上的节点要么是叶节点,要么就是有八个子节点的灰节点,即若不为空树 的话,树中任一节点的子节点恰好只会有八个或零个,也就是子节点不会有零与八以外的 数目。根节点与 C 相对应,其它节点与 C 的某个子立方体相对应。2、建立八叉树的步骤(1)设定最大递归深度; (2)找出场景的最大尺寸,并以此尺寸建立第一个立方体; (3)依序将单位元元素丢入能被包含且没有子节点的立方体; (4)若没有达到最大递归深度,就进行细分八等份,再将该立方体所装的单位元元素全 部 分担给八个子立方体; (5)若发现子立方体所分配到的单位元元素数量不为零且跟父立方体是一样的,则该子 立方体

4、停止细分,因为跟据空间分割理论,细分的空间所得到的分配必定较少,若是一样数目,则再怎么切数目还是一样,会造成无穷切割的情形; (6)重复 3,直到达到最大递归深度。3、八叉树的优点八叉树算法的特点是,数据结构简单,集合运算容易;形体上各元素已按空间位置排 成了一定的顺序,容易找到其所在的空间位置。因此,用八叉树来表示三维形体及3维空间 中的场景管理,并研究在这种表示下的各种操作及应用,可以很快地知道物体在3D场景中 的位置或侦测与其它物体是否有碰撞以及是否在可视范围内。 八叉树算法的特点是数据结构简单,构造和集合运算容易;具有显式的层次信息且其 各节点分布均匀。通过八叉树划分方法,将场景内每个

5、数据点分配到各个相应的子长方体 中,通过搜索路径容易找到某一长方体节点所在的空间位置,并获得其父节点和兄弟节点, 进而实现快速的 kNN 查询,这使得八叉树结构十分适合基于外存的海量点云数据管理。此 外,由于八叉树各节点具有明显的层次信息,且所对应的空间区域互不重叠,这使得该结 构同样也十分利于三位场景的视域裁剪、背景裁剪、遮挡裁剪和 LOD 细节模型等快速绘制 算法的实现。可以说八叉树结构是一种十分合适的海量点云多分辨率层次结构。4、八叉树的存储结构由于八叉树的结构与四叉树的结构是如此的相似,所以八叉树的存贮结构方式可以完 全沿用四叉树的有关方法。八叉树有三种不同的存贮结构,分别是规则方式、

6、线性方式以 及一对八方式。相应的八叉树也分别称为规则八叉树、线性八叉树以及一对八式八叉树。 不同的存贮结构的空间利用率及运算操作的方便性是不同的。分析表明,一对八式八叉树 优点更多一些。1) 规则八叉树规则八叉树的存贮结构用一个有九个字段的记录来表示树中的每个结点。其中一个字 段用来描述该结点的特性(在目前假定下,只要描述它是灰、白、黑三类结点中哪一类即可), 其余的八个字段用来作为存放指向其八个子结点的指针。这是最普遍使用的表示树形数据 的存贮结构方式。 规则八叉树缺陷较多,最大的问题是指针占用了大量的空间。假定每个指针要用两个 字节表示,而结点的描述用一个字节,那么存放指针要占总的存贮量的

7、 94。因此,这种 方法虽然十分自然,容易掌握,但在存贮空间的使用率方面不很理想。2) 线性八叉树线性八叉树注重考虑如何提高空间利用率。用某一预先确定的次序遍历八叉树(例如 以深度第一的方式),将八叉树转换成一个线性表(图 2-5-2) ,表的每个元素与一个结点 相对应。对于结点的描述可以丰富一点,例如用适当的方式来说明它是否为叶结点,如果 不是叶结点时还可用其八个子结点值的平均值作为非叶结点的值等等。这样,可以在内存 中以紧凑的方式来表示线性表,可以不用指针或者仅用一个指针表示即可。图 2 线性八叉树线性八叉树不仅节省存贮空间,对某些运算也较为方便。但是为此付出的代价是丧失 了一定的灵活性。

8、例如为了存取属于原图形右下角的子图形对应的结点,那么必须先遍历 了其余七个子图形对应的所有结点后才能进行;不能方便地以其它遍历方式对树的结点进 行存取,导致了许多与此相关的运算效率变低。因此尽管不少文章讨论了这种八叉树的应 用,但是仍很难令人满意。3)3) 一对八式的八叉树一个非叶结点有八个子结点,为了确定起见,将它们分别标记为 0,1,2,3,4,5,6,7。从上面的介绍可以看到,如果一个记录与一个结点相对应,那 么在这个记录中描述的是这个结点的八个子结点的特性值。而指针给出的则是该八个子结 点所对应记录的存放处,而且还隐含地假定了这些子结点记录存放的次序。也就是说,即 使某个记录是不必要的

9、(例如,该结点已是叶结点),那么相应的存贮位置也必须空闲在那 里(图 2-5-3) ,以保证不会错误地存取到其它同辈结点的记录。这样当然会有一定的浪费, 除非它是完全的八叉树,即所有的叶结点均在同一层次出现,而在该层次之上的所有层中 的结点均为非叶结点。图 3 一对八式的八叉树 为了克服这种缺陷,有两条途径可以采纳。一是增加计算量,在记录中增加一定的信息, 使计算工作适当减少或者更方便。 四又树结构的基本思想是将一幅栅格地图或图像等分为四部分。逐块检查其格网属性 值(或灰度)。如果某个子区的所有格网值都具有相同的值。则这个子区就不再继续分割, 否则还要把这个子区再分割成四个子区。这样依次地分割

10、,直到每个子块都只含有相同的 属性值或灰度为止。 四叉树结构按其编码的方法不同又分为常规四叉树和线性四叉树。常规四叉树除了记录叶结点之外,还要记录中间结点。结点之间借助指针联系,每个 结点需要用六个量表达:四个叶结点指针,一个父结点指针和一个结点的属性或灰度值。 这些指针不仅增加了数据贮存量,而且增加了操作的复杂性。常规四叉树主要在数据索引 和图幅索引等方面应用。 线性四叉树则只存贮最后叶结点的信息。包括叶结点的位置、深度和本结点的属性或 灰度值。所谓深度是指处于四叉树的第几层上。由深度可推知子区的大小。线性四叉树叶 结点的编号需要遵循一定的规则,这种编号称为地址码,它隐含了叶结点的位置和深度

11、信 息。最常用的地址码是四进制或十进制的 Morton 码。 八叉树结构就是将空间区域不断地分解为八个同样大小的子区域(即将一个六面的立方 体再分解为八个相同大小的小立方体),分解的次数越多,子区域就越小,一直到同区域 的属性单一为止。按从下而上合并的方式来说,就是将研究区空间先按定的分辨率将三 维空间划分为三维栅格网,然后按规定的顺序每次比较 3 个相邻的栅格单元,如果其属性 值相同则合并,否则就记盘。依次递归运算,直到每个子区域均为单值为止。 八叉树同样可分为常规八叉树和线性八叉树。 常规八叉树的结点要记录十个位,即八个指向子结点的指针,个指向父结点的指针 和一个属性值(或标识号)。 而线性八叉树则只需要记录叶结点的地址码和属性值。因此,它的主要优点是,其一 节省存储空间,因为只需对叶结点编码,节省了大量中间结点的存储。每个结点的指针也 免除了,而从根到某一特定结点的方向和路径的信息隐含在定位码之中,定位码数字的个 位数显示分辨率的高低或分解程度;其次,线性八叉树可直接寻址,通过其坐标值则能计 算出任何输入结点的定位码(称编码),而不必实际建立八叉树,并且定位码本身就是坐标 的另种形式,不必有意去存储坐标值。若需要的话还能从定位码中获取其坐标值(称解码); 其三,在操作方面,所产生的定位码容易存储和执行,容易实现象集合、相加等组合操作。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号