473 Final: Volume Rendering with MRI Data

Benjamin Don

For my final project, I decided to try my hand at volume rendering. I was originally inspired by foggy scenes, but ended up taking my project in a different direction. I decided to use my volume renderer to display 3D images of medical data- specifically the MRI looking output above. I achieved this by compiling 2D cross sections of a human skull, and I used that data to build a volumetric data structure. I then cast rays through the volume, and calculate intersections with the voxel data to accumulate density values. In the images above, you can see a few examples in black and white, which look more like an x-ray, and a few examples with color highlighting. In the colored photos, the red areas represent the densest parts of the skull, with green highlights for middle dense areas, and blue highlights for the least dense areas.

Implementation Details

  • First, I imported the images from Stanford's volume data website (cited below). Based on the color of pixels in each image, I created a color vector in my volume data structure.
  • I then cast rays into the scene. If the ray intersects with the volume's bounding box, I trace the ray through the volume.
  • As the ray intersects with voxels, I perform a linear interpolation against the values at each corner of the voxel to get a precise color value.
  • Then, average all of the color intersections along the ray to produce a final pixel color result.

3D Perspective:

Sources

http://www-graphics.stanford.edu/data/voldata/
https://graphics.stanford.edu/papers/volume-cga88/volume.pdf
Really helpful video: https://www.youtube.com/watch?v=1PqvwOjnKJw