Impressionist Painter

This is a project to help create impressionist versions of pictures, allowing various brush strokes and drawing patterns, and some automatic generation. It is implemented using java 1.3, and may be downloaded. You may also test it out in an applet if you have the java 1.3 browser plugin.

originalimpressionist (click for full size)

The control window allows you to choose among brushes: point (square), line, circle, scattered points lines or circles, and gradient curves. It also allows controlling of brush parameters like size and spacing between strokes, width and angle (for lines), as well as the alpha value of the stroke, and the size of a scatter brush. Line direction can be controlled by the just a slider, the direction of the right mouse drag, the image gradient, or a direction toward the center (or other point specified with the right mouse button).

The color of a brush stroke is determined by the color in the original image at the point. Either the original image or the new image can be drawn on, with the location on the original shown by a small circle, and an optional previewed brush in the new image.

Images can also be automatically painted in one of two ways. 'Ordered' simply steps through the images at spaces specified by brush spacing, and places a stroke at each point. 'Random' will randomly draw strokes (the number controlled by the Step Size slider), then examine the image looking for holes that are lower than the minimum alpha. It will then choose random points from these areas to place more brushes, and will continue until all the points are sufficently filled. During these drawing processes, brush size and alpha can also be randomly varied.

An image can be autopainted in one style, regions can be erased and then filled in with another style. Or, one style might be used with a low minimum alpha, and then another style on top to refine detail. This method allows for a user to quickly create interesting images in various styles.

In addition to being a flexible method for creating images with varying style, this idea also allows a simple extension to video. If we use the autopaint to redraw each frame randomly, the video will not look coherent, as strokes will either randomly shuffle around the image, or the strokes will stay fixed as colors move beneath them. We would like to have strokes stay attached to features in the image. By selecting multiple images at load time, the program will allow the creation of video impressions. It does simple region tracking to create a vector field from one image to the next, and then translates strokes according to the vector field. When moving of strokes (or inability to track) leaves holes in the image, they are filled in by the autopainting. In practice, this doesn't give great results, but its a start.

Downloading

If you'd like to try this program, its available here, in a jar format (51KB). No warrantee expressed or implied; play with it for fun, but don't rely on it for something important.
To run this software, simply run 'java -jar Impressionist.jar' and you're off! Or you can test it out here, in an applet. Comments are welcome; send them to harlan@cs.washington.edu.