Elements of Computer Graphics Images - PowerPoint PPT Presentation

1 / 43
About This Presentation
Title:

Elements of Computer Graphics Images

Description:

Digital Differential Analyser: an algorithm for scan-converting lines ... Scanning and Digital Photography. Raster Image Data obtained directly from the real world. ... – PowerPoint PPT presentation

Number of Views:2009
Avg rating:3.0/5.0
Slides: 44
Provided by: johndin
Category:

less

Transcript and Presenter's Notes

Title: Elements of Computer Graphics Images


1
Elements of Computer Graphics Images
2
Elements of CG Images
  • Output Primitives (basic objects out of which a
    picture is composed)
  • Text
  • Polylines
  • Filled Regions
  • Raster Images
  • Each primitive described by attributes which
    affect how it appears

3
Text
  • Some devices distinguish between text mode and
    graphics mode
  • Text attributes
  • Font/typeface set of character shapes
  • Also colour, size, spacing and orientation

ab
4
Polylines
v3
  • Connected sequence of straight lines e.g. Line
    drawings
  • Each straight line in a polyline is called an
    edge
  • Two adjacent edges meet at a vertex
  • A polygon is a polyline where first and last
    vertices are connected by an edge
  • Attributes of Polylines
  • Colour, thickness, stippling

v2
e2
e1
v1
5
Filled Regions
  • Shapes filled with some colour or pattern
  • Usually bounded by a polygon
  • Polygon Filling Algorithms used for filling in
    regions defined by Vector Data

6
Raster Image
  • An image made up of many small regularly placed
    cells called pixels (picture elements)
  • Stored as an array of numerical values commonly
    called a pixelmap, pixmap or bitmap

7
Scan Conversion
  • DDA Line Drawing
  • Anti-aliasing

8
Scan Conversion
  • Rasterization or Scan Conversion is required in
    order to convert vector data to Raster format for
    a display device scanning regular RASTER lines
  • Convert a line to a set of regular pixels. Also
    involves determining inside/outside areas when
    filling polygons.
  • The scan conversion process is interleaved with
    other processes to improve the final image. These
    are not entirely restricted to the discretization
    of vectors but in determining the colour of each
    pixel in the raster. e.g
  • shading illumination,
  • hidden surface removal

9
Pixel Co-ordinates
A pixel (10, 6)
Y
X
A point (-12.3, 10.3, 0)
X
Z
Y
  • SCREEN COORDINATES
  • a.k.a device co-ordinates, pixel co-ordinates
  • On display hardware we deal with finite, discrete
    coordinates
  • X, Y values in positive integers
  • 0,0 is measured from top-left usually with Y
    pointing down
  • MODELLING CO-ORDINATES
  • Mathematically vectors are defined in an
    infinite, real-number cartesian co-ordinate
    system

10
How does the machine draw Lines?
  • Give it a start and end position.
  • Figure out which pixels to colour in between
    these
  • How do we do this?
  • Line-Drawing Algorithms DDA, Bresenhams
    Algorithm

11
Line Equation
  • The equation of an infinite line is given by
  • The gradient m applies to the line as a whole but
    also to every part of the line.
  • So given any two points on the line we can
    calculate the slope

(x2 , y2)
(x1, y1)
b
12
DDA Algorithm
  • Digital Differential Analyser an algorithm for
    scan-converting lines
  • Based on calculating the rate of change of x or y
    coordinates (Dx or Dy respectively)
  • For each part of the line the following holds
    true
  • If Dx 1 i.e. 1 pixel then
  • i.e. for each pixel we move right (along the x
    axis), we need to move down (along the y-axis) by
    m pixels
  • In pixels, the gradient represents how many
    pixels we step upwards (Dy) for every step to the
    right (Dx)

13
Example
  • e.g. p1 (5, 10), p2 (25, 20)
  • Starting at p1, we move right by one pixel and
    down by 0.5 pixels each time.
  • But we cant move by half-a pixel so in pixel
    coordinates we need to round-off to the nearest
    pixel value

p1 (5, 10)
p2 (25, 20)
14
Rounding Off
  • Note that the actual pixel position is actually
    stored as a REAL number (in C/C/java a float or
    a double)
  • But we Round Off to the nearest whole number just
    before we draw the pixel.
  • e.g. if m.33

X Y Rounded (x,y)
15
Simple DDA
  • So basically DDA draws lines as follows
  • Start at first endpoint.
  • Draw pixel.
  • Step right by one pixel and down by mchange_in_x
  • (But change_in_x is 1 pixel!
  • so just step down by m pixels)
  • Draw pixel.
  • Repeat from step 3, until we reach second endpoint

