Classification is the process of assigning a color and opacity to a reconstructed function value. Transfer functions, usually implemented as lookup tables, are used for this mapping. During rendering, the reconstructed function value serves as an index for the lookup tables, which contain color and opacity values. Levoy first suggested the use of one-dimensional piecewise linear transfer functions [24]. Additionally, he used the gradient magnitude for opacity modulation, which effectively adds a second dimension. Opacity modulation enhances regions with high gradients and reduces the opacity of homogenous regions. Multi-dimensional transfer functions are a more general approach which has proven to provide more control over the appearance of the rendering [15]. However, these functions also require higher order derivatives. These have to be either pre-computed, which increases memory usage, or calculated on-the-fly, which decreases performance.
We therefore support one dimensional transfer functions including optional opacity modulation based on the gradient magnitude. Additionally, we support segmentation by assigning an object index to each voxel. For every object, an independent transfer function can be defined. Since 12 bit voxels are standard for medical datasets, the remaining 4 bits can be used for the segmentation information, as the data has to be aligned to byte boundaries for better performance. This allows up to 16 objects to be defined. A separate transfer function can be assigned to each of these objects and individual objects can be enabled or disabled (see Figure 3.4).
|