`
幸运虫
  • 浏览: 47559 次
  • 性别: Icon_minigender_2
  • 来自: 甘城
社区版块
存档分类
最新评论

图像学相关的数据结构:多维范围查找,四叉树,BSP树

阅读更多
Multidimensional Range Search(多维范围查找):
1.这是一个静态搜索树结构,建立后只支持查找操作,用于查询条件有N个且没有优先级的情况。
2.k-dimension range trees (k维范围搜索树)的每个节点node含有一棵k-1维范围搜索树,该k-1维范围搜索树包含了node其子结点中k-1维树的所有记录,根据第k维数据(即不记录在(k-1)维树里的数据)对半分为左右孩子,递归地拆分直到节点的数据长度足够小。特别地,k=1时是一个已排序的一维数组;因此k=2时,每个节点中包含的是一个数组而不是一棵树,即树中每个节点含有一个一维数组。
3.
k DimensionProcessing Time P(n,k)Space S(n,k)Query Time Q(n,k)
1O(n log n)O(n)O(log n +s)
2O(n log n)O(n log n)O((log n)^2 +s)
3O(n (log n)^2)O(n (log n)^2)O((log n)^3 +s)
kO(n (log n)^(k-1)), where k>1O(n (log n)^(k-1))O(n (log n)^k +s)

从P(n,1)到P(n,2)复杂度没有增加是因为,一维数组在子结点中被拆分不需要重新计算,总排序时间依然是O(n log n);而树的每一层寻找median中间拆分点的时间是O(n),有O(log n)层。所以总时间是O(n log n + n×log n)=O(n log n).
维数k增大时复杂度增加log n均是因为在k-1维的复杂度上,建立层数为log n的新树。Q(n,k)中的s是在查询范围内的总记录数,需要循环输出结果,故复杂度为O(s)。


四叉树(Quad Trees):
1.四叉树每个节点用于表示一个二进制图片的一部分,内结点有四个子结点,从横纵向将内结点所表示的部分图片平分。根节点表示整个2^k × 2^k的图片,其中k为高。
2.假设:二进制图片的每个像素用0或1表示,0为黑色1为白色。因此我们可以在四叉树中用灰色结点表示该区域既有黑色像素又有白色像素,灰色结点均是内结点,而全是白色或全是黑色的区域便可以用一个单一的白色或黑色结点表示,从而节省空间。
3.用这个数据结构,便可以对图片方便地进行一些操作和处理。例如,将图片旋转90度,只需将树中所有孩子结点的顺序进行调整;缩小一张图片到原来的一半,只需将倒数第二层(L-1)的每个灰色结点极其孩子根据合理的规则合成一个黑色或白色结点。
4.若将子结点数目从4增加到8,便可以用类似方法来表示三维图片,该树叫做Oct Tree(八叉树)。


Binary space partitioning trees(BSP树):
1.BSP树的建立是通过选择切分的单元(线或平面,hyperplanes),判断每个图形在切分单元的左边或右边,从而生成左右子树,并递归地用相同方式切分左右子树,直到每个叶子结点足够小容易被绘画。
2.BSP树是用于多个物体相互遮挡的图像绘制中,将图像分析切分成可以被绘画的对象,并生成位置关系,从而使视角的控制更容易。
3.根据切分单元ph的公式ax + by + c = 0或ax + by + cz + d = 0,可以计算出目标对象的位置,从而生成左子树(小于0)和右子树(大于0)。
伪代码
BSPtree(O)
// O is object set
if O is empty, return null;
Create a new node N;
N.ph = partitioning hyperplane for O;
lList = rList = N.cList = null;
for each object z in O do
if z is coincident to ph or |O| = 1, add z to N.cList;
if z is left of ph, add z to lList;
if z is right of ph, add z to rList;
if z spans ph, split z and add pieces to lList and rList;
N.leftChild = BSPTree(lList);
N.rightChild = BSPTree(rList);
return N;

draw(N)
//Basic Draw Back to Front
if eye left of N.ph
{draw(N.rightChild); draw N.cList; draw(N.leftChild)};
else if eye right of N.ph
{draw(N.leftChild); draw N.cList; draw(N.rightChild)};
else // eye coincident to N.ph
{draw(N.leftChild); draw(N.rightChild)};

draw(N)
//Basic Draw Front to Back
if eye left of N.ph
{draw(N.leftChild); draw N.cList; draw(N.rightChild)};
else if eye right of N.ph
{draw(N.rightChild); draw N.cList; draw(N.leftChild)};
else // eye coincident to N.ph
{draw(N.rightChild); draw(N.leftChild)};


1
2
分享到:
评论

相关推荐

    数据结构源码:多维数组

    总的来说,多维数组作为数据结构的一种,是理解和实现复杂算法的基础,也是许多领域如图像处理、机器学习等不可或缺的工具。理解和熟练掌握多维数组的使用和优化,对于提升编程能力和解决问题的能力具有重要意义。

    数据结构:思想与方法.7z

    5. **树**:树结构是一种非线性的数据结构,每个元素(节点)可能有零个或多个子节点。常见的树类型包括二叉树、二叉搜索树、平衡树(AVL树、红黑树)等。树在文件系统、数据库索引和图形结构中广泛应用。 6. **图*...

    图形学课程设计基于四叉树的颜色填充等值线图绘制java实现

    实现过程中,首先需要建立四叉树结构,将图像或数据区域分割成多个子区域。然后,对每个子区域,根据其内部的颜色或数值范围进行填充。对于等值线图,我们需要遍历数据并找出数值相等的点,连接这些点形成等值线。...

    有关四叉树算法的幻灯片

    四叉树算法是一种数据结构,它在计算机科学中主要用于处理多维空间的数据。与常见的二叉树不同,四叉树每个节点有四个子节点,分别代表四个不同的方向或区域,通常对应于二维图像的上、下、左、右。这种结构在图像...

    用java实现的四叉树编码源码

    四叉树编码是一种在计算机图形学和数据存储中常见的空间划分方法,特别是在处理二维或三维空间数据时。Java作为一种广泛使用的编程语言,提供了强大的抽象能力和内存管理,使得实现四叉树编码成为可能。本篇文章将...

    数据结构多维数组课程设计

    ### 数据结构多维数组课程设计知识点解析 #### 一、问题背景与目标 在计算机科学领域,特别是数据结构的学习和应用中,多维数组是一种重要的数据组织方式。它能够有效地处理多维数据,如图像处理、矩阵运算等场景...

    数据结构中有关多维数组的课程设计

    在数据结构的学习中,多维数组是一个至关重要的概念,它为理解和处理复杂的数据组织提供了基础。多维数组,顾名思义,是数组的一种扩展形式,可以看作是由多个一维数组按照特定规则排列而成的结构。在本课程设计中,...

    kd树python代码构建与搜索与四叉树构建

    **kd树(kd-Tree)**是数据结构和算法领域中的一个重要概念,特别是在多维空间中的数据索引和检索上。kd树是一种自平衡的二叉查找树,它将n维空间分割成一系列的超矩形区域,每层对一个坐标轴进行分割,因此在k维...

    一种随机化递增的压缩四叉树形数据结构的构建算法.pdf

    四叉树是一种常见的数据结构,尤其在处理多维数据问题,如电子地图、计算机图形学、图像处理和空间地理信息系统等领域有着广泛的应用。在四叉树的每个节点都有四个分支,用来将平面空间划分成四个子区域,这种结构...

    面向移动GIS 的动态四叉树空间索引算法

    - **动态调整机制**:算法可以根据实际数据分布情况动态调整四叉树的结构,减少不必要的节点,从而提高索引效率。 - **高效更新策略**:针对移动GIS系统中频繁的数据变化特点,算法设计了高效的插入、删除和查询操作...

    数据结构:C语言描述

    二叉树是最常见的树类型,分为二叉查找树(BST)、平衡二叉树(AVL、红黑树)等。C语言中通过结构体和指针实现树结构。 6. **图**:图由顶点和边构成,用于表示对象之间的关系。C语言中通常用邻接矩阵或邻接表来...

    也谈利用四叉树分割技术实现2D图象的3D转换

    **四叉树分割技术**是一种有效的图像处理和数据结构技术,它通过将一个二维空间划分为四个等大的子区域来组织和管理空间信息。在图像处理领域,这项技术被广泛应用于图像压缩、快速检索、图像分析等方面。本章节主要...

    数据结构:C语言描述_0

    7. **排序和查找算法**:快速排序、归并排序、冒泡排序、二分查找等是数据结构课程中常见的算法,它们与数据结构密切相关,是优化程序性能的重要工具。 8. **动态内存分配**:C语言中的`malloc()`、`calloc()`、`...

    高级数据结构[收集].pdf

    1. 内存结构:主要关注快速访问,如二叉树(平衡、近似平衡、不平衡),这些树结构通常用于搜索和排序操作,通过减少访问次数提高效率。例如,红黑树是一种自平衡二叉查找树,它保证了任何节点到叶子节点的路径长度...

    2012年南师大GIS考研数据结构试题

    6. 空间数据结构:如四叉树、kd树、R树、格网等,以及它们在GIS中的应用。 7. 数据压缩:如霍夫曼编码、算术编码等数据压缩方法在GIS数据存储中的应用。 8. 并发数据结构:在多线程环境下的数据结构设计,如线程...

    《零基础学数据结构源码》(陈锐编)源代码

    5. **树**:树结构模拟了自然界中的分层关系,如二叉树、平衡二叉树(AVL树、红黑树)以及搜索树(BST)。树在文件系统、数据库索引等领域有广泛应用。 6. **图**:图数据结构用于表示对象之间的复杂关系,如邻接...

    Skiptree:面向多维数据的可扩性范围查询的数据结构.pdf

    Skiptree是一种新的平衡分布式数据结构,用于高效地处理多维空间中的数据查询问题。这一数据结构特别适用于对等网络环境下,用于储存和检索多维关键值数据。Skiptree系统的一个显著特点在于它能够在每个节点上维护O...

Global site tag (gtag.js) - Google Analytics