artistic stylization and rendering - github pages€¦ · class nullspace implements constants,...

88
Artistic Stylization and Rendering Aaron Hertzmann Adobe Research San Francisco

Upload: others

Post on 30-Jun-2021

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Artistic Stylization and Rendering

Aaron Hertzmann Adobe Research

San Francisco

Page 2: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

class Nullspace implements Constants, Cloneable{ /** The rows of the nullspace */ Vector rows = new Vector();

/** A list of the variables currently contained in the nullspace */ Vector variables = new Vector();

/** Add a constraint to the nullspace * * @param c The new constraint * @return True if the new constraint is already consistent with the * existing nullspace */

boolean add(Constraint c) { // Convert the Constraint into a Row // do this first to combine equivalent angles; might zero Row newRow = new Row(c);

// Check if c contains any variables that the nullspace doesn't // If so, add them for(int i=0;i<newRow.sources.size();i++) { Object src = newRow.sources.elementAt(i);

if (src instanceof AngleMeasure) src = ((AngleMeasure)src).getEquivalent();

if (variables.indexOf(src) < 0) addVariable(src); }

int nk = rows.size(); // n-k = num vars - num constraints int[] Nx = new int[nk]; boolean zero = true;

int pivot = -1;

// compute N * x, where N is the nullspace and x is the new row

for(int i=0;i<nk;i++) { Nx[i] = Row.dot((Row)rows.elementAt(i),newRow); if (Nx[i] != 0) { zero = false; pivot = i; } }

// test if the new constraint was already consistent

if (zero) return true;

Page 3: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list
Page 4: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list
Page 5: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list
Page 6: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list
Page 7: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Litwinowicz1997

Page 8: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Input Image

Page 9: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list
Page 10: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list
Page 11: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list
Page 12: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Hertzmann, SIGGRAPH 1998

Page 13: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Hertzmann, NPAR 2000

Page 14: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list
Page 15: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Non-photorealistic rendering: computer graphics and animation inspired by natural artistic media

Page 16: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

1. Scientific models for art

Research goals

Page 17: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

2. Rendering algorithms

Research goals

Page 18: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

3. New artistic tools

Research goals

Page 19: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

The development of art and technology have always gone hand-in-hand

Page 20: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

3D Non-Photorealistic Rendering

Smooth surface Occluding contours Stylized rendering

Page 21: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Occluding Contours

Weiss 1966

Page 22: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Suggestive Contours

DeCarlo et al. SIGGRAPH 2003

Camera view Contours Contours+SC

Page 23: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Studies on line drawing

Cole et al. SIGGRAPH 2008

Page 24: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Stylized Contour Algorithms

[Hertzmann and Zorin 2000]

[Grabli et al. 2010]

[Kalnins et al. 2003]

[Buchholz et al. 2011][Eisemann et al. 2008]

Page 25: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Bénard et al. NPAR 2012

Page 26: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Disney’s Paperman

Page 27: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Procedural methods

Pro: lovely results,

very controllable

Cons: hard to design styles, complex to implement

Page 28: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

What is texture?

Page 29: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list
Page 30: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

What is texture?

Page 31: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Early Texture models

Haralick 1973

Page 32: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Higher-Order Statistics

Portilla and Simoncelli 2000

Page 33: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Higher-Order Statistics

Portilla and Simoncelli 2000

Page 34: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Higher-Order Statistics

Portilla and Simoncelli 2000

Page 35: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Higher-Order Statistics

Portilla and Simoncelli 1999

Page 36: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Patch-Based Texture

Efros and Leung 1999

Input texture Output texture

Page 37: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Patch-Based Texture

Efros and Leung 1999

Input texture Output texture

Page 38: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Input texture Output texture

Efros and Leung 1999, Wei and Levoy 2000

Page 39: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Results

Efros and Leung 1999, Wei and Levoy 2000

Page 40: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Curve stylization

Page 41: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Curve Propagation

Frame 1

?Frame 2

Page 42: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Image Analogies

Goal: Process an image by example

?: :::

B B’A A’Hertzmann et al. SIGGRAPH 2001

Page 43: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

:A’

:

::A

B’BHertzmann et al. SIGGRAPH 2001

Page 44: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

:

:A’A

B’B

::

Hertzmann et al. SIGGRAPH 2001

Page 45: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Blur

A A’

B B’Hertzmann et al. SIGGRAPH 2001

Page 46: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Superresolution

Hertzmann et al. SIGGRAPH 2001

Page 47: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Texture transfer

A A’

(same texture)

B Closer to texture Closer to photo

B’s

Page 48: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list
Page 49: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Color channels

Input image

Luminance Color channels

Page 50: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Color channels

Luminance Blurry color

Page 51: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Color channels

Blurry luminance Color channels

Page 52: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Color transfer

Example luminanceInput luminanceInput photo

Input colors Output luminance

+ Outputimage

Page 53: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list
Page 54: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list
Page 55: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list
Page 56: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list
Page 57: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list
Page 58: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

A A’

B B’

Page 59: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list
Page 60: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list
Page 61: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

:

A A’

:

B B’

::

Page 62: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

:

A A’

B

::

B’

:

Page 63: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list
Page 64: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list
Page 65: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Image Analogies for Animation

Bénard et al. SIGGRAPH 2013

Page 66: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Illumination-GuidedExample-BasedStylizationof3DRenderings

StyLit

1CTUinPrague,FEE 2AdobeResearch

JakubFišer1

EliShechtman2

OndřejJamriška1

PaulAsente2

DanielSýkora1

MichalLukáč1

JingwanLu2

Page 67: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Neural texture

Page 68: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Can we model statistical textures with neural networks?

Page 69: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Texture synthesis

Gatys et al., NIPS 2015

Page 70: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Texture synthesis

Gatys et al., NIPS 2015

Page 71: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Neural stylization

Page 72: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Neural Style Transfer

Page 73: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Results

Page 74: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list
Page 75: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Where are we?

Procedural NPR Patch-Based (Analogies)

Neural

How do we get the best of each?

Page 76: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Adding control to neural stylization

Page 77: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Color Control - Color Preservation

Gatys et al., arXiv 2016

Page 78: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Color Preservation

Page 79: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Color Preservation

Page 80: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Color Control - Luminance Style Transfer

(a) (b)

(c) (d)

(e) (f)

Stylize

Gatys et al., arXiv 2016

Page 81: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Color Preservation

Page 82: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Spatial Control

Gatys et al., arXiv 2016

Page 83: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Spatial Control

Gatys et al., arXiv 2016

Page 84: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Spatial Control

Guidance Channels

No control

Page 85: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Spatial Control

Gatys et al., arXiv 2016

Page 86: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Neural animation

Page 87: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Where are we?

Procedural NPR Patch-Based (Analogies)

Neural

Open question: How do we get the best of each?

Page 88: Artistic Stylization and Rendering - GitHub Pages€¦ · class Nullspace implements Constants, Cloneable {/** The rows of the nullspace */ Vector rows = new Vector(); /** A list

Open problemsHow do we author images?

Learning style from large datasets

Detailed control of style

Creating 3D animation

Making the details look good

Make the fast methods better

What is style? What is texture?