This is your fourth assignment for CS 5630/6630.
The assignment is due at midnight on Monday Nov 17, 2008. You will need to use the CADE handin functionality to turn in your assignment. The class account is "cs5630".
This assignment was successfully tested in release 1.2.1rev1336. It should work fine in releases >=1.2.1rev1336. Check your release before starting your work and upgrade it if necessary.
The purpose of this assignment is to make sure you understand (and experiment with) the basic concepts involved in the visualization of 3D scalar volumes.
As you work on the assignment, we encourage you to read the available documentation on both python and VTK. Remember that VisTrails allows you to easily access the VTK documentation. To see the documentation of a VTK module in the Modules panel, just right click on its name and choose View Documentation in the context menu. Analogously, you can right click on a method's name in the Methods panel to see it's documentation. Some of the problems will require you to use VTK modules you might not have previously seen. These are indicated in the problems.
Grad students will have to perform extra work and this is indicated with Grads only headings.
Volume visualization in VTK can be performed using either Software or Hardware-based rendering methods. For examples of each of these, please refer to the terminator example distributed with vistrails. This can be found in the examples directory in terminator.vt However; please note that although the transfer function specification in these nodes is valid, it does not take advantage of the new modules TransferFunction and vtkScaledTransferFunction. These modules should be preferred over the methods found in the terminator examples. Some computers cannot render these volumes in hardware (vtkVolumeTextureMapper) and must use a raycasting method instead. Also, the columbia_river.vtk data is NOT tetrahedral elements, it consists of unstructured hexahedra. This means that the Bunyk Raycaster and the preferred method of volume rendering is the Z-Sweep Algorithm; however, this method is quite slow. It should be noted that not all datasets are suitable for volume rendering.
The data for the five problems of this assignment are in four files: head_ct.vtk, head_mri.vtk, head_gm.vtk and columbia_river.vtk
- head_ct.vtk is a CT scan taken from the Visual Human dataset
- head_mri.vtk is a MRI scan of a human head (not the same person as above)
- head_gm.vtk is a volume representing the cortex extracted from head_mri.vtk
- columbia_river.vtk is an unstructured hexagonal mesh representing the mouth of the columbia river.
The four files are packed into a single zip file called Hw3data.zip. The task of unzipping and locating these files is already done in the starting VisTrails file (Assignment3.vt). You should solve the problems by working directly on this VisTrails file.
Exercise 1: Basic volume exploration
Find and display the scalar histogram for:
Problem 1a: head_ct.vtk
Problem 1b: head_mri.vtk
Problem 1c: head_gm.vtk
Problem 1d: columbia_river.vtk
Please label your resulting versions as above for grading.
Exercise 1e: Volume Visualization of Structured Data
Try to find transfer functions for each of the volumes that show both skin and bone. In the Notes section, describe what the transfer functions are showing and the effect of the different scanning modality in your definition of the transfer function. Make sure to describe and explain any problems you have finding such transfer functions. If you cannot find a suitable transfer function for one or both of the data modalities explain why the data modality makes a difference. If you do not tag this solution as "Problem 1e" it will not be graded.
Exercise 2: Visualization of multiple data
Form visualizations using the files head_mri.vtk and head_gm.vtk Head_gm.vtk represents the cortical surface extracted from the MRI scan. A good visualization will be able to show the cortical surface in such a way that it provides spatial context for its position relative to well-known facial features. Label your best visualization for hand-in. Hint: This can be done using either a well-constructed transfer function or well-placed (or interactive) cutting planes. If you do not tag this solution as "Problem 2" it will not be graded.
Exercise 3: Differential information in scalar volumes
[Kindlmann et al.] describe direct volume rendering of data using transfer functions defined over the 2D domain consisting of scalar value and gradient magnitude. Using appriopriate modules, form this joint histogram for bot head_ct.vtk and head_mri.vtk volumes. The gradient for a given point can be defined as the discrete difference in each of the axial directions. In the Notes section, describe the joint histogram and how it relates to the ideas in Kindlmann's paper. Hint: A 2D discrete difference PythonSource can be found in the distributed .vt from Assignment 2. If you do not tag this solution as "Problem 3" it will not be graded.
Exercise 4: Mutli-variate unstructured volume data
Part a: Not all scalar volumes are defined over regular grids. The file columbia_river.vtk contains an unstructured mesh with hexagonal elements. While these data are defined on the vertices of hexagonal elements, the elements are not of uniform shape. This unstructured nature makes volume rendering a more difficult problem. Using various scalar field visualization methods (from volume rendering, iso-surface extraction, and histogram exploration) create a visualization that highlights a feature in the data. In the Notes section, describe the feature that is highlighted and your reasoning for forming the visualization as you did. If you do not tag this solution as "Problem 4a" it will not be graded.
Part b: The columbia_river dataset also contains a vector field. Combine your experience with 2D vector field visualization with your new understanding of 3D domains and form a complete visualization highlighting both the feature that you discussed in part 4a as well as the vector field defined on the same dataset. If you do not tag this solution as "Problem 4b" it will not be graded.