Six Pearls Designs

Image Processing Independent Study

2009 August 31

Image processing always interested me, so at the end of my junior year (Spring 2009), I began working through Professor Wang's notes for his image processing course. I really enjoyed applying the same mathematical principles from my systems engineering courses to multiple dimensions. By the end of the summer in 2009, I understood and implemented two thirds of his course, including some basic gray scale transforms, some spatial filtering and edge detection algorithms, as well as some independent developments in various real-time processes, embedded below.

These experiments were implemented in Processing, a Java based language, for rapid GUI development and webcam interface. The purpose of this exercise was as much to understand the algorithms as use them. The currently uploaded source code (Feb 8, 2010) was last tested on version 1.09, and is configured for testing the Canny edge detection method, shown in the screen capture below. The functions for the various other functions, including blob tracking (discussed below), Fourier transform, and others, are still available as uncalled functions, so it can be used to develop GUIs for showing the other algorithms implemented so far.

canny_demo

The first video implements a temporal high pass filter. I was inspired by the way my cat behaved-- she seemed to only respond to movement, so I thought I would try to see the way she did. In the first frame is the raw image. The second has a spatial low-pass filter to smooth out noise. The last two frames use a high-pass filter to show only movement. The difference between these two frames is simply how the pixels are subtracted.

This second video demonstrates my second iteration of blob tracking. It uses edge detection (bottom right) and color difference thresholding (bottom left) to identify a blob. This led to a phenomena I termed "bleed out," where the edge of the blob isn't properly identified, and the algorithm "thinks" the blob continues beyond the true blob (around 0:02). A later version uses a predictive filter to track the blob, which seemed to help a little. I hope to continue working on this particular project, and will upload more demos of it as I make time for it.

Source Code