Selecting and Deleting Contours
In three dimensions, one of the principal difficulties in isosurface rendering is
occlusion: one surface concealing or blocking another surface. To deal with this, we exploit the ability of the contour tree to generate seeds for specific contours, and provide the user with the ability to
delete or
disable contour surfaces that are of small interest. We do this through the familiar user interface metaphor of
selection and
operation, selecting an object (a surface) visually with the mouse, then applying an operation (deletion). One way of thinking of this is that we simply assign the colour "invisible" to the surface to be deleted. We can also delete all contours
except one, as a means of isolating the contour for further study.
 |
 |
|
A contour (in grey) has been selected
|
The grey contour has been deleted
|
 |
 |
|
Another contour (in grey) has now been selected
|
The grey contour has been isolated by deleting other contours
|
|
Subtracting a Contour from an Isosurface
|
Evolving Contours
Deletion is not the only useful operation we can apply to a contour. One common use of isosurfaces is to explore the data by varying the isovalue that defines the isosurface and watching the evolution of the contours. We extend this to permit the evolution of a single contour, which may split apart into multiple pieces or may join with other pieces, or both.
 |
 |
|
A contour (in grey) has been selected
|
The grey contour has been evolved to a new isovalue
|
|
Evolving a Contour
|
Flexible Isosurfaces:
Because each contour corresponds to a single point in the contour tree, these operations are easily represented using the contour tree. Instead of an
isosurface consisting of all the contours at a fixed isovalue, we define a
flexible isosurface to be any set of contours, which may or may not share an isovalue. Our operations now become:
- Isosurface Initialization: Choose an isosurface as a point of departure, and add its contours to our flexible isosurface.
- Contour Selection: Associate an identifier with each surface as it is rendered. For any surface selected visually, retrieve the corresponding identifier and locate the contour in the flexible isosurface and in the contour tree.
- Contour Deletion: Remove the selected contour from the flexible isosurface
- Contour Isolation: Remove all contours from the flexible isosurface except the selected one.
- Contour Evolution: Trace ascending (or descending) paths in the contour tree to determine all contours to which the selected one will evolve.
Other operations are possible. We can use the contour tree for largest contour segmentation: identifying the set of maximal surfaces containing only one local maximum. And, although we can delete contours visually, adding contours that are not already present depends on identifying which contours are of interest to us. A simple mechanism for this is to show the contour tree itself as a means of choosing contours: