Old Projects ... a gallery

Reconstruction of fire from images

For my Master's thesis at the University of Toronto, I'm reconstructing three-dimensional models of fire from images (from synchronized cameras). The problem is similar to the general problem of computerized tomography (CT), with the exception that many fewer input images are available. [more]

As part of this work, I've reviewed the literature to better understand the perception of transparency and what sort of information can be extracted from images of transparent objects. [report]

Classical cryptography

Over one winter break, I put together a little program to solve substitution ciphers (Cryptoquotes) automatically. It operates based on the statistics of different letter combinations (for example, NT is more likely than BT, and JV never seems to show up) and using stochastic local search.

I've since refined my approach for a course project in machine learning. With better tuning of parameters and using a dictionary with word frequencies I get even nicer results than I had a chance to describe in the report ... a median of 93% of words correct and 98% of letters correct over a test set of 1250 puzzles. However, I'd like to take this even further, for example, exploiting the patterns of letters within words, e.g. ABBAC = {TOOTH, ERRED, PEEPS, ...}. [pdf]

Video Mosaics

This was a course project in visual modeling with George ElKoura. We generated panoramic mosaics from a video camera that was spun around on a tripod, using Peleg's slit camera approach. The second image is our attempt at special effects ("A Suffusion of Sams"). [more]

View morphing

Another course project with George. The first step is to specify corresponding line features in two images (in this case, Einstein and his mirror image). This gives you stereo information which lets you warp the viewpoint, in addition to performing basic Beier-Neely image morphing. [more]

Computational origami

According to a new result by Demaine, any polygonal surface whatsoever can be folded from a single piece of paper (!). The catch here is that paper thickness is ignored, and the folds described in the proof aren't very aesthetically pleasing.

Anyhow, I was inspired enough by this result to hack together an origami simulator (that does model paper thickness) and actually animate the better part of his proof. [report]

Motion planning and collision detection

When I was at UBC, I became involved with some work on probabilistic motion planning. The main idea is to sample from configuration space to generate a roadmap of sorts, then connect nearby "milestones" using an exact local planner.

The bottleneck for any motion planning system is the collision detection. So, I also implemented a hierarchical sphere-based scheme for doing fast-ish collision detection and (bounded approximate) distance computation [report] [talk]


Before I switched into computer vision, I wrote a review paper describing how techniques from reinforcement learning might be used to approach the problem of acting under uncertainty with hidden state. This framework is formally described by partially observable Markov decision processes (POMDPs). [report]

At various times, I've also given presentations on:

Early experiments

In high school I wrote a computer program to play Othello. The program used lookahead to search, say, up to five moves ahead, with an evaluation function for rating the goodness of a particular position. The twist was that the parameters of the evaluation function were learned through tournament self-play using a genetic algorithm loosely inspired by biological natural selection. This won the grand prize at the provincial science fair, so in 1997 I represented Canada at the London International Youth Science Forum.

Armadillos, and illustrations thereof

Still reading, are you? That's terrific. Because armadillos are seriously underrepresented in the world of cartoon fauna, and I'd like to change that. With Armand.

Last modified: February 12, 2002