main-impressionist

Your program must take a color image and produce a new color image that is a “painted” version of the original.

The basic idea is that you sample the original image and for each sample you place a “brush stroke” in the destination image. You need to randomize the order of the strokes a little. This is a case where undersampling/aliasing actually creates some nice effects.

Here’s an example (click on an image to get the bigger versions):



original


straight stroke


curly strokes

Your program needs to be automatic - the user cannot paint the strokes. Part of this is that we don’t want you to spend your time on writing user interfaces (we had students do this in the past - for now, we want you to focus on image processing).One possibility is to have the user specify where the brush strokes go (have them The original version of impressionist painting was interactive. You can see a Java implementation of it here. Paul Haeberli, the inventor of the technique, is a UW alumn!

Implementing the interactive version is fun. However, you must also have a “batch mode” version that processes a whole picture without any user intervention.

We’ve seen some pretty creative solutions to this assignment in past years.

  • Here are some ideas:

    • The simplest thing to do is to pick a simple brush shape (a small circle or square?) that you can easily draw into the image, and make all the strokes be the same. Get this to work first. The straight and curvy strokes above both do this (for more complicated brush shapes).
    • Try to implement different shapes for the strokes (as the example, or the impressionist demo, shows). You can use lines, circles or squares. My sample implementation read in this image that contained many brush shapes.

    • Try adding a little bit of randomness or variety can make your pictures more “painting like”. Try adding a little bit of randomness to the color or the position of the strokes. Try adding some randomness to the direction or size of the strokes. My program would randomly choose strokes from a row of the image above.
    • Try adding highlights or shadows to your strokes. The stroke image above shows how my program could mark certain pixels of the stroke to be darker or lighter.
    • (Bonus only) Try adapting the strokes based on the content of the image. For example, where the image has more detail, you might use a larger number of smaller strokes. You might orient the strokes based on the direction of lines in the image. You might cut strokes off if they cross edges in the image. Of course, this would require you to know how to analyze images to determine what’s in them, and that’s the subject of another course (Computer Vision). We can provide you with some hints if you are motivated.

Making good paintings from images is a hard problem. There is actually a lot of research out there. Haeberli’s original paper is easy (and fun) to read. Here is another old (but good) source of lots of ideas. The version of this project that was assigned at U. Texas has even more ideas. (note: the Texas project has students use the OpenGL graphics library to render the brush strokes. You must render the brush strokes yourself (actually writing the pixels into the image).Graphics classes at other universities give variants of the impressionist painting as an assignment. Often, they ask students to use a graphics library (OpenGL) to draw the brush strokes. We don’t recommend you do this: you should draw the brush strokes by actually setting the pixels in the image.


A note on expectations:

We don't expect you to do cutting edge research - its a part of a 
class project for an undergrad graphics class.

Many of the techniques that adapt the strokes to the image require a tiny 
bit of computer vision know-how. (OK - easy version - a high-pass filter 
can tell you when there's detail in an image, and that you should use more 
small strokes).

What's cool about impressionist painting, however, is how cool you can make
it look just doing the basic stuff. Most people find doing it really fun.

  • Difficulty Options:

    • Basic Option: implement the “basic idea” using a single brush shape. To get full credit, it should be clear from the results that your resulting image is “painted” (made of many brush strokes).
    • Advanced Option: do something more creative to make better looking paintings. Implement some of the suggestions above.
    • Bonus Option: you can go totally crazy with this, trying to recreate different artistic styles, automatically choosing different brush strokes over the image, … - There’s a whole literature of artistic drawing techniques that you could implement!
Page last modified on September 12, 2007, at 02:08 PM