# lect04_Contouring

CSE 554
Lecture 4: Contouring
Fall 2013
CSE554
Contouring
Slide 1
Review
• Binary pictures
– Pros: natural geometric form for
bio-medical data; simple to
operate on
– Cons: blocky boundary; costly
to store or visualize (particularly
in 3D).
CSE554
Contouring
Slide 2
Geometric Forms
Curves
• Continuous forms
Surfaces
– Defined by mathematical functions
– E.g.: parabolas, splines, subdivision
y  x2
surfaces
z  Sin[ x]Sin[ y]
• Discrete forms
– Disjoint elements with connectivity
Polyline
relations
Triangle surfaces
– E.g.: polylines, triangle surfaces, pixels
and voxels
Pixels
CSE554
Contouring
Voxels
Slide 3
Boundary Representations
• Polylines (2D) or meshes (3D) that tile the object boundary
– Smoother appearance
– Less storage (no interior elements)
Binary picture
CSE554
Contouring
Boundary mesh
Slide 4
Boundary Representations
• We will cover (in a sequence of lectures):
– Creating a boundary curve (surface) from a grayscale image (volume)
– Denoising and simplifying the geometry
– Aligning two boundary geometry
CSE554
Contouring
Slide 5
Thresholding - Revisited
• Creates a binary picture from a grayscale image
• How to create a smooth boundary at the threshold?
– Such boundary is known as an iso-contour (or iso-curve, iso-surface, etc.)
Digital image
CSE554
Binary picture
Contouring
Boundary curve
Slide 6
Definition
• Iso-contour: set of points at a particular function value
– Given a continuous function f defined on every point in the space
– An iso-contour is all points where f evaluates to be some value c (called
the iso-value)
CSE554
Contouring
Slide 7
Definition
• Iso-curves: iso-contours of 2D functions
{{x, y} | f ( x, y )  c}
f ( x, y)  x2  y 2
f ( x, y )  1
CSE554
Contouring
Slide 8
Definition
• Iso-surfaces: iso-contours of 3D functions
{{x, y, z} | f ( x, y, z )  c}
f ( x, y, z)  x2  y 2  z 2
f ( x, y, z )  1
CSE554
Contouring
Slide 9
Iso-contour Properties
• Closed
– With a well-defined inside and outside
• Inside: points above the iso-value
• Outside: points below the iso-value
• In general, a manifold
– A non-degenerate curve (surface)
without branching
– Except where the gradient vanishses
Black curves: iso-contours
Green dots: critical points
• Critical points
CSE554
Contouring
Slide 10
Discrete Iso-contours
• An image is a sampling of some continuous function f
– We approximate the continuous iso-contours of f with discrete polylines or
meshes (known as contouring)
– The discrete iso-contour separates the pixels (voxels) with values lower
then the iso-value from those with values higher than the iso-value.
f(x,y)
y
x
CSE554
Contouring
Slide 11
“Good” Approximations
• Closed (with inside and outside)
– Polyline: a vertex is shared by even # of edges
Closed
Manifold
– Mesh: an edge is shared by even # of polygons
• Manifold
– Polyline: a vertex is shared by 2 edges
Open
Non-manifold
– Mesh: an edge is shared by 2 polygons, and a
vertex is contained in a ring of polygons
• Non-intersecting
Closed
Non-manifold
Intersecting
CSE554
Contouring
Slide 12
“Good” Approximations
• Closed (with inside and outside)
– Polyline: a vertex is shared by even # of edges
– Mesh: an edge is shared by even # of polygons
• Manifold
– Polyline: a vertex is shared by 2 edges
– Mesh: an edge is shared by 2 polygons, and a
vertex is contained in a ring of polygons
• Non-intersecting
CSE554
A closed, manifold
triangular mesh
Contouring
Slide 13
“Good” Approximations
• Closed (with inside and outside)
– Polyline: a vertex is shared by even # of edges
– Mesh: an edge is shared by even # of polygons
• Manifold
– Polyline: a vertex is shared by 2 edges
– Mesh: an edge is shared by 2 polygons, and a
vertex is contained in a ring of polygons
• Non-intersecting
CSE554
A closed, manifold
triangular mesh
Contouring
Slide 14
Contouring (On A Grid)
• Input
– A grid where each grid point
Grid point
(pixel)
(pixel or voxel) has a value (color)
Grid edge
– An iso-value (threshold)
Grid cell
• Output
– A closed, manifold, nonintersecting polyline (2D) or mesh
(3D) that separates grid points
above or below the iso-value
Iso-value =
CSE554
Contouring
Slide 15
Contouring (On A Grid)
• Input
– A grid where each grid point
(pixel or voxel) has a value (color)
– An iso-value (threshold)
• Output
– Equivalently, we extract the zerocontour (separating negative from
positive) after subtracting the isovalue from the grid points
Iso-value = 0
negative
CSE554
Contouring
positive
Slide 16
Algorithms
• Primal methods
– Marching Squares (2D), Marching
Cubes (3D)
– Placing vertices on grid edges
• Dual methods
– Dual Contouring (2D,3D)
– Placing vertices in grid cells
CSE554
Contouring
Slide 17
Marching Squares (2D)
• For each grid cell with a sign
change
– Create one vertex on each grid edge
with a sign change
– Connect vertices by lines
CSE554
Contouring
Slide 18
Marching Squares (2D)
• Creating vertices
– Assuming the underlying, continuous function is linear on the grid edge
– Linearly interpolate the positions of the two grid points
f1
f
+
0
t
{x0,y0}
f0
t
f 0  f1
1-t
{x1,y1 }
{x,y}
x  x0  t ( x1  x0 )
y  y0  t ( y1  y0 )
-
f0
CSE554
Contouring
Slide 19
Marching Squares (2D)
• Connecting vertices by lines
1
1
– Lines shouldn’t intersect
2
4 Key: 0 0 0 1
3
– Each vertex is used once
• So that it will be used exactly twice by the
3
Data: {{2,4}}
2
4
two cells incident on the edge
• Two approaches
Key: 0 0 1 1
– Do a walk around the grid cell
Data: {{3,4}}
• Connect consecutive pair of vertices
– Or, using a pre-computed look-up table
• 2^4=16 entries
• For each sign combination at the 4 corners,
it stores the indices of the grid edges whose
vertices make up the lines.
CSE554
Contouring
Key: 1 0 0 1
Data: {{1,3},
{2,4}}
Slide 20
Marching Cubes (3D)
• For each grid cell with a sign
change
– Create one vertex on each grid edge
with a sign change (using linear
interpolation)
– Connect vertices into triangles
CSE554
Contouring
Slide 21
Marching Cubes (3D)
• Connecting vertices by triangles
– Triangles shouldn’t intersect
– To be a closed manifold:
• Each vertex used by a triangle “fan”
• Each mesh edge used by 2 triangles (if
inside grid cell) or 1 triangle (if on a
grid face)
CSE554
Contouring
Slide 22
Marching Cubes (3D)
• Connecting vertices by triangles
– Triangles shouldn’t intersect
– To be a closed manifold:
• Each vertex used by a triangle “fan”
• Each mesh edge used by 2 triangles (if
inside grid cell) or 1 triangle (if on a
grid face)
Open mesh: each magenta
edge is shared by one triangle
CSE554
Contouring
Slide 23
Marching Cubes (3D)
• Connecting vertices by triangles
– Triangles shouldn’t intersect
– To be a closed manifold:
• Each vertex used by a triangle “fan”
• Each mesh edge used by 2 triangles (if
inside grid cell) or 1 triangle (if on a
grid face)
• Each mesh edge on the grid face is
• Look-up table
Closed mesh: each edge is
shared by two triangles
– 2^8=256 entries
– For each sign configuration, it stores
indices of the grid edges whose
vertices make up the triangles
CSE554
Contouring
Slide 24
Marching Cubes (3D)
• Connecting vertices by triangles
– Triangles shouldn’t intersect
4
– To be a closed manifold:
4
7
• Each vertex used by a triangle “fan”
2
• Look-up table
8
12
3
9
inside grid cell) or 1 triangle (if on a
grid face)
8
6
• Each mesh edge used by 2 triangles (if
• Each mesh edge on the grid face is
10
2
3
5
7
1
1
6
11
5
– 2^8=256 entries
– For each sign configuration, it stores
Sign: “0 0 0 1 0 1 0 0”
Triangles: {{2,8,11},{4,7,10}}
indices of the grid edges whose
vertices make up the triangles
CSE554
Contouring
Slide 25
Implementation Notes
• Avoid computing one vertex multiple times
– Compute the vertex location once, and store it in a
hash table
• When the grid point’s value is same as the
iso-value
– Treat it either as “above” or “below”, but be
consistent.
CSE554
Contouring
Slide 26
Algorithms
• Primal methods
– Marching Squares (2D), Marching
Cubes (3D)
– Placing vertices on grid edges
• Dual methods
– Dual Contouring (2D,3D)
– Placing vertices in grid cells
CSE554
Contouring
Slide 27
Dual Contouring (2D)
• For each grid cell with a sign
change
– Create one vertex
• For each grid edge with a sign
change
– Connect the two vertices in the
CSE554
Contouring
Slide 28
Dual Contouring (2D)
• Creating the vertex within a cell
– Compute one point on each grid edge with a sign change (by linear
interpolation, as in Marching Squares/Cubes)
• There could be more than two sign-changing edges, so &gt;2 points possible
– Take the centroid of these points
CSE554
Contouring
Slide 29
Dual Contouring (3D)
• For each grid cell with a sign
change
– Create one vertex (same way as 2D)
• For each grid edge with a sign
change
– Create a quad (or two triangles)
connecting the four vertices in the
– No look-up table is needed!
CSE554
Contouring
Slide 30
Dual Contouring: Discussion
• Result is closed, but
possibly non-manifold
– Each mesh edge is shared by
– An edge may be shared by 4
Red edge is shared by 2
Red edge is shared by 4
– A vertex may be shared by 2
• Can be fixed
– But with more effort…
Center vertex is
non-manifold
CSE554
Contouring
Slide 31
MC vs. DC: Mesh quality
• Marching Cubes
–  Closed, manifold, and intersection-free
–  Often generates thin and tiny polygons
• Dual Contouring
Marching Cubes
–  Closed and intersection-free
–  Generates better-shaped polygons
–  Can be non-manifold
Dual Contouring
CSE554
Contouring
Slide 32
MC vs. DC: Duality
• The two outputs have a dual structure
– Vertices and quads of Dual Contouring correspond (roughly) to untriangulated polygons and vertices produced by Marching Cubes
Marching Cubes
CSE554
Dual Contouring
Contouring
Slide 33
MC vs. DC: Implementation
• Marching Cubes
–  Creating the triangulation table is non-trivial
• Although table-lookup is straight forward
–  Restricted to uniform grids
• Dual Contouring
–  Simple to implement
• No look-up table is needed
–  Can be applied to any type of grid
• Good for generating anisotropic meshes
DC on
uniform grid
CSE554
Contouring
DC on
octree (3D)
Slide 34