Suggested Projects

Explore translation, scaling, and rotations by arbitrary angles. Create a way to easily combine these three types of transformations into a single transformation that takes several arguments. Make up puzzles for students, where they are given a pair of images that are related by such a sequence of transformations, and they must come up with the parameters that correctly map one image into the other.

Write a routine that takes two images A and B, and generates the frames of a dissolve sequence, whereby the sequence starts out with A and ends up with B, but A gradually fades out as B fades in. Display either a 6-frame dissolve or an 8-frame dissolve on your screen, depending on the size of your monitor. Experiment with the weighting of the two images. Does a linear fade-out/fade-in work as well as a sigmoid function such as one of those used commonly in neural net backpropagation algorithms?

g(h) = 1 / ((1 + e^(-h))

Illustrate the use of symmetry groups of transformations on images. Provide a function that takes a transformation (the "generator") and applies over and over again to an image (with each result being shown in a different window) until the image that results is the same as the original, or a maximum number of windows is reached. If you use a transformation that causes a loss of image information, demonstrate the effects of error accumulation. At what point is the loss of information noticeable? At what point, if any, does all the information become lost?

Create a collection of functions and transformations that make it easy to create stencils (images with holes through which you can see other images below). Explore the mathematical properties of stencils. When you combine two stencils, is the operation commutative? When you combine three, is the operation associative?

Demonstrate edge detection on images and explain its relation to differentiation.

What if you transform an image by mapping each pixel value to a different one, much as text ciphers use permutations on the alphabet? Try this by making up some suitable pixel transformations. Do they do a good job of disguising images? Why or why not? Think about what might make good codes for images.