16
A Flow Chart for DDA
m (x2-x1) / (y2-y1) Let x x1 Let y y1
Draw Pixel at (x, y)
START
Let x x1 Let y ym
Is x x2?
Draw Pixel at (x, ROUND(y))
END
YES
NO
17
Pseudocode
  • Let x x1 y y1 m (y2-y1)/(x2-x1)
  • Draw pixel (x, y)
  • WHILE (x lt x2) //i.e. we reached the second
    endpoint
  • x x 1 //step right by one pixel
  • y y m //step down by m pixels
  • Draw pixel (ROUND(x), ROUND(y))

18
Unfortunately
  • If the slope is very steep (i.e. Dy is much
    greater than Dx) then theres a problem. i.e. m
    is much greater than 1
  • This is because we only draw one pixel for each x
    value (each time we step right)
  • Solution if the slope is too big, step for y
    instead

19
Y version
  • Let x x1 y y1 m (x2-x1)/(y2-y1)
  • Draw pixel (x, y)
  • WHILE (y lt y2) //i.e. we reached the second
    endpoint
  • y y 1 //step down by one pixel
  • x x m //step right by m pixels
  • Draw pixel (ROUND(x), ROUND(y))

20
Best of both worlds
  • Of course, this is no better than the x-version
    as it has the same problems when the slope is
    flat.
  • If Dx is much greater than Dy we get the same
    broken line
  • So we should check the steepness and call the
    appropriate version
  • If the Gradient is high we use step along the y
    axis other wise we step along the x axis

21
  • Let x x1 y y1
  • Draw pixel (x, y)
  • IF ((y2-y1)gt(x2-x1)) //if its steep
  • THEN
  • m (x2-x1)/(y2-y1) //y-version
  • WHILE (y lt y2)
  • y y 1 x x m
  • Draw pixel (ROUND(x), ROUND(y))
  • ELSE
  • m (y2-y1)/(x2-x1) //x-version
  • WHILE (x lt x2)
  • x x 1 y y m
  • Draw pixel (ROUND(x), ROUND(y))

22
In C/C
void lineDDA (int x1, int y1, int x2, int y2)
int dx x2 x1, dy y2 y1, steps, k float
xIncr, yIncr, x x1, y y1 if (
abs(dx)gtabs(dy) ) steps abs(dx) else steps
abs(dy) xIncr dx / (float) steps yIncr
dy / (float) steps drawPixel ( ROUND(x),
ROUND(y) ) for (k0 kltsteps k) x
x xIncr y y yIncr drawPixel(
ROUND(x), ROUND(y) )
23
Bresenhams Algorithm
  • One disadvantage of DDA is the ROUNDing part
    which can be expensive
  • Bresenhams Algorithm is based on essentially the
    same principles but is completely based on
    integer variables
  • One of the earliest algorithms in computer
    graphics

24
Basic Concept
int deltax abs (x2-x1) int deltay abs
(y2-y1) float error 0 float deltaError
deltay / deltax int yy1 for (int x x1 xltx2
x) drawPixel(x, y) error error
deltaerror if (error gt 0.5) y
y1 error error - 1
25
Optimisation
int deltax abs (x2-x1) int deltay abs
(y2-y1) int error 0 int Xslope deltay int
yy1 for (int x x1 xltx2 x) drawPixel(x,
y) error error Xslope if (error gt 0.5
deltax) y y1 error error -
deltax
  • Multiply all fractions by deltax to get rid of
    the floats.
  • We might also want to get rid of the 0.5 in the
    IF statement. By multiplying both sides of the
    inequality by 2
  • Multiplication by two is efficiently achieved by
    a bit shift

26
Optimisation
int deltax abs (x2-x1) int deltay abs
(y2-y1) int error 0 int Xslope deltay int
yy1 for (int x x1 xltx2 x) drawPixel(x,
y) error error Xslope if (2error gt
deltax) y y1 error error -
deltax
  • Multiply all fractions by deltax to get rid of
    the floats.
  • We might also want to get rid of the 0.5 in the
    IF statement. By multiplying both sides of the
    inequality by 2
  • Multiplication by two is efficiently achieved by
    a bit shift

