next up previous
Next: CT Head: Effect of Up: Results Previous: Turbine Blade: Effect of


Engine Block: Effectiveness of two dimensional opacity functions

The CT scan of the ``engine block'' has become a reference dataset which appears throughout the volume rendering literature. While the method for one dimensional opacity function generation works passably with the dataset, the two dimensional opacity functions are very effective.

The dataset is available with the Stanford VolPack volume rendering library distribution, or can be downloaded from the Stanford Computer Graphics Laboratory web page11. It is a $ 256 \times 256 \times 110$ volume of 8-bit values. Because the CT scan contains a lot of background (air), the dataset can be significantly cropped without impinging on the engine block itself12. We use the Hessian second derivative measure to produce a $ 256^3$ histogram volume which includes first derivative values between zero and 126.7 and second derivative values between -127.6 and 127.6.

Figure 6.6: Analysis and renderings of engine block with one dimensional opacity functions
engineinfo.jpg

Figures 6.6(a) through 6.6(c) show a slice of the dataset and the two scatterplots. As mentioned in Section 4.4, there is the obvious mark of a boundary between the data values around 10 and 140, as well as fainter indications of boundaries between 140 and 255, and between 10 and 255. Incidently, from the fact that the curves ending at value 255 appear to be clipped on their right side, we can infer that the quantization of the raw data to eight bit values involved a somewhat aggressive clamping of high values.

Figures 6.6(d) through 6.6(f) are the plots of $ g(v)$, $ h(v)$, and $ p(v)$ calculated from the histogram volume. The plot of $ g(v)$ includes an indication of the $ g_{thresh}$ which was used for this dataset. Like the nested cylindrical shells which were analyzed in Section 5.2, the engine block has three boundaries, including one spanning the highest and lowest values, from about 10 to 255. As is visible in the scatterplot of second derivative versus data value, the presence of this boundary exerts a negative influence on the average second derivative for the data values above 140, which pushes the plot of $ h(v)$ downward for the same range of values. Offsetting the location of the sign change in $ h(v)$ in turn causes the curious shape of the $ p(v)$ graph-- around value 150 the graph of $ p(v)$ turns upward, not downward as we would expect. Because $ h(v)$ is negative instead of positive at the data value $ v$ where $ g(v) - g_{thresh}$ is zero, in accordance with Equation 5.10, $ p(v)$ is positive instead of negative. However, the lower boundary, between 10 and 140, has such a greater surface area that it is not influenced by the other boundary, thus for lower data values, the plots of $ g(v)$, $ h(v)$, and $ p(v)$ look as they should.

This demonstrates that datasets containing boundaries with overlapping ranges of data value cannot be correctly analyzed with this algorithm to produce accurate opacity functions of data value alone. In spite of this, the algorithm still generates passable results. Using a simple triangular spike centered at $ x=0.1$ and extending one unit on each side for the boundary emphasis function (Figure 6.6(g)), the opacity function generated (Figure 6.6(h)) produced the rendering seen in Figure 6.6(j). The outer boundary is rendered well. The boundary emphasis function was centered at $ x=0.1$ instead of $ x=0$ to reduce the amount of air which is erroneously made opaque. Manually removing the lower of the two bumps in $ \alpha (v)$ produced the rendering seen in Figure 6.6(k). We see that the surface boundaries are partially occluded by voxels which are not part of the boundary and should have been made opaque. This is caused by the small spike on the left side of the higher bump in $ \alpha (v)$. Manually removing it (Figure 6.6(i)), we see the higher material boundary clearly (Figure 6.6(l)).

We now render the same dataset using two dimensional opacity functions. The first step is to calculate the function $ p(v,g)$ from Equation 5.13. The result is shown in Figure 6.7(a), with the aid of a colormap which is blue for negative values, orange for positive values, with a dark portion near zero. Because of this dark portion, we can see in the image of $ p(v,g)$ those places in $ (v,g)$ space where the position is near zero, which corresponds to the middle of a boundary. The three dark regions visible in the image of $ p(v,g)$ help clarify the fact that there are three boundaries in the engine block dataset, even if the three curves in the first derivative versus data value scatterplot (Figure 6.6(b)) aren't easily visible. The same boundary emphasis function used earlier for one dimensional opacity function generation is used again to generate the two dimension opacity function seen in Figure 6.7(b). Three regions in the opacity function have been outlined and labeled; the placement of these outlines was established by the locations of the positive and negative positions visible in the $ p(v,g)$ image.

Figure 6.7: Analysis and renderings of engine block using two dimensional opacity functions. Renderings (d), (e), and (f) use only some regions of the $ \alpha (v,g)$ in (b) and assign zero opacity outside the regions.
enginerend.jpg

The opacity function was used unchanged to produce the rendering in Figure 6.7(c). For Figure 6.7(d), the regions 1, 2, and 3 of the opacity function were included, excluding the small area below region 1, thereby removing the small pieces of background which were incorrectly made opaque in the previous rendering. The outer surface in this rendering is noticeably cleaner and more consistent than that seen in the rendering from the one dimensional opacity function, Figure 6.6(j). Next, region one was removed from the opacity function to show the surface of the higher material components of the dataset (Figure 6.7(e)). Next, region two is removed from the opacity function, producing a rendering (Figure 6.7(f)) which shows only the boundary between the highest and lowest data values. Comparing the last two renderings, we learn structural information about the dataset which cannot be visualized with any one dimensional opacity function.


Footnotes

... page11
ftp://www-graphics.stanford.edu/pub/volpack/data/engine/
... itself12
Along the X axis, we use voxels 56 through 211 inclusively; along the Y axis, 16 through 224.

next up previous
Next: CT Head: Effect of Up: Results Previous: Turbine Blade: Effect of