Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Last Time • Resampling – Ideal reconstruction – You can only ideally reconstruct band-limited functions • Otherwise high frequencies alias as lower frequencies when reconstructed – Point samples images should be reconstructed with sinc filters, but we don’t do this – Two ways to avoid aliasing: smooth (band-limit) the original image before sampling, or reconstruct with a filter close to a sinc • Compositing – – – – 2/17/04 Alpha describes the opacity of a pixel Compositing is always co Fc f Gcg Different F and G lead to different operations Alpha comes from blue-screening, hand generation, or computer generated imagery © University of Wisconsin, CS559 Spring 2004 Today • Painterly rendering • The Graphics Pipeline 2/17/04 © University of Wisconsin, CS559 Spring 2004 Painterly Filters • Many methods have been proposed to make a photo look like a painting • Today we look at one: Painterly-rendering with brushes of multiple sizes • Basic ideas: – Build painting one layer at a time, from biggest to smallest brushes – At each layer, add detail missing from previous layer 2/17/04 © University of Wisconsin, CS559 Spring 2004 Algorithm 1 function paint(sourceImage,R1 ... Rn) // take source and several brush sizes { canvas := a new constant color image // paint the canvas with decreasing sized brushes for each brush radius Ri, from largest to smallest do { // Apply Gaussian smoothing with a filter of size const * radius // Brush is intended to catch features at this scale referenceImage = sourceImage * G(fs Ri) // Paint a layer paintLayer(canvas, referenceImage, Ri) } return canvas } 2/17/04 © University of Wisconsin, CS559 Spring 2004 Algorithm 2 procedure paintLayer(canvas,referenceImage, R) // Add a layer of strokes { S := a new set of strokes, initially empty D := difference(canvas,referenceImage) // euclidean distance at every pixel for x=0 to imageWidth stepsize grid do // step in size that depends on brush radius 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 := sum(Di,j for i,j in M) / grid2 if (areaError > T) then { // find the largest error point (x1,y1) := max Di,j in M s :=makeStroke(R,x1,y1,referenceImage) add s to S } } paint all strokes in S on the canvas, in random order } 2/17/04 © University of Wisconsin, CS559 Spring 2004 Results Original Biggest brush Medium brush added Finest brush added 2/17/04 © University of Wisconsin, CS559 Spring 2004 Point Style • Uses round brushes • We provide a routine to “paint” round brush strokes into an image for the project 2/17/04 © University of Wisconsin, CS559 Spring 2004 Where to now… • We are now done with images • We will spend several weeks on the mechanics of 3D graphics – – – – Coordinate systems and Viewing Clipping Drawing lines and polygons Lighting and shading • We will finish the semester with modeling and some additional topics 2/17/04 © University of Wisconsin, CS559 Spring 2004 Graphics Toolkits • Graphics toolkits typically take care of the details of producing images from geometry • Input (via API functions): – Where the objects are located and what they look like – Where the camera is and how it behaves – Parameters for controlling the rendering • Functions (via API): – Perform well defined operations based on the input environment • Output: Pixel data in a framebuffer – an image in a special part of memory – Data can be put on the screen – Data can be read back for processing (part of toolkit) 2/17/04 © University of Wisconsin, CS559 Spring 2004 OpenGL • OpenGL is an open standard graphics toolkit – Derived from SGI’s GL toolkit • Provides a range of functions for modeling, rendering and manipulating the framebuffer • What makes a good toolkit? • Alternatives: Direct3D, Java3D - more complex and less well supported 2/17/04 © University of Wisconsin, CS559 Spring 2004 Coordinate Systems • The use of coordinate systems is fundamental to computer graphics • Coordinate systems are used to describe the locations of points in space • Multiple coordinate systems make graphics algorithms easier to understand and implement 2/17/04 © University of Wisconsin, CS559 Spring 2004 Coordinate Systems (2) • Different coordinate systems represent the same point in different ways y v (2,3) y v u (1,2) u x x • Some operations are easier in one coordinate system than in another – For instance, it’s easier to determine how far away something is if one axis of your coordinate system points away from you 2/17/04 © University of Wisconsin, CS559 Spring 2004 Transformations • Transformations convert points between coordinate systems y v (2,3) u x 2/17/04 u=x-1 v=y-1 x=u+1 y=v+1 © University of Wisconsin, CS559 Spring 2004 y v (1,2) u x Transformations (Alternate Interpretation) • Transformations modify an object’s shape and location in one coordinate system (2,3) y x x’=x-1 y’=y-1 y (1,2) x=x’+1 y=y’+1 • The previous interpretation is better for some problems, this one is better for others 2/17/04 © University of Wisconsin, CS559 Spring 2004 x 2D Affine Transformations • An affine transformation is one that can be written in the form: x a xx x a xy y bx y a yx x a yy y by or x a xx a xy x bx y a a y b yx yy y 2/17/04 © University of Wisconsin, CS559 Spring 2004 Why Affine Transformations? • Affine transformations are linear – Transforming all the individual points on a line gives the same set of points as transforming the endpoints and joining them – Interpolation is the same in either space: Find the halfway point in one space, and transform it. Will get the same result if the endpoints are transformed and then find the halfway point 2/17/04 © University of Wisconsin, CS559 Spring 2004 Composition of Affine Transforms • Any affine transformation can be composed as a sequence of simple transformations: – Translation – Scaling (possibly with negative values) – Rotation • See Shirley 1.3.6 2/17/04 © University of Wisconsin, CS559 Spring 2004 2D Translation • Moves an object x ? ? x ? y ? ? y ? y y ? by x 2/17/04 © University of Wisconsin, CS559 Spring 2004 bx x 2D Translation • Moves an object x 1 0 x bx y 0 1 y b y y y by x 2/17/04 © University of Wisconsin, CS559 Spring 2004 bx x 2D Scaling • Resizes an object in each dimension y y 2/17/04 x ? ? x ? y ? ? y ? y syy x x sxx © University of Wisconsin, CS559 Spring 2004 x 2D Scaling • Resizes an object in each dimension y y 2/17/04 x s x y 0 0 x 0 s y y 0 y syy x x sxx © University of Wisconsin, CS559 Spring 2004 x 2D Rotation • Rotate counter-clockwise about the origin by an angle y x ? ? x ? y ? ? y ? y x 2/17/04 © University of Wisconsin, CS559 Spring 2004 x 2D Rotation • Rotate counter-clockwise about the origin by an angle y x cos y sin sin x 0 cos y 0 y x 2/17/04 © University of Wisconsin, CS559 Spring 2004 x X-Axis Shear • Shear along x axis (What is the matrix for y axis shear?) y x ? ? x ? y ? ? y ? y x 2/17/04 © University of Wisconsin, CS559 Spring 2004 x X-Axis Shear • Shear along x axis (What is the matrix for y axis shear?) x 1 y 0 y y shx x 0 1 y 0 x 2/17/04 © University of Wisconsin, CS559 Spring 2004 x Reflect About X Axis x ? ? x ? y ? ? y ? x • What is the matrix for reflect about Y axis? 2/17/04 © University of Wisconsin, CS559 Spring 2004 x Reflect About X Axis x 1 y 0 0 x 0 1 y 0 x • What is the matrix for reflect about Y axis? 2/17/04 © University of Wisconsin, CS559 Spring 2004 x Rotating About An Arbitrary Point • What happens when you apply a rotation transformation to an object that is not at the origin? y x 2/17/04 ? © University of Wisconsin, CS559 Spring 2004 Rotating About An Arbitrary Point • What happens when you apply a rotation transformation to an object that is not at the origin? – It translates as well y x 2/17/04 © University of Wisconsin, CS559 Spring 2004 x How Do We Fix it? • How do we rotate an about an arbitrary point? – Hint: we know how to rotate about the origin of a coordinate system 2/17/04 © University of Wisconsin, CS559 Spring 2004 Rotating About An Arbitrary Point y y x y x y x 2/17/04 © University of Wisconsin, CS559 Spring 2004 x Rotate About Arbitrary Point • Say you wish to rotate about the point (a,b) • You know how to rotate about (0,0) • Translate so that (a,b) is at (0,0) – x’=x–a, y’=y–b • Rotate – x”=(x-a)cos-(y-b)sin, y”=(x-a)sin+(y-b)cos • Translate back again – xf=x”+a, yf=y”+b 2/17/04 © University of Wisconsin, CS559 Spring 2004 Scaling an Object not at the Origin • What also happens if you apply the scaling transformation to an object not at the origin? • Based on the rotating about a point composition, what should you do to resize an object about its own center? 2/17/04 © University of Wisconsin, CS559 Spring 2004 Back to Rotation About a Pt • Say R is the rotation matrix to apply, and p is the point about which to rotate x x p • Translation to Origin: • Rotation: x Rx R( x p) Rx Rp • Translate back: x x p Rx Rp p • The translation component of the composite transformation involves the rotation matrix. What a mess! 2/17/04 © University of Wisconsin, CS559 Spring 2004 Homogeneous Coordinates • • • • Use three numbers to represent a point (x,y)=(wx,wy,w) for any constant w0 Typically, (x,y) becomes (x,y,1) Translation can now be done with matrix multiplication! x a xx y a yx 1 0 2/17/04 a xy a yy 0 bx x by y 1 1 © University of Wisconsin, CS559 Spring 2004 Basic Transformations • Translation: 1 0 bx 0 1 b y 0 0 1 • Scaling: s x 0 0 2/17/04 0 sy 0 Rotation: cos sin 0 0 0 1 © University of Wisconsin, CS559 Spring 2004 sin cos 0 0 0 1 Homogeneous Transform Advantages • Unified view of transformation as matrix multiplication – Easier in hardware and software • To compose transformations, simply multiply matrices – Order matters: AB is generally not the same as BA • Allows for non-affine transformations: – Perspective projections! – Bends, tapers, many others 2/17/04 © University of Wisconsin, CS559 Spring 2004