Code here
Executable here
Data files here [67mb]

Conclusions

Use ISO to see surfaces with nice/solid cut offs in density.
DON'T use Splatting for lots of data unless you don't mind waiting a few minutes, also if you have details you are looking for.
Use MIP Ray tracing if you want to see an x-ray vision type view of the data.
Use Composite Ray tracing if you want to see very good cross sections of the data.

VTK

I used C# with the .NET dll's because I learned how to use it from the last project and I found that it work well with my object-oriented thought process.

Where do I start?

I think I sat down to start this project about 10 times but each time I stopped because I had no idea where to start. I did not even bother downloading the data set because I had no idea what I would do with it. I searched the internet far and wide but could not get any good tutorials that showed me what to do with the raw data. Then finally I see this UIC webpage that leads me to...wouldn't you know an EVL webpage by Professor John Bell. It explained some of the basic points of ISO surfaces and Ray tracing. So that's where I started. But ofcourse it was in TCL/TK which meant converting to C#, luckily the vtk library calls are standard across the different languages.

ISO (confused) / Ray (dismay) / Splat (those bugs)!

After getting the basics of ISO and ray tracing I felt pretty confident and so I got our data set (knee and piggy bank) only to find out everything is broken! The ISO looked off, ray tracing was boxy and I still didn't actually have splatting working at all. The problem was a simple one I put it 512 instead of 511 because the starting point is 0 not 1 (rookie mistake). I was excited because now I could see a pig for the first time! I had ISO working pretty well and ray tracing was not 'good' but at least it was rendering, so I decided to tackle splatting. Turns out splatting is just about as simple as ISO, just add an extra step in the pipeline using the guassion splatter before getting the surface. Seemingly simple but had the toughest time getting the right radius for the splats (0.05). Now it was onto ray tracing, which was pretty different from the ISO and splatting, it required the use of a volume as opposed to some sort of actor.

On to the finer points of the assignment. Once I had one ISO surface and one splat working adding more was pretty easy, it was for the most part copy and paste and book keeping. The way my code is layed out it allows for more than 3 surfaces but after this point the computer gets bogged down and the GUI gets overwhelming so I decided to keep it at 3, and for the data sets 3 was mostly good enough, and there was always ray tracing to mimick 'infinite' surfaces. Adding colors to the ray tracer was as simple as adding values to the transfer functions.

Tricky but simple thing to do when dealing with high res renderings which need to go to low res during motion is to use an LOD actor which allows you to specify different LOD's. I only added two, one high res and one low res to the actor using addLODMapper as opposed to setMapper. This works like a charm :-).

Features of the visualization...

  • Quick viewing in 3D with high res and low res renders
  • Zooming
  • Various methods [ISO / Ray tracing / Splatting]
  • Control for each of the 3 surfaces:
    • Color
    • Opacity
    • Surface density values
  • Control splat radius
  • Use MIP and Composite functions for ray tracing
  • Color transfer functions for ray tracing
  • Clipping box to update volume of interest
  • Load other data sets dynamically
  • Define input data file parameters easily
  • Turn clipping box visibility on and off
  • Switching clipping from continuous to discrete to speed process
  • Allow simultaneous surface level changes to view seperate segments

Things to notice

Different styles in low detail level.

ISO

Splat

Ray trace MIP

Ray trace Composite

Difference between ray trace composite and MIP highlighted with a cross section of the female dataset.

Ray trace MIP

Ray trace Composite

The difference between ISO and Ray trace Composite at high resolution of the knee data set.

ISO

Ray trace Composite

The difference between high resolution and low resolution of the piggy bank in Splat mode.

Low Resolution Splat

High Resolution Splat

Head CT and MRI differences in different cross section views.

High Resolution MIP CT

High Resolution MIP MRI

High Resolution Composite MRI


Inside a piggy bank, what treasures may be found?! [high resolution ISO]

The amazing disappearing coins! [high resolution composite]

Inside the female anatomy! [high resolution composite]

Tutorials and data sets:
http://www.cs.uic.edu/~jbell/CS526/Tutorial/Tutorial.html [tutorial]
Female data set from Andy's ftp

Questions