![]() |
Project 1: ImpressionistDate Assigned: Monday, October 13, 1997Date Due: Monday, October 27, 1997 Artifact Due: Wednesday, October 29, 1997 |
To create an impressionistic picture, the user loads an existing image and paints a sequence 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 bitmaps in /cse/courses/cse457/projects/impressionist/bitmaps
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.
OpenGL limits the size of GL_POINT objects to about 10 pixels. Thus at some
point, increasing the brush diameter of the "circles" brush won't result in
bigger circles. Allow the circles to grow larger than 10 pixels by using a
GL_TRIANGLE_FAN to implement these circles.
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 dot 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.
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).
It would be nice if the direction of brush strokes were somehow
automatically determined. Allow the user to load two grayscale images, one
representing the x-gradient to use and one representing the y-gradient.
Then add a button that will cause the direction of brush strokes to be
determined from these gradient images.
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.
for first,
for second.
Instead of just loading images that represent the edges or gradients in an
image, use image processing techniques to automatically locate the
edges or find the x- and y-gradients in the image.
Extend the Impressionist program to work with video. The user should be able
to load a series of images from a video and setup some initial parameters,
and the program should automatically generate an impressionistic
version of the video. The video should exhibit temporal coherency.