top of page

Painterly Rendering

     I used Painterly Rendering with Curved Brush Strokes of Multiple Sizes as my main paper to work on this project since we can simply render on a pre-existed image. Also, the paper provides nice pseudocode that can follow easier than other papers. In this paper, there are 4 painting styles, impressionist, expressionist, color wash, and pointillist. For this project, I implemented an impressionist style brush stroke on the image, littlemer.jpg. The code can be divided into three sections, such as paint, paint layer, and creating brush strokes. First, they paint the canvas with some color, black in my project. Then, for each brush with a radius in the range of {2, 4, 8}, they paint the image that is filtered with a Gaussian and gradient (emboss) filter with a circular brush. The paper randomized the order of the brush radius, so it appears to be a “freehand” painting. I implied the method that the paper suggested in this project, including applying a Gaussian and emboss filters, finding differences between the canvas and reference image by using a distance formula, color of the strokes, unit vector of a gradient, normal direction, and filter the stroke direction. The image I modified is rendered with the brush radius size of 8, 4, and 2 without randomizing the brush strokes.

littlemer.jpg

Figure 1. Original Image

data_canvas_8.jpg

Figure 2. Brush size 8

data_canvas_4.jpg

Figure 3. Brush size 4

data_canvas_2.jpg

Figure 4. Brush size 2

data_canvas.jpg

Figure 5. Final rendered image with all brush strokes

Problems I faced:

     Even though the pseudo-code from this paper helped me to understand the big flow and how the algorithm works at each step, converting the pseudo-code to actual code was difficult. Code 1 helped me understand how to do those conversions. Even though it used OpenGL, the steps were very similar to what the paper did.

Resources:

©2021 by Doyeon Kim. Created with Wix.com

bottom of page