Smoothing
by Ben Anderson
Given that regardless of what we do, using Marching Cubes on slice data
means we cannot compute the exact intersection of the surface with the
vertical edges of our cubes, in order to get realistic looking images,
we must do a little smoothing. On approach to doing this is
described in Taubin's paper[4] on
smoothing without shrinkage. In the paper a method of smoothing
called "Gaussian smoothing" is described. In order to perform a
Gaussian smoothing operation on triangle mesh, you take each vertex in
the mesh and find the average difference between that point and all the
vertices of the triangles which include that point. You then
adjust the vertex by some scaling factor of this distance (say
.33). The problem with this method, is that given a closed
object, this will always result in shrinkage. Take a circle
approximated by line segments as a 2D example:
As you can see, once the smoothing operation is performed on all
vertices, the circle will have shrunk:
(the green line represents the new location of the circle).
To counteract this effect, Taubin's paper suggests performing a second
iteration of Gaussian smoothing, this time using a negative scaling
factor slightly larger in magnitude than the one used on the first
iteration (say -0.34 if on the first pass you used 0.33). This
has the effect of pushing the shape back out again. Visualizing
this is left as an exercise to the reader. In 3D, the result is a
much smoother image. Whereas before we had this:
We now have this (after 90 cycles of non-shrinking smoothing):
Notice that not only is the foot much more smooth, but details such as
toenails are appearing. This is because not only does smoothing
make the image more smooth, in the horizontal direction, it makes the
surface approximation more accurate.
This is due to the fact that horizontally the shape more closely
matches the original now that the stair-stepping/plateau effect has
been eliminated and much of the overdrawn/underdrawn area has been
eliminated.
Now on to decimation.