![]() |
Project 1: ImpressionistDate Assigned: Tuesday, 31 March 1998Date Due: Tuesday, 14 April 1998 Artifact Due: Tuesday, 14 April 1998
|
To create an impressionistic picture, the user loads an existing image and paints a seqence of "brush strokes" onto a blank pixel canvas. These brush strokes pick up color from the original image, giving the look of a painting. To see some samples that were generated with the sample solution, click here.
You can find some sample input images in the BMP format here.
To give your paintings more variety, add some additional brush types
to the program. These brush strokes should be substantially
different from those you are required to implement. You will get
one whistle for each new brush.
The skeleton program allows the user to paint outside the boundary of
the paint rectangle, then erases this region when the stroke is
completed. Change this to clip brush strokes to the region as they're
being painted.
When using your program, you currently can't see what part of the
original image you're painting. Extend the program so that when
you're making a brush stroke, a marker appears on the original image
showing where you're painting.
A different solution to the problem of not being able to see where
you're painting is to show a dimmed version of the painting on the
canvas. Add a slider that allows the user to fade in or fade out the
original image beneath the user's brush strokes on the canvas.
(Beware, this bell and whistle is more difficult than it
looks).
To make your painting more interesting, add "alpha-mapped" brush strokes. In
other words, allow the user to load a bitmap representing a brush stroke.
This bitmap would contain an alpha value at each position. Then when this
brush is used to draw, a single color would be selected from the image, all
pixels in the brush bitmap would be set to this RGB color (without changing
the alpha value), and this partially transparent bitmap would be painted on
the canvas. A new color would be used each time the brush is drawn.
It can be time-consuming to paint an image manually. Add a feature so
that a whole painting can be created automatically. The user
should only have to specify a brush type, size, and angle to use. Then
the program should automatically paint brush strokes over the entire
image, using a randomized brush order and varying the brush attributes
slightly as it goes (to increase realism).
At times, you may want the brush strokes to follow the gradient of a
different image than the base image. Add a button(s) that will cause
the direction of brush strokes to be automatically determined from a user
specified image.
The "accuracy" of the painting can be also be improved by clipping long
brush strokes to edges in the image. Allow the user to load a
black-and-white image that represents the edges in the picture. Then add a
checkbox so that the user can turn on edge-clipping, which will
automatically clip brush strokes at edges in the image.
Use the image processing techniques described in class to automatically
find the edges in the base image. Once you have found the edges, add a
button to the user interface that will allow the user to select whether or not
the brush strokes should be clipped to the edges in the picture.
Implement a multiresolution automatic painting technique. See Painterly Styles for
Expressive Rendering.
Implement a curved brush that follows the image gradient. See Painterly Styles for
Expressive Rendering.
Extend the Impressionist program to work with video. The user should be able
to load a series of images from a video and set up some initial parameters,
and the program should automatically generate an impressionistic
version of the video. The video should exhibit temporal coherency.