NLM Home Page VHP Home Page


Next: Mesh Up: Title Page Previous: Color Dipping Index: Full Text Index Contents: Conference Page 

Smoothing

     This algorithm produces a 3-D surface manifold mesh that can be quite striking.  However at certain viewing angles specifically edge on or near edge on, the surface looks like a stack of pancakes or series of stair-steps.  This is due to the fact that the alligator (and marching cubes) algorithm only deals with building a surface over a locally defined data set.  This data set only incorporates 8 vertices at a time, with a span of only 2 units in the x,y,or z direction.

     As an example, if a lower slice extended in the x direction 4 units more than the slice above it, one would get a flat surface for 3 of those 4 edges with the 4th edge finally sloping upwards to meet the slice above it.  For a mechanical part, this might be acceptable, but for a human organ, sharp angles and flat surfaces are not the norm.  A better approximation would be to 'connect the dots' from the lower slice to the upper where all 4 edges slope upwards.

     The above phenomenon is complicated by the fact that for the Visible Human Male, the units of dimension in the x,y and z directions are not uniform. If x and y are the dimensions of a slice, each unit is 1/3 of a mm.  The z axis or slice to slice dimension is 1 mm.  This makes the stepping in the z-direction more dramatic and visible.We use a variation of Laplacian smoothing [23] The mesh for the Vesalius project is stored as a series of vertices, edges and faces. The structure used to denote the connectivity of the mesh is a winged-edge structure first defined by Baumgart.  Let V be a set of vertices on the mesh. The neighbor vertices of a vertex v in V are all vertices that have a common edge with v. Using the winged-edge structure, the neighbors of v (Nofv) are found by finding the surrounding faces, then surrounding edges of V.  The neighbor is connected to v on the surrounding edge.

The overall smoothing sub-program is defined in the following pseudo-code segment:

for each body in the mesh
        C = MAX_C
        for smoothing iterations 1..NI
                for each vertex v in the body
                        find all Nofv
                        compute the average position of Nofv
                        multiply by C
                        subtract from v to get v'
                        replace position of v with position of v'
                 end for each vertex
                C = C - dC where dC = C/NI
        end for each iteration
end for each body

where NI is set at 500 iterations.  MAX_C is set at .5. The total amount of change was regulated by making C smaller after each iteration.

     Since the Z coordinate showed the stepping affects the most, only the position of the Z coordinate was smoothed.  The X and Y coordinate where held constant. An initial implementation of this algorithm had a tendency to 'smooth-away' the top-most and bottom-most slices of the object. By holding the top and bottom slices of the object constant, this effect was minimized. In Figure 2. and Figure 3., we can compare a 3D model of the Visible male heart obtained with our algorithm without smoothing and 3D model of a grouping of the Visible male bladder, prostate and urethra with smoothing, respectively.
 


Next: Mesh Up: Title Page Previous: Color Dipping Index: Full Text Index Contents: Conference Page