lect05_Contouring_II
Download
Report
Transcript lect05_Contouring_II
CSE 554
Lecture 5: Contouring (faster)
Fall 2013
CSE554
Contouring II
Slide 1
Review
• Iso-contours
– Points where a function evaluates to a
same value (iso-value)
• Smooth thresholded boundaries
• Contouring methods
– Primal methods
• Marching Squares (2D) and Cubes (3D)
• Placing vertices on grid edges
– Dual methods
• Dual Contouring (2D,3D)
• Placing vertices in grid cells
CSE554
Contouring II
Primal
Dual
Slide 2
Efficiency
• Iso-contours is very often used for visualizing 3D volumes
– The volume data can be large (e.g, 1000^3)
• MRI, CT, Ultrasound, EM, etc.
– The user often needs to view surfaces as she changes iso-values
• An efficient contouring algorithm is needed
– Optimized for viewing one volume at multiple iso-values
CSE554
Contouring II
Slide 3
Marching Squares - Revisited
• Active cell
– A grid cell where {min, max} of 4 corner
1
2
3
2
1
2
3
4
3
2
3
4
5
4
3
2
3
4
3
2
1
2
3
2
1
values encloses the iso-value
• Algorithm
O(n)
– Visit each cell.
O(k)
– If active, create vertices and edges
• Time complexity: O(n+k)
• n: the number of all grid cells
• k: the number of active cells
CSE554
Contouring II
Iso-value = 3.5
Slide 4
Marching Squares - Revisited
Marching Squares
O(n+k)
1.2
1.0
Running
time
(seconds)
0.8
0.6
0.4
Only visiting each square and
checking if it is active (without
creating vertices and edges)
O(n)
0.2
0
CSE554
50
100
150
Contouring II
200
250
Iso-value
Slide 5
Speeding Up Contouring
• Data structures that allow faster query of active cells
– Quadtrees (2D), Octrees (3D)
• Hierarchical spatial structures for quickly pruning large areas of inactive cells
• Complexity: O(k*Log(n))
– Interval trees
• An optimal data structure for range finding
• Complexity: O(k+Log(n))
CSE554
Contouring II
Slide 6
Interval Trees
Marching Squares
O(n+k)
1.2
1.0
Running
time
(seconds)
0.8
Quadtree
O(k*Log(n))
0.6
Interval tree
O(k+Log(n))
0.4
0.2
0
CSE554
50
100
150
Contouring II
200
250
Iso-value
Slide 7
Speeding Up Contouring
• Data structures that allow faster query of active cells
– Quadtrees (2D), Octrees (3D)
• Hierarchical spatial structures for quickly pruning large areas of inactive cells
• Complexity: O(k*Log(n))
– Interval trees
• An optimal data structure for range finding
• Complexity: O(k+Log(n))
CSE554
Contouring II
Slide 8
Quadtrees (2D)
• Basic idea: coarse-to-fine search
– Start with the entire grid:
• If the {min, max} of all grid values does not enclose the iso-value, stop.
• Otherwise, divide the grid into four sub-grids and repeat the check within each
sub-grid. If the sub-grid is a unit cell, it’s an active cell.
CSE554
Contouring II
Slide 9
Quadtrees (2D)
• Basic idea: coarse-to-fine search
– Start with the entire grid:
• If the {min, max} of all grid values does not enclose the iso-value, stop.
• Otherwise, divide the grid into four sub-grids and repeat the check within each
sub-grid. If the sub-grid is a unit cell, it’s an active cell.
Iso-value not in {min,max}
Iso-value in {min,max}
CSE554
Contouring II
Slide 10
Quadtrees (2D)
• Basic idea: coarse-to-fine search
– Start with the entire grid:
• If the {min, max} of all grid values does not enclose the iso-value, stop.
• Otherwise, divide the grid into four sub-grids and repeat the check within each
sub-grid. If the sub-grid is a unit cell, it’s an active cell.
Iso-value not in {min,max}
Iso-value in {min,max}
CSE554
Contouring II
Slide 11
Quadtrees (2D)
• Basic idea: coarse-to-fine search
– Start with the entire grid:
• If the {min, max} of all grid values does not enclose the iso-value, stop.
• Otherwise, divide the grid into four sub-grids and repeat the check within each
sub-grid. If the sub-grid is a unit cell, it’s an active cell.
Iso-value not in {min,max}
Iso-value in {min,max}
CSE554
Contouring II
Slide 12
Quadtrees (2D)
• Basic idea: coarse-to-fine search
– Start with the entire grid:
• If the {min, max} of all grid values does not enclose the iso-value, stop.
• Otherwise, divide the grid into four sub-grids and repeat the check within each
sub-grid. If the sub-grid is a unit cell, it’s an active cell.
Iso-value not in {min,max}
Iso-value in {min,max}
CSE554
Contouring II
Slide 13
Quadtrees (2D)
• Basic idea: coarse-to-fine search
– Start with the entire grid:
• If the {min, max} of all grid values does not enclose the iso-value, stop.
• Otherwise, divide the grid into four sub-grids and repeat the check within each
sub-grid. If the sub-grid is a unit cell, it’s an active cell.
Iso-value not in {min,max}
Iso-value in {min,max}
CSE554
Contouring II
Slide 14
Quadtrees (2D)
• A degree-4 tree
– Root node: entire grid
– Each node maintains:
• {min, max} in the enclosed part of the image
• (in a non-leaf node) 4 children nodes for the 4 quadrants
Root node {1,5}
Level-1 nodes
(leaves)
CSE554
{1,3}
{2,4}
{2,4}
Quadtree
Contouring II
1
2
3
2
3
4
3
4
5
{3,5}
Grid
Slide 15
Quadtrees (2D)
• Tree building: bottom-up
Root
node
{1,5}
– Each grid cell becomes a leaf node
– Assign a parent node to every group of 4 nodes
• Compute the {min, max} of the parent node from
those of the children nodes
{1,3}
{2,4}
{2,4}
{3,5}
Leaf
nodes
• Padding dummy leaf nodes (e.g., {-∞,-∞}) if the
dimension of grid is not power of 2
CSE554
Contouring II
1
2
3
2
3
4
3
4
5
Grid
Slide 16
Quadtrees (2D)
• Tree building: a recursive algorithm
// A recursive function to build a single quadtree node
// for a sub-grid at corner (lowX, lowY) and with length len
buildNode (lowX, lowY, len)
1. If (lowX, lowY) is out of range: Return a leaf node with {-∞,-∞}
2. If len = 1: Return a leaf node with {min, max} of corner values
3. Else
1. c1 = buildNode (lowX, lowY, len/2)
2. c2 = buildNode (lowX + len/2, lowY, len/2)
3. c3 = buildNode (lowX, lowY + len/2, len/2)
4. c4 = buildNode (lowX + len/2, lowY + len/2, len/2)
5. Return a node with children {c1,…,c4} and {min, max} of all
{min, max} of these children
// Building a quadtree for a grid whose longest dimension is len
Return buildNode (1, 1, 2^Ceiling[Log[2,len]])
CSE554
Contouring II
Slide 17
Quadtrees (2D)
• Tree building: bottom-up
Root
node
{1,5}
– Each grid cell becomes a leaf node
– Assign a parent node to every group of 4 nodes
• Compute the {min, max} of the parent node from
those of the children nodes
{1,3}
{2,4}
{2,4}
{3,5}
Leaf
nodes
• Padding background leaf nodes (e.g., {-∞,-∞}) if the
dimension of grid is not power of 2
– Complexity: O(n)
• Total number of nodes in the tree is < 2n
1
2
3
2
3
4
3
4
5
• But we only need to do this once (after that, the
tree can be used to speed up contouring at any isovalue)
CSE554
Contouring II
Grid
Slide 18
Quadtrees (2D)
• Contouring with a quadtree: top-down
– Starting from the root node
Root
node
{1,5}
iso-value
= 2.5
– If {min, max} of the node encloses the iso-value
• If the node is not a leaf, search within each of its
children
{1,3}
{2,4}
{2,4}
{3,5}
Leaf
nodes
• If the node is a leaf, contour in that grid cell
CSE554
Contouring II
1
2
3
2
3
4
3
4
5
Grid
Slide 19
Quadtrees (2D)
• Contouring with a quadtree: a recursive algorithm
// A recursive function to contour in a quadtree node
// for a sub-grid at corner (lowX, lowY) and with length len
contourNode (node, iso, lowX, lowY, len)
1. If iso is within {min, max} of node
1. If len = 1: do Marching Squares in this grid square
2. Else (let the 4 children be c1,…,c4)
1. contourNode (c1, iso, lowX, lowY, len/2)
2. contourNode (c2, iso, lowX + len/2, lowY, len/2)
3. contourNode (c3, iso, lowX, lowY + len/2, len/2)
4. contourNode (c4, iso, lowX + len/2, lowY + len/2, len/2)
// Contouring using a quadtree whose root node is Root
// for a grid whose longest dimension is len
contourNode (Root, iso, 1, 1, 2^Ceiling[Log[2,len]])
CSE554
Contouring II
Slide 20
Quadtrees (2D)
• Contouring with a quadtree: top-down
– Starting from the root node
Root
node
{1,5}
iso-value
= 2.5
– If {min, max} of the node encloses the iso-value
• If the node is an intermediate node, search
within each of its children nodes
{1,3}
{2,4}
{2,4}
{3,5}
Leaf
nodes
• If the node is a leaf, output contour in that grid
square
– Complexity: (at most) O(k*Log(n))
• Much faster than O(k+n) (Marching Squares) if
1
2
3
2
3
4
3
4
5
k<<n
• But not efficient when k is large (can be as slow
Grid
as O(n))
CSE554
Contouring II
Slide 21
Quadtrees (2D)
Marching Squares
O(n+k)
1.2
1.0
Running
time
(seconds)
0.8
0.6
Quadtree
O(k*Log(n))
0.4
0.2
0
CSE554
50
100
150
Contouring II
200
250
Iso-value
Slide 22
Quadtrees (2D): Summary
• Algorithm
– Preprocessing: building the quad tree
• Independent of iso-values
– Contouring: traversing the quad tree
– Both are recursive algorithms
• Time complexity
– Tree building: O(n)
• Slow, but one-time only
– Contouring: O(k*Log(n))
CSE554
Contouring II
Slide 23
Octrees (3D): Overview
• Algorithm: similar to quadtrees
– Preprocessing: building the octree
• Each non-leaf node has 8 children nodes, one for each octant of grid
– Contouring: traversing the octree
– Both are recursive algorithms
• Time complexity: same as quadtrees
– Tree building: O(n)
• Slow, but one-time only
– Contouring: O(k*Log(n))
CSE554
Contouring II
Slide 24
Speeding Up Contouring
• Data structures that allow faster query of active cells
– Quadtrees (2D), Octrees (3D)
• Hierarchical spatial structures for quickly pruning large areas of inactive cells
• Complexity: O(k*Log(n))
– Interval trees
• An optimal data structure for range finding
• Complexity: O(k+Log(n))
CSE554
Contouring II
Slide 25
Interval Trees
• Basic idea
– Each grid cell occupies an interval of values {min, max}
• An active cell’s interval intersects the iso-value
– Stores all intervals in a search tree for efficient intersection queries
• Minimizes the “path” from root to all leaves intersecting any given iso-value
0
255
Iso-value
CSE554
Contouring II
Slide 26
Interval Trees
• A binary tree
– Root node: all intervals in the grid
– Each node maintains:
• δ: Median of end values of all intervals (used to split the children intervals)
• (in a non-leaf node) Two children nodes
– Left child: intervals strictly lower than δ
– Right child: intervals strictly higher than δ
• Two sorted lists of intervals intersecting δ
– Left list (AL): ascending order of min-end of each interval
– Right list (DR): descending order of max-end of each interval
CSE554
Contouring II
Slide 27
Interval Trees
AL: d,e,f,g,h,i
DR: i,e,g,h,d,f
AL: a,b,c
DR: c,a,b
Interval tree:
δ=7
δ=4
AL: j,k,l
DR: l,j,k
δ=10
AL: m
DR: m
δ=12
Intervals:
CSE554
Contouring II
Slide 28
Interval Trees
• Intersection queries: top-down
– Starting with the root node
• If the iso-value is smaller than δ
– Scan through AL: output all intervals whose min-end is smaller than iso-value.
– Go to the left child.
• If the iso-value is larger than δ
– Scan through DR: output all intervals whose max-end is larger than iso-value.
– Go to the right child.
• If iso-value equals δ
– Output AL (or DR).
CSE554
Contouring II
Slide 29
Interval Trees
AL: d,e,f,g,h,i
DR: i,e,g,h,d,f
AL: a,b,c
DR: c,a,b
Interval tree:
δ=7
δ=4
iso-value = 9
AL: j,k,l
DR: l,j,k
δ=10
AL: m
DR: m
δ=12
Intervals:
CSE554
Contouring II
Slide 30
Interval Trees
AL: d,e,f,g,h,i
DR: i,e,g,h,d,f
AL: a,b,c
DR: c,a,b
Interval tree:
δ=7
δ=4
iso-value = 9
AL: j,k,l
DR: l,j,k
δ=10
AL: m
DR: m
δ=12
Intervals:
CSE554
Contouring II
Slide 31
Interval Trees
AL: d,e,f,g,h,i
DR: i,e,g,h,d,f
AL: a,b,c
DR: c,a,b
Interval tree:
δ=7
δ=4
iso-value = 9
AL: j,k,l
DR: l,j,k
δ=10
AL: m
DR: m
δ=12
Intervals:
CSE554
Contouring II
Slide 32
Interval Trees
• Intersection queries: top-down
– Starting with the root node
• If the iso-value is smaller than δ
– Scan through AL: output all intervals whose min-end is smaller than iso-value.
– Go to the left child.
• If the iso-value is larger than δ
– Scan through DR: output all intervals whose max-end is larger than iso-value.
– Go to the right child.
• If iso-value equals δ
– Output AL (or DR).
– Complexity: O(k + Log(n))
• k: number of intersecting intervals (active cells)
• Much faster than O(k+n) (Marching squares/cubes)
CSE554
Contouring II
Slide 33
Interval Trees
• Tree building: top-down
– Starting with the root node (which includes all intervals)
– To create a node from a set of intervals,
• Find δ (the median of all ends of the intervals).
• Sort all intervals intersecting with δ into the AL, DR
• Construct the left (right) child from intervals strictly below (above) δ
– A recursive algorithm
CSE554
Contouring II
Slide 34
Interval Trees
Interval tree:
Intervals:
CSE554
Contouring II
Slide 35
Interval Trees
AL: d,e,f,g,h,i
DR: i,e,g,h,d,f
δ=7
Interval tree:
Intervals:
CSE554
Contouring II
Slide 36
Interval Trees
AL: d,e,f,g,h,i
DR: i,e,g,h,d,f
AL: a,b,c
DR: c,a,b
Interval tree:
δ=7
δ=4
Intervals:
CSE554
Contouring II
Slide 37
Interval Trees
AL: d,e,f,g,h,i
DR: i,e,g,h,d,f
AL: a,b,c
DR: c,a,b
Interval tree:
δ=7
δ=4
AL: j,k,l
DR: l,j,k
δ=10
Intervals:
CSE554
Contouring II
Slide 38
Interval Trees
AL: d,e,f,g,h,i
DR: i,e,g,h,d,f
AL: a,b,c
DR: c,a,b
Interval tree:
δ=7
δ=4
AL: j,k,l
DR: l,j,k
δ=10
AL: m
DR: m
δ=12
Intervals:
CSE554
Contouring II
Slide 39
Interval Trees
• Tree building: top-down
– Starting with the root node (which includes all intervals)
– To create a node from a set of intervals,
• Find δ (the median of all ends of the intervals).
• Sort all intervals intersecting with δ into the AL, DR
• Construct the left (right) child from intervals strictly below (above) δ
– A recursive algorithm
– Complexity: O(n*Log(n))
• A linear sweep at each level of the tree
• Depth of the tree is Log(n) (as a result of using the median to split)
• Again, this is one-time only
CSE554
Contouring II
Slide 40
Interval Trees
Marching Squares
O(n+k)
1.2
1.0
Running
time
(seconds)
0.8
Quadtree
O(k*Log(n))
0.6
Interval tree
O(k+Log(n))
0.4
0.2
0
CSE554
50
100
150
Contouring II
200
250
Iso-value
Slide 41
Interval Trees: Summary
• Algorithm
– Preprocessing: building the interval tree
• Independent of iso-values
– Contouring: traversing the interval tree
– Both are recursive algorithms
• Tree-building and traversing are same in 2D and 3D
• Time complexity
– Tree building: O(n*log(n))
• Slow, but one-time
– Contouring: O(k+log(n))
CSE554
Contouring II
Slide 42
Further Readings
• Quadtree/Octrees:
– “Octrees for Faster Isosurface Generation”, Wilhelms and van Gelder (1992)
• Interval trees:
– “Dynamic Data Structures for Orthogonal Intersection Queries”, by Edelsbrunner
(1980)
– “Speeding Up Isosurface Extraction Using Interval Trees”, by Cignoni et al. (1997)
CSE554
Contouring II
Slide 43
Further Readings
• Other acceleration techniques:
– “Fast Iso-contouring for Improved
Interactivity”, by Bajaj et al. (1996)
• Growing connected component of active
cells from pre-computed seed locations
– “View Dependent Isosurface Extraction”,
Livnat and Hansen
by Livnat and Hansen (1998)
• Culling invisible mesh parts
– “Interactive View-Dependent Rendering
Of Large Isosurfaces”, by Gregorski et al.
(2002)
• Level-of-detail: decreasing mesh
resolution based on distance from the
viewer
CSE554
Contouring II
Gregorski et al.
Slide 44