Image Processing

Technologies - Matlab, itk, C++

Image Processing

In Fall 2009 I took an Image Processing course taught by Ross Whitaker. I thoroughly enjoyed the topics, and it sparked my interest in a number of Image process techniques. Some of the projects we've worked on include histogram equalization, image morphing, image mosaicking, and feature detection. I noticed how useful Image Processing could be and at that time decided to focus my Master's studies on Image Analysis.

Since that class I've taken Guido Gerig's advanced image procressing course. In that class we worked on a wide variety of subjects. Below are a few examples of our projects.

Fourier Descriptors

Fourier Descriptor Small Fourier Descriptor Medium Fourier Descriptor Large

Anisotropic Diffusion & Feature Detection

Anisotropic Diffusion Detection Cell 1 Detection Cell 2

Fortissimo (Senior Project)

1st Place Annual Senior Project Competition (University of Utah)
Technologies - XNA, C#

Main Page

Fortissimo is a rhythm based game similar to Rock Band or Guitar Hero. The key idea that distinguished it from previous games was to allow users to use their own music to play the game. The project was used as my Computer Science senior project and was voted 1st place viewers. The game was fully functional, had full USB guitar support, and was tested with over 100 songs, and overall was a huge success.

Fortissimo was built by a team of four. The responsibilities were split into Intro Movie, Documentation, Midi Support, and Graphics and Gameplay. My primary responsibilities were Graphics and Gameplay. All of the graphics, menus, and gameplay were developed primarily by me. All in all I am very pleased with my work on the game.

Some work had gone into converting the game to be used with midi pianos, but was put to the side as I started grad school. Some plans were made to return to working on it, but have been set aside when Rock Band announced their keyboard peripheral.

Gameplay 1 Gameplay 2

Artificial Intelligence

1st Place Class Contest (University of Utah)
Technologies - python

Pacman Superman

In Spring 2009 I took an artificial intelligence class. I really enjoyed reinforcement learning. We did all of our projects in a pacman environment that the professor supplied to us. For the third project we had a small competition to see who's autonomous pacman could score the highest on a difficult small level (scored over a set of 10 runs, and given 100 runs to learn). My pacman won using a Q-Learning/State Abstraction approach. Here are the results of a few of its runs: Run 1 Run 2 Run 3


Technologies - Matlab, C#, NXT+ Lego Mindstorms

Something scenic

In Fall 2009 I took a Robotics course as well as a Motion Planning course. For my final project in the course I worked on a Simultaneous Localization and Mapping (SLAM) problem. Or in other words, given a robot with noisy sensors and imprecise actuators, localize the robot and generate a map. I used a particle filtering approach on a NXT+ Lego Mindstorms kit.

Path Planning

3D Path 3 Joint Robot Realtime Planning

NXT+ Lego Autonomous Path Planning Robot

Planning Robot Sample Route

Graphics and Ray Tracing

Technologies - OpenGL, Optix, C++


I had the pleasure of taking multiple graphics courses and even considered directing my studies towards a graphics degree. Of my classes the Ray Tracing class was one of my most favorite. We learned about methods for reflection, glossy reflection, depth of field, and soft shadows.

For my final project in the class I worked on a method for dynamic ray tracing that improved ray tracing by sending more rays toward regions that had more information change.

Depth of field Reflection 2 Soft Shadows Dynamic Ray Tracing 1 Dynamic Ray Tracing 2

Scientific Visualization

Technologies - vtk, itk, Qt, CMake, Matlab, VisTrails

Heat Map

I took two Scientific Visualization courses. In the courses we learned about various visualization techniques including isosurfaces, volume rendering, information visualization, vector fields and more.

Isosurface Vector Field Isosurfaces

For my final I decided to see how isosurfaces could be used to facilitate image processing techniques. I used the ends of the isosurfaces to determine points that could then be used to match up volumes. I was extremely pleased with the results. Below are images of the unregistered and registered images.

Final Project 1 Final Project 2

Machine Learning

Technologies - Matlab

Something scenic

Machine learning is the process of taking previous data and making predictions about the future. Data can be anything from image processing labels to stocks to number predictions. Many of the projects in the class involved number predictions, the values to the right were positive predictions for one such project.


Technologies - Maya, C++

Something scenic

I had the pleasure of taking a modeling class that was primarily based on Maya. From the beginning of the class we chose a model and worked on it the entire semester. My model was a large gorilla. It was a great chance to use my design skills from previous art experience a primarily scientific degree.

Something scenic

Later I took a class on modeling with splines. It was refreshing to see understand how the product I used before (Maya) was working underneath the hood. We worked with various degrees of bezier and b-splines, and later moved on to surfaces. Below are a couple of images showing interpolating and non-interpolating surfaces.

Something scenic Something scenic Something scenic

Scientific Computing

Technologies - C++, Matlab

Something scenic Something scenic

I took multiple classes on Scientific Computing. Scientific Computing generally deals with simulating, and solving large datasets. To the left we have a cross section of a region surrounding the heart labeled with it's charge.