Aline Normoyle
Home   Publications   Projects   About  
Image Painter

This simple program plays with some of the ideas from

In these papers, the authors describe techniques for creating images with a hand-painted look from photographs.  These techniques involve aligning the digital brush strokes along edges from the original phtograph and then building up the final image in layers. Each layer uses a different sized brush to fill in the appropriate amount of detail.

Screen Shots

ImagePainter can read and write PPM files and reinvent them in impressionist, expressionist, colorist wash, and pointillist styles using circle, line, and curved brush strokes. The user can tailor the effects of the algorithm by specifying thresholds, color jitter, color opacity, brush stroke size, and brush stroke shape.

The interface consists of a control window and corresponding image windows:

screenshot.jpg

Above we see an impressionist rendition of an entraceway from Ibiza, Spain. In canvas settings, we can adjust the theshold and stroke overlap. The threshold helps determine how closely the final painting resembles the original photograph. A stroke overlap of 2.0 indicates that strokes will not overlap in a given layer while a stroke overlap of 0.0 will cause strokes to completely overlap. In the brushes settings, we can configure how many layers should be used to construct the final painting. In this example, we painted three layers where the brush for each layer is half the size of the previous brush. In the brush stroke settings, we have chosen curved brush strokes with no additional curvature, no color opacity, and a moderate minimum/maximum length.

Sample Output

Click on any of the images below to see them in more detail:

mountain-pointilist-thumbnail.jpg
liliesExpressionist-thumbnail.jpg
palaceImpressionist-thumbnail.jpg
ZoolanderCurve-thumbnail.jpg
mountains-threshold370-thumbnail.jpg
sandman-thumbnail.jpg
londonAline-thumbnail.jpg

From left to right, top to bottom:

  * (Ibiza and London photos by Jeff Bail.  Thanks, Jeff!)

Readme and Code


Here is the source for this program.  To compile, you will need fltk 1.1.3 and openGL 1.2.