Implicit kd-tree

Implicit kd-tree

An implicit "k"d-tree is a "k"d-tree defined implicitly above a rectilinear grid. Its splitting planes' positions and orientations are not given explicitly but implicitly by some recursive splitting-function defined on the hyperrectangles belonging to the tree's nodes. Each inner node's splitting plane is positioned on a grid plane of the underlying grid, partitioning the node's grid into two subgrids.

Nomenclature

The terms "min/max "k"d-tree" and "implicit "k"d-tree" are sometimes mixed up. This is due to the fact that the first publication using the term "implicit "k"d-tree" [Ingo Wald, Heiko Friedrich, Gerd Marmitt, Philipp Slusallek and Hans-Peter Seidel "Faster Isosurface Ray Tracing using Implicit KD-Trees" IEEE Transactions on Visualization and Computer Graphics (2005)] did actually use explicit min/max "k"d-trees but referred to them as "implicit "k"d-trees" to indicate that they may be used to ray trace implicitly given iso surfaces. Nevertheless this publication used also slim "k"d-trees which are a subset of the implicit kd-trees with the restriction that they can only be built over integer hyperrectangles with sidelengths that are powers of two. Implicit "k"d-trees as defined here have shortly after been introduced [Matthias Groß, Carsten Lojewski, Martin Bertram and Hans Hagen "Fast Implicit "k"d-Trees: Accelerated Isosurface Ray Tracing and Maximum Intensity Projection for Large Scalar Fields" CGIM07: Proceedings of Computer Graphics and Imaging (2007) 67-74] . As it is possible to assign attributes to implicit "k"d-tree nodes, one may refer to an implicit "k"d-tree which has min/max values assigned to its nodes as an "implicit min/max "k"d-tree".

Construction

Implicit "k"d-trees are in general not constructed explicitly. When accessing a node, its splitting plane orientation and position are evaluated using the specific splitting-function defining the tree. Different splitting-functions may result in different trees for the same underlying grid.

plitting-functions

Splitting-functions may be adapted to special purposes. Underneath two specifications of special splitting-function classes.

