Volume Visualizer
Lindsay Grace

download installer here (windows 18+mb)

The application provides the following features:

Volume visualization of several 3D data set types (Raw images, .VTK, and DICOM/MRI files) using

  • Ray-Cast
  • Slatting
  • Iso-Surfaces
  • Save files as JPEG or PNG
  • Visualizes 3 images at one time for comparison

Users may customize the visualization as follows:

Ray Cast

  • Choose between Compressed and Uncompressed Data
  • Choose Linear or Nearest Neighbor Interpolation
  • Specify the Ray Casting Method (MIP, Composite, Surface)
  • Chose between 2D and 3D hardware texture mapping
  • Specify the color and opacity of up to 10 points (via color transfer functions)
  • Automatically distribute points and opacity based on file dimensions
  • Automatically generate greyscale and color



  • Specify splat radius
  • specify sample rate
  • Generate points by scalar
  • Choose between compressed and uncompressed data
  • Generate a generic splat (basic setup)


  • Create 2 simple iso-surfaces (generated via a triangle stripper)
  • Generate contour from a range of points
  • Specify color, location, and opacity of two iso-surfaces




I created the application in Visual Studio, C# .Net. This was the first time I had used the language, so I spent some time learning the syntactical differences between C++ and VB.Net. I used the VTK.Net wrapper, and the VTK.NET render control. These tools are not as stable as an unmanaged implementation of VTK in C++. Particularly when exceptions are thrown, the exception is unavoidably propagated into my application.

There were many bugs and work arounds needed to make this application work. These seem to be a product of a non-standard implementation on my part. For example, in order to keep all three render controls updated, I must call the invalidate method on the each render control. Double buffering, VTK debug switch, and data set object conversion also required buggy work-arounds. Some of these problems are documented both in the VTK literature and in the VTK.NET literature.

The most interesting aspects of the implementation include multi-file support (vtk, raw single and raw multi-set images), pre-instantiated object references to increase speed, object switches to manage various rendering mappers, and shortcuts for creating surface, point, and opacity parameters.

My focus was on fast, informative images.




Ray Trace
The ray tracing was easiest to implement and very well suited to the pig and knee data we were to visualize. The results were most impressive using a high quality ray cast (no file pre-compression). The first and most refined code is in the ray-casting. I found this approach much more intuitive than parameters for iso-surfaces.

I especially appreciated the speed at which ray-tracing rendered images, allowing better visualization manipulation.


The Splatting algorithm was very finick - many alternate data sources failed to render a useful splatting image without mcu calibration. Oddly, it seems as though low-resolution data sets were much easy to manage with splatting (probably becuase there is less of a range of resonable values to calibrate). Splatting also yielded some detritus (white areas outside the knee), where even a fast, low quality ray-trace did not.


I used a triangle stripper and a level of detail actor to manage the speed of rendering the iso-surface. The triangle stripper actually hurts some visualizations. It seems that with sparse data, the stripper becomes very picky about what values will yield a surface.




  Ray of ironProt.vtk daa (1. Color transfer, high detail, 2.single color, low detail, 3.Single Surface, single color)
  Pig Data as raw image (1.Ray Cast, High Quality, 10 color transfer 2. Ray Cast Single Color, 3. 2D hardware texture mapped render)
  Pig Data as raw image Surfae (without calibration)
  Knee Data as raw image (1. Single color transfer, high quality, no compression 2. Single color transfer, medium compression 3. Lowest quality)
  Mummy - Low qaulity source, lhigh quality render single point color transfer
  93 Single file CT slices (1. 2 contours (skin and bone), 1 contour (bone)