- Mathematical Boundary Analysis
- Opacity functions of data value
- Opacity functions of data value and gradient magnitude

In order to develop a method for opacity function generation that uses our boundary model and the information stored in the histogram volume, it is helpful to look at the equation we have used to describe the ideal boundary data value as a function of position:

Just as we have taken ``position'' to always be along an axis pointing
in the gradient direction, we define zero to always be the position of
the inflection point in the boundary.
and
are the
data values of the materials on either side of the boundary. As
ranges from
to ,
ranges from
to
.
The parameter controlling the amount of boundary blurring is .
The first and second derivatives of
are as follows:

Our choice of boundary parameterization means that
is a
Gaussian, with
being the usual standard deviation. Since the
Gaussian has inflection points at , this is where
attains its extrema. The same positions can serve as artificial
delimiters for the extent of the boundary -- we *define* the
``thickness'' of the boundary to be . Note that the
thickness of a boundary can be recovered if the maximum values of
and
are known:

More importantly, once is known, we can recover the position knowing only the values of and :

Before using Eqn. 10 as the basis for opacity function generation, we define some important functions of data value: is the average first directional derivative of over all the positions at which , and is likewise the average second directional derivative at value . These two functions can be obtained from the histogram volume by slicing it at data value , and finding the centroid of the scatterplot of and at that value. The axis coordinate of the centroid is , and the axis coordinate is .

Knowing
and
for all , one can find the ratio of their
maxima to recover
with Eqn. 9, assuming
that
attains its maxima at , and that
attains its maxima
at
. With this information, we define a mapping
from data value to an approximate position along a boundary:

Roughly speaking, tells us on which side of the nearest boundary a data value tends to fall. For values closer to , will be negative; for values closer to , will be positive. In practice, we have found it useful to modify Eqn. 11 to account for the fact that the gradient magnitude at the interior of materials is rarely exactly zero. Knowing how it differs from zero is again a matter of experience, but assuming one can find a which approximates the ambient gradient magnitude, Eqn. 11 is re-formulated, with a slight loss of mathematical accuracy, as

(12) |

The user supplies the last piece of information needed: a function
we term the *boundary emphasis function*, which maps from
position along a boundary to opacity. As the intent is to make only
boundaries visible in the rendering,
should be non-zero only
near zero. For this reason, we have not been especially careful to
prevent
from attaining infinite values due to a low ;
such a data value
should not contribute to the final image. With
, the user can directly control whether rendered boundaries will
appear thick or thin, sharp or fuzzy, and the proximity of the
rendered boundary to the object interior. The final opacity function
is then defined as

Instead of exploring the parameter space of all possible opacity
functions, the user explores the parameter space of
and lets
the information from the histogram volume, embodied in ,
constrain the search to those opacity functions which display object
boundaries. Defining opacity as a function of position within a
boundary then becomes a more intuitive task than defining opacity as a
function of data value, as there is a more predictable relationship
between changes made to the boundary emphasis function and the
corresponding change in rendered results. As there is a potential for
inaccuracy in the calculation of
from Eqn. 9,
the user may need to experiment with different scalings in the domain
of . Fig. 11 shows how the choice of boundary
emphasis function affects the opacity function and the rendered image,
for a synthetically created dataset containing two concentric spheres
at distinct data values. It should be stressed that the user does not
set the location of the peaks in , since this is determined
by the information in , but the user can influence the location,
as well as the width, height, and shape of the peaks.
This is the
main benefit of this method: if the histogram volume has successfully
captured information about the boundaries in the dataset, the user
enjoys high-level control over the character of the rendered
boundaries without having to worry about the exact specification of
. Yet, the
so generated is sensible enough
that it could be edited by hand if desired. For example, since this
technique will attempt to make *all* boundaries opaque, a useful
supplement to the interface would be a feature which allows supression
of the peaks in
for one or more boundaries.

Even though we have made some strong assumptions about the boundary characteristics in the volume dataset, the technique described here typically works well even if the material boundaries are not ``ideal''. Essentially, by taking the ratio of the second and first derivatives, and by having assign opacity to positions around zero, we are more apt to make opaque those data values associated with both low second derivatives and high first derivatives. Or, even if is not a perfect indicator of ``position relative to boundary'', the sign change in around its zero-crossing affords us some control over whether we want to emphasize regions closer to or further from the object's interior. Fig. 12 (colorplate) on the accompanying colorplate shows a rendering of an MRI dataset which does not have ideal boundaries but for which this technique still works.

So far the opacity functions under consideration have assigned opacity based on data value alone. Higher quality renderings can sometimes be obtained, however, if the opacity is assigned as a function of both data value and gradient magnitude. Defining these two-dimensional opacity functions by hand is especially challenging because there are even more degrees of freedom than in one-dimensional, value-based opacity functions. Fortunately, the ideas presented so far easily generalize to allow semi-automatic generation of two-dimensional opacity functions.

Analogous to the definition of , we define
to be
average second derivative over all locations where the data value is
and the gradient magnitude is ; this is also easily calculated
from the histogram volume. We similarly define a new position
function, and from that an opacity function:

is calculated as before; the ratio of the extremum of the average first and second derivatives. The benefit of this kind of opacity function is that it can distinguish between boundaries that have overlapping ranges of values. For instance, the nested cylinders volume in Fig. 9 and the engine block volume in Fig. 10 each have one boundary which overlaps the two other boundaries in data value, spanning from the higher of the two material values to the background value. Selectively rendering this single boundary is impossible with a value-based opacity function, but because the boundary has a distinct curve in the plot of data value versus first derivative, it is possible to create an opacity function which selects only the voxels comprising this boundary. As it did in the case of value-based opacity functions, the technique presented here will generate two-dimensional opacity functions which make all detected boundaries opaque; a simple ``lasso'' tool could then be used to select different regions in the two-dimensional opacity function to render one boundary at a time. In Fig. 13 (colorplate), the feet of the female Visible Human CT dataset [17] are rendered with four different two-dimensional opacity functions. Using a modification of an automatically generated opacity function, one rendering shows almost exclusively the registration cord laced around the body prior to scanning.

The lower right rendering in Fig. 13 demonstrates another advantage of two-dimensional opacity functions -- the ability to accurately render the surface of a material which attains a wide range of data values, as is the case for the bone tissue in this same CT scan. Different parts of the bone surface are more radio-opaque than others, leading to a wide range of data values associated with bone, which in turn causes a wide range of gradient magnitudes within the boundary region between bone and soft tissue. Knowing the average second derivative for each location in space, we can make opaque only those voxels near the middle of the boundary (near the zero-crossing in ), regardless of the bone data value. As is visible in the opacity function generated with Eqn. 14, this implies that as gradient magnitude increases, there is an upward shift in the data values which should be made most opaque. This kind of careful opacity assignment is not possible with a simple value-based opacity function, though it is reminiscent of the two-dimensional opacity functions described by Levoy [11]. Although space does not permit a detailed comparison between our approach and Levoy's, the main difference is that (ideally) the measured first and second derivative information serves to constrain the opacity function generation so as to only show boundaries, while in Levoy's method the user still has to experiment to find the right parameter settings.