* Non-degenerated splitting-functions do not allow the creation of degenerated nodes (nodes whose corresponding integer hyperrectangle's volume is equal zero). Their corresponding implicit "k"d-trees are full binary trees, which have for "n" leaf nodes "n - 1" inner nodes. Their corresponding implicit "k"d-trees are non-degenerated implicit "k"d-trees.

* complete splitting-functions are non-degenerated splitting-functions whose corresponding implicit "k"d-tree's leaf nodes are single grid cells such that they have one inner node less than the amount of gridcells given in the grid. The corresponding implicit "k"d-trees are complete implicit "k"d-trees.

A complete splitting function is for example the grid median splitting-function. It creates fairly balanced implicit "k"d-trees by using "k"-dimensional integer hyperrectangles "hyprec [2] [k] " belonging to each node of the implicit "k"d-tree. The hyperrectangles define which gridcells of the rectilinear grid belong to their corresponding node. If the volume of this hyperrectangle equals one, the corresponding node is a single grid cell and is therefore not further subdivided and marked as leaf node. Otherwise the hyperrectangle's longest extend is chosen as orientation "o". The corresponding splitting plane "p" is positioned onto the grid plane that is closest to the hyperrectangle's grid median along that orientation.

Splitting plane orientation "o": o = min{argmax(i = 1 ... "k": (hyprec [1] [i] - hyprec [0] [i] ))}Splitting plane position "p": p = roundDown((hyprec [0] [o] + hyprec [1] [o] ) / 2)

Assigning attributes to implicit "k"d-tree-nodes

An obvious advantage of implicit "k"d-trees is that their splitting plane's orientations and positions need not to be stored explicitly.

But some applications require besides the splitting plane's orientations and positions further attributes at the inner tree nodes. These attributes may be for example single bits or single scalar values, defining if the subgrids belonging to the nodes are of interest or not. For complete implicit "k"d-trees it is possible to pre-allocate a correctly sized array of attributes and to assign each inner node of the tree to a unique element in that allocated array.

The amount of gridcells in the grid is equal the volume of the integer hyperrectangle belonging to the grid. As a complete implicit "k"d-tree has one inner node less than grid cells, it is known in advance how many attributes need to be stored. The relation "Volume of integer hyperrectangle to inner nodes" defines together with the complete splitting-function a recursive formula assigning to each splitting plane a unique element in the allocated array. The corresponding algorithm is given in C-pseudo code underneath.

// "Assigning attributes to inner nodes of a complete implicit "k"d-tree" // "create an integer help hyperrectangle "hyprec" (its volume "vol(hyprec)" is equal the amount of leaves)" int hyprec [2] [k] = 0, ..., 0}, {length_1, ..., length_k; // "allocate once the array of attributes for the entire implicit "k"d-tree" attr *a = new attr [volume(hyprec) - 1] ; attr implicitKdTreeAttributes(int hyprec [2] ["k"] , attr *a) { if(vol(hyprec) > 1) // "the current node is an inner node" { // "evaluate the splitting plane's orientation "o" and its position "p" using the underlying complete splitting-function" int o, p; completeSplittingFunction(hyprec, &o, &p); // "evaluate the children's integer hyperrectangles "hyprec_l" and "hyprec_r" " int hyprec_l [2] [k] , hyprec_r [2] [k] ; hyprec_l = hyprec; hyprec_l [1] [o] = p; hyprec_r = hyprec; hyprec_r [0] [o] = p; // "evaluate the children's memory location "a_l" and "a_r" " attr* a_l = a + 1; attr* a_r = a + vol(hyprec_l);" // "evaluate recursively the children's attributes "c_l" and "c_r" " attr c_l = implicitKdTreeAttributes(hyprec_l, a_l); attr c_r = implicitKdTreeAttributes(hyprec_r, a_r); // "merge the children's attributes to the current attribute "c" " attr c = merge(c_l, c_r); // "store the current attribute and return it" a [0] = c; return c; } // "The current node is a leaf node. Return the attribute belonging to the corresponding gridcell" return attribute(hyprec); }

It is worth mentioning that this algorithm works for all rectilinear grids. The corresponding integer hyperrectangle does not necessarily have to have sidelengths that are powers of two.

Applications

Implicit max-"k"d trees are used for ray casting isosurfaces/MIP (maximum intensity projection). The attribute assigned to each inner node is the maximal scalar value given in the subgrid belonging to the node. Nodes are not traversed if their scalar values are smaller than the searched iso-value/current maximum intensity along the ray. The low storage requirements of the implicit max "k"d-tree and the favorible visualization complexity of ray casting allow to ray cast (and even change the isosurface for) very large scalar fields at interactive framerates on commodity PCs.

Complexity

Given an implicit "k"d-tree spanned over an "k"-dimensional grid with "n" gridcells.
* Assigning attributes to the nodes of the tree takes "O(kn)" time.
* Storing attributes to the nodes takes "O(n)" memory.
* Ray casting iso-surfaces/MIP an underlying scalar field using the corresponding implicit max "k"d-tree takes roughly "O(lg(n))" time.

ee also

* "k"d-tree
* min/max "k"d-tree

References


Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать курсовую

Look at other dictionaries:

  • Tree (data structure) — A simple unordered tree; in this diagram, the node labeled 7 has two children, labeled 2 and 6, and one parent, labeled 2. The root node, at the top, has no parent. In computer science, a tree is a widely used data structure that emulates a… …   Wikipedia

  • Tree of Knowledge of Good and Evil — In the Book of Genesis, the Tree of Knowledge of Good and Evil (and occasionally translated as the Tree of Conscience, ). A serpent later tempted Eve, who was aware of the prohibition, to eat the forbidden fruit from the Tree of Knowledge… …   Wikipedia

  • min/max kd-tree — A min/max kd tree is a kd tree with two scalar values a minimum and a maximum assigned to its nodes. The minimum/maximum of an inner node is equal the minimum/maximum of its children s minima/maxima. Contents 1 Construction 2 Properties 3… …   Wikipedia

  • Min/max kd-tree — A min/max k d tree is a k d tree with two scalar values a minimum and a maximum assigned to its nodes. The minimum/maximum of an inner node is equal the minimum/maximum of its children s minima/maxima.ConstructionMin/max k d trees may be… …   Wikipedia

  • Binary tree — Not to be confused with B tree. A simple binary tree of size 9 and height 3, with a root node whose value is 2. The above tree is unbalanced and not sorted. In computer science, a binary tree is a tree data structure in which each node has at… …   Wikipedia

  • Cover tree — The cover tree is a type of data structure in computer science that is specifically designed to facilitate the speed up of a nearest neighbor search. It is a refinement of the Navigating Net data structure, and related to a variety of other data… …   Wikipedia

  • Phylogenetic tree — ptree redirects here. For Patricia tree, see Radix tree …   Wikipedia

  • Radix tree — In computer science, a radix tree (also patricia trie or radix trie) is a space optimized trie data structure where each node with only one child is merged with its child. The result is that every internal node has at least two children. Unlike… …   Wikipedia

  • Dancing tree — For the film Dancing tree, see Dancing tree (film) In computer science, a dancing tree is a tree data structure, which is similar to B+ tree. Invented by Hans Reiser, for use by the Reiser4 file system. As opposed to self balancing binary search… …   Wikipedia

  • Hash tree — A binary hash tree In cryptography and computer science Hash trees or Merkle trees are a type of data structure[citation needed] which contains a tree of summary information about a larger piece of da …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”