In my work I frequently have the need to visualize some buffer of data as an
image. This simple library that I wrote allows for easy, printf-style debugging
of raw image data.
Example of Forms.NET that shows a directory's disk usage in a convenient tree view
COS333 Managed Projects
In Spring 2005, I was assigned to manage 4 groups of students as they designed
and implemented course projects for COS333. Over the course of the semester, we
had weekly meetings to review their progress. I'm quite proud of their results,
and I've included links to their project websites.
We've all seen hotornot.com (or should have), where given a picture of a person
people vote as to their physical attractiveness. But this is only a specific
instance of a more general question: what is a person's public image. This site
does a great job of generalizing the hotornot concept to include arbitrary
questions, and manages to be an incredibly fun and addicting timewaster.
Every year, Princeton students select their rooms through a draw process,
where they select from a list of available rooms. These students thought that
it would be helpful to have more detailed information online about available
rooms
Computer Vision
In Spring 2004, I took Computer
Vision at Princeton University
To simulate the wide range of lighting conditions that are seen in nature, we implement a system
that simulates light transport by tracing paths through the scene. Rather than consider all possible paths
of light, we use the Monte Carlo technique to randomly sample important paths, and use the results of sampling
these paths as an approximation.
Rather than represent a scene by modeling object geometry, we can instead sample the lightfield, a function
that measures the transport of light for various views of a scene independent of the underlying scene geometry, and
interpolate to reconstruct arbitrary views. Sample data for the program can be found
here
In many scientific fields, especially medical imagery, volume datasets are very common. In this project, a friend
and I implemented a simple, interactive volume rendering system.
Real-time Graphics Solutions
In Spring 2003, I was the TA for a class entitled Real-Time Interactive Computer Graphics. Essentially, it was a video game
class where the students worked on some simple 2d games. I wrote several assignments for the class, which were quite detailed,
and which I have here.
Given an image of a person, we would like to know which pixels correspond to the person's skin, and which are background or clothes. This can be useful in tracking the position of a person's head or hands. We select a training sample of skin, to which we fit a gaussian distribution, and use this distribution to predict if other pixels correspond to skin.
In another tracking problem, we would like to determine (or at least approximate) the movement of
some feature across the image, represented as the horizontal and vertical translation of some point. We
use the well-known Lucas-Kanade optical flow algorithm, which represents the problem as a minimization
of a quadratic error function. We use the linear first derivative to approximate the minima, and use
repeated searches until the error converges. This can be thought of as a form of Newton's method.
Fall 2002 Graphics Assignments
These are applets that I worked on for a Graphics class in the Fall of 2002. Some of them seem to have a problem
unless you have the official Java Runtime Environment from Sun, which you can get at
java.sun.com
Implements an OpenGL like interface to display a 3d model,
demonstrates loading and parsing a geometry file, controlling the scene
with a virtual trackball, and performing the basic 3d rendering
pipeline from transforms to lighting to rasterization.
A basic raytracer that uses Perlin Noise to acheive interesting
texturing and lighting effects on sphere surfaces, and allows for
interactive experimentation with aspects of the lighting equations and
texturing.
Extends Marble Mouse to
include user-configurable bump-mapping based on the noise function, as
well as multiple configurable lights and simple shadowing.