27
Bit shift (side note)
  • Shifting decimal values 1 digit to the left
    multiplies by 10
  • e.g. 5x10 50x10 500 etc.
  • Shifting 1 digit to the left in binary multiplies
    a number by 2
  • EXAMPLE1
  • 0001 in binary is 1 in decimal
  • Shifting the 1 one digit to the left makes it
    0010 in binary, which is 2 in decimal
  • EXAMPLE2
  • 0101 in binary is 5 in decimal
  • Shifting left gives 1010, which is 10 in decimal
  • The simple operation of shifting binary digits to
    the left is much faster to implement in hardware
    (circuits) than multiplication.

28
Other Quadrants
  • Note that this only applies to lines with a
    positive gradient
  • But you can easily write a separate case for each
    other case
  • Also if the gradient is too steep you need to
    step for x instead of y (as we saw in DDA)
  • Swap y0 for y1
  • Step for x instead of y
  • Increment by -x

Step for y instead of x
  • Increment by -y
  • Swap y0 for y1

Increment by -y
Swap x0 for x1
  • Step for x instead of y
  • Increment by x

- Swap x0 for x1 - Step for y instead of x
29
Polygon Filling
A simple recursive flood-fill algorithm user
selects a pixel S. S and all adjacent pixels of
the same colour are changed, and the adjacent
pixels of those etc leads to some wasted
procesinge
  • Recursive Flood Fill
  • Let orig_col original colour of S
  • Let current_pixel S
  • Change Colour of current_pixel to new_col
  • For all adjacent pixels p
  • If colour orig_col
  • Then let p be the current_pixel
  • Repeat from Step 3

30
Coherent Filling
31
Polygon Scan-conversion
32
Scanning and Digital Photography
  • Raster Image Data obtained directly from the real
    world.

33
Charge Coupled Device
  • The CCD is a sensor containing an array of
    capacitors.
  • Incident light hits the sensors and generates a
    small electronic current which can be digitized
    and stored
  • Ratio of incident light to recorded colour it is
    much more effective than real film
  • Often used in astronomy
  • CCDs are typically sensitive to infrared can
    be used for night-vision

Fuji "Super CCD"
34
Bayer Colour Filter Array
  • CCDs just recorded intensity of incoming light
    (photons)
  • To record colour, we filter light for individual
    sub-pixels
  • Bayer array uses regular pattarn of colours
    arranged in a 2 x 2 squares
  • Human visual system tends to use green light to
    resolve luminance values so two green
    sub-pixels samples are used per pixel
  • Red and blue are for determining chrominance or
    hue
  • Demosaicing techniques are used to reconstruct
    the image
  • N.B. Other patterns are also used

Bayer filters overlayed over sensor array
35
Demosaicing
  • We have a mosaic of Bayer squares. Each pixel is
    either entirely green entirely blue or entirely
    red.
  • But we need RGB colours for each pixel!
  • One naive solution
  • Assign one colour C for each of the four pixels
  • Rredintensity, Bblueintensity, G 0.5 (g1g2)
  • However we have pixels of half the original
    resolution

(0, 0.1, 0)
(0.5, 0, 0)
(0.5, 0.2, 0.3)
(0, 0, 0.3)
(0, 0.3, 0)
36
Demosaicing (2)
Bayer Pixels
Demosaiced With Linear Interpolation
37
Linear Interpolation
  • Finding intermediate values between two known
    points
  • Linear interpolation assumes a straight line
    between two values
  • A is halfway between the two endpoints so
  • yA 10.5(4-1) 2.25
  • B is 25 of the way between the two end points
    so
  • yB 10.25(4-1)1.75
  • EXTRAPOLATION C is 125 of the distance between
    y1 and y2 so
  • yC 11.25(4-1) 4.75

C
y24
A
y11
B
For better results in general cases, we normally
use a polynomial or spline interpolation
38
Antialiasing
39
Aliasing
  • Distortion of information due to low-frequency
    sampling
  • In raster images leads to jagged edges with
    staircase effect. Commonly occurs when a pattern
    has details that are smaller than a pixel in
    width
  • We can reduce effects by antialiasing methods to
    compensate for undersampling

40
Antialiasing
Simple perspective projected texture
With some antialiasing
41
Antialiasing
Effectively BLUR edges to make them look smooth
42
FSAA Example
43
Supersampling Example
Use twice the available resolution 4 pixels (2x2
square) for every 1 in the original
44
But we dont actually render this hi-res line.
Instead we downsample it using a trick
Avarage out the colours in the 4 pixel squares
45
Antialiasing by polygon boundary
46
Anti-aliasing with Accumulation
Write a Comment
User Comments (0)
About PowerShow.com