Docstoc

Noise

Document Sample
Noise Powered By Docstoc
					3D Skeletons Using Graphics
         Hardware



       Jonathan Bilodeau
          Chris Niski
Outline
• Background
• Goal
• Method
  – Find points that lie on the graph
  – Extract vertices/edges from points
• Results
• Problems
• Future Work
Background
• Two general techniques for computing shape
  descriptors
  – Statistical shape descriptors
  – Structural shape descriptors
• Statistical shape descriptors work well when
  comparing objects that cannot be deformed
• Also need to potentially store large amounts
  of data
Background
• Structural shape descriptors are simple
  geometrical descriptions of a more complex
  model
• Generally the structural shape descriptor
  takes the form of a skeleton of the mesh
• Skeleton representation is efficient if properly
  computed as it takes up little space, and can
  compare deformed objects, as well as
  perform partial matching
Computing the skeleton
• In 2D the traditional method of
  computing the skeleton is to use the
  Euclidian Distance Transform
  – Basically find the center line of a 2d
    contour
  – Another method is to use waves
    propagating inward from the surface
   Surface
                                  EDT
• Example borrowed from Mishas class notes
• The EDT is expensive to compute
  – On2m for 2D
  – On3m for 3D
• No good/fast 3D equivalent
  – Usually mesh thinning is used to calculate
    the skeleton
Goal
• Using graphics hardware, create a 3D graph
  of a model
  –   Slice the model along each coordinate axis
  –   Find 2D skeleton with GH, merge them
  –   Find intersection
  –   Extract graph
• Capture 3d axis information
• Intersection will remove random noise
• Simple transition to a graph
  – only vertices and edges
  – No sheets
Method
• Voxelize the model
• Consider each slice of the volume along
  each axis
  – Gives you a 2D contour
• Compute the skeleton of each 2D
  contour
Method – Finding 2D skeleton
• Using Graphics
  hardware
  – For each point on
    the contour draw a
    code centered on the
    point, pointing at the
    viewer.
  – Read back the depth
    buffer
  – Analogous to a
    distance transform
Method – Finding 2D skeleton
• Look for
  discontinuities in the
  EDT
   – Scan columns/rows
     looking for points
     where both
     neighbors are
     smaller
   – Every point that
     passes is marked
     true
Method
• Output is a 2D skeleton
• Merge the 2D skeletons into a volume
  again
• Intersect each volume
  – One from each axis
Method – Noise
                 • Noise around the
                   perimeter
Method – Noise
                 • Red dots
                   indicate points
                   that allowed a
                   skeleton point in
                   the center of
                   this circle
Method – Noise Removal
                  • Angle between
                    blue lines is
                    small
                  • Remove points
                    that have a
                    small angle
Method – Noise Removal
                  • Keep points
                    above 90
                    degrees
                  • D < Sqrt(2)*R
Method
• Once the EDT of the mesh is calculated
  we need to fit a skeleton to the
  resulting points
• The EDT voxel grid is not necessarily
  connected, ie. Voxels may not have
  neighbours
Fitting Skeleton
• Start by assigning an edge to each point that
  has several neighbours
• Begin merging the edges based on several
  criteria
  – Distance between the two edges
  – Length of the edges
  – The angle between the two edges
• Stop merging when no suitable candidates
  are present
Fitting Skeleton
• We also discard some of the edges
  – If they are short and do not have an edge
    to merge with
  – Not attached to the rest of the graph
Results
• We can extract a voxel grid containing
  the mesh skeleton
• Filter the grid to remove some of the
  noise
• Fit a skeleton onto the grid to
  compactly represent the grid points
Sample results
Problems - Voxelation
• Still can’t remove
  all the noise
  – Have to be
    conservative with
    the noise test or
    else you throw
    out large chunks
    of the valid
    skeleton
Problems - Orientation
• Objects that aren’t axis aligned don’t
  work.
• Results in sheets
  – Traditional 3D MA has sheets
  – Contradicts one of our goals
Problems
• General problems with skeleton based
  approach:
  – The skeleton is not very descriptive
  – Can be very susceptible to noise
  – If connectivity changes after deformation,
    comparison becomes very difficult
  – Hard to capture just the right amount of
    detail
• Problems with our approach:
  – Our version of the EDT still creates noise
    around the surface of the mesh

  – Noise on the surface of the mesh creates
    false edges which can merge with good
    edges
Future Work
• Try other methods for finding 2D
  skeleton that are less prone to noise
  – Before voxelation?
  – High resolution 2D images that get down
    sampled?
     • Can’t keep high resolution for 3D
     • What affect would aliasing have?
Future Work
• Orientation problem
  – Instead of using the coordinate axis, find
    the EGI with a relatively small number of
    bins.
    • Flip any normals with –z components
  – Find axis volume relative to the dominant
    normals
    • Problem lining up volumes with arbitrary
      rotations

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:9
posted:7/2/2012
language:
pages:32