Disambiguating the Marching cubes
We saw in the marching squares that there were two (complements
of each other) ambiguous cases. In these cases the contour directions
could be one of two ways.
The 3D version suffers the same problem, and these ambiguities arise in
how
the surface within the current marching cube is defined. The ambiguity
can occur in only 6 of the 15 topological cases. Those are the cases
number 3, 6, 7, 10, 12 and 13.
An example of how an ambiguity arises, and the "hole" it creates in
the
surface is illustrated in the following figure:
The cases where the Marching Cubes can give rise to ambiguities are
identical to those observed in 2D. That is, when the cube cell face has
the same configuration as the ambiguous marching square. You will note
that in the diagram above, the shared cube cell faces has this
configuration.
Resolving the ambiguity I
Provided you are consistent with your choice, the resulting surface
should contain no ambiguities. So in the above diagram, if the left
cube
is the first in the marching sequence, then as long as you store the
edge intercepts you have chosen for case 6, the surface will be
consistent. In the next march step, you do not recalculate the
intercepts for the common face, they have been done. You then use the
triangles that would be consistent with the edge intercepts given by
the
previous calculation. The complete surface would be given by
This is the plan of attack you can take for the project. The surface
will complete though not necessarily correct.
The degree of incorrectness is likely to be small, namely because these
ambiguous cell faces do not arise often in medical visualization
applications.
Resolving the ambiguity II
The above solution resulted from a consistent, though arbitrary choice
(initially) of triangle faces. A better solution would involve a
reasonable basis for the choice, and one way would be to make your
choice based on the variation of the scalar function on the ambiguous
face.
If the diagonal connecting the two outside vertices is
crossed by the contour, then these two vertices will be separated,
this is
consistent with F varying as a trough perpendicular to the diagonal.
If the contour is parallel to the diagonal connecting the two
outside vertices, then these are not separated and this
is
consistent with F varying as a peak joining the two outside
vertices. If we sample the function F, somewhere in the middle of the
face, we can determine whether is is a trough or a peak locally.
We can't sample F, but we can estimate it.
On the vertices of the face we will have four values, B00, B01, B10 and
B11 of a scalar function F. We are interested in an iso-surface
given by F(x,y,z)=a. If we use parametric coordinates on the face, and
employ bilinear interpolation, then the bilinear estimate B(s,t) of the
scalar function F is given by,
Recall the interpolation formulae from Lecture 3. You can easily show
that the contour curves using this estimate will be hyperbolae. That is
the curves B(s,t)=a, will be hyperbolae which cut through the face,
depending of the vertex values. Examples of contours given by the
bilinear interpolant are;
If we are able to estimate the value of F at the intersection point of
the hyperbolae, then the relationship of the value of F at that point,
to the contour level "a" would give us whether the vertices are
separated or not separated.
If we designate the point on the face where the hyperbolae intersect
is [s(a), t(a)] then if ("a" is the contour level),
The point [s(a), t(a)] is given by,
Nielson and Hamann (Proceedings of Visualization '91, pp 83-91)
analyse the frequency of occurrence for the ambiguous cases. They are
infrequent, occurring some 2 orders of magnitude less often than the
nine
topological cases that do not have ambiguities. Even when the ambiguous
topologies do arise, the results indicate that the triangulations
defined by Lorenson originally are the most frequent.