9
Painterly Rendering with Curved Brush Strokes of Multiple Sizes Aar on Hertzmann Siggraph98 資資資資R93922131 資資資

Painterly Rendering with Curved Brush Strokes of Multiple Sizes

Embed Size (px)

DESCRIPTION

Painterly Rendering with Curved Brush Strokes of Multiple Sizes. Aaron Hertzmann Siggraph98. 資工所碩一 R93922131 蔡銘宏. Detail of At The Seashore. Function paint. function paint(sourceImage, R 1 ... R n ) { - PowerPoint PPT Presentation

Citation preview

Page 1: Painterly Rendering with Curved Brush Strokes of Multiple Sizes

Painterly Rendering with Curved Brush Strokes of Multiple Sizes

Aaron Hertzmann

Siggraph98資工所碩一 R93922131 蔡銘宏

Page 2: Painterly Rendering with Curved Brush Strokes of Multiple Sizes

Detail of At The Seashore

Page 3: Painterly Rendering with Curved Brush Strokes of Multiple Sizes

Function paint

function paint(sourceImage,R1 ... Rn) { canvas := a new constant color image // paint the canvas for each brush radius Ri, from largest to smallest do { // apply Gaussian blur referenceImage = sourceImage * G(fs Ri) // paint a layer paintLayer(canvas, referenceImage, Ri) } return canvas }

Page 4: Painterly Rendering with Curved Brush Strokes of Multiple Sizes

PaintLayer(1)

procedure paintLayer(canvas,referenceImage, R) { S := a new set of strokes, initially empty // create a pointwise difference image D := difference(canvas,referenceImage) grid := fg R for x=0 to imageWidth stepsize grid do for y=0 to imageHeight stepsize grid do { // sum the error near (x,y) M := the region (x-grid/2..x+grid/2, y-grid/2..y+grid/2) areaError := i j M , Î å Di,j / grid2

Page 5: Painterly Rendering with Curved Brush Strokes of Multiple Sizes

PaintLayer(2)

if (areaError > T) then { // find the largest error point (x1,y1) := arg max i j M , Î Di,j s :=makeStroke(R,x1,y1,referenceImage) add s to S }} paint all strokes in S on the canvas, in random order }

Page 6: Painterly Rendering with Curved Brush Strokes of Multiple Sizes

A circular brush of radius 8

Page 7: Painterly Rendering with Curved Brush Strokes of Multiple Sizes

long, curvedstrokes

Page 8: Painterly Rendering with Curved Brush Strokes of Multiple Sizes

Parameters

· “Impressionist” — A normal painting style, with no curvature filter, and no random color. T = 100, R=(8,4,2), fc=1, fs=.5, a=1, fg=1, minLength=4, maxLength=16 · “Expressionist” — Elongated brush strokes. Jitter is added to color value. T = 50, R=(8,4,2), fc=.25, fs=.5, a=.7, fg=1, minLength=10, maxLength=16, jv=.5 · “Colorist Wash” — Loose, semi-transparent brush strokes. Random jitter is added to R, G, and B color components. T = 200, R=(8,4,2), fc=1, fs=.5, a=.5, fg=1, minLength=4, maxLength=16, jr=jg=jb=.3 · “Pointillist” — Densely-placed circles with random hue and saturation. T = 100, R=(4,2), fc=1, fs=.5, a=1, fg=.5, minLength=0, maxLength=0, jv=1, jh=.3.

Page 9: Painterly Rendering with Curved Brush Strokes of Multiple Sizes

Based on C++ document/view framework,MFC Parameters input ?