Computer Graphics Filling Color Basics Of Color elements
Computer Graphics Filling & Color
Basics Of Color • elements of color:
• Physics: Basics of Color – Illumination • Electromagnetic spectra – Reflection • Material properties • Surface geometry and microgeometry • Perception – Physiology and neurophysiology – Perceptual psychology
Electromagnetic Spectrum
How well do we see color? • What color do we see the best? – Yellow-green at 550 nm • What color do we see the worst? – Blue at 440 nm • Flashback: Color tables (color maps) for color storage
Humans and Light • when we view a source of light, our eyes respond to – hue: the color we see (red, green, purple) • dominant frequency – saturation: how far is color from grey • how far is the color from gray (pink is less saturated than red, sky blue is less saturated than royal blue) – brightness: how bright is the color • how bright are the lights illuminating the object?
Hue • hue (or simply, "color") is dominant wavelength – integration of energy for all visible wavelengths is proportional to intensity of color
Saturation or Purity of Light • how washed out or how pure the color of the light appears – contribution of dominant light vs. other frequencies producing white light
Intensity, Brightness • intensity : radiant energy emitted per unit of time, per unit solid angle, and per unit projected area of the source (related to the luminance of the source) • brightness : perceived intensity of light
Combining Colors Additive (RGB) Shining colored lights on a white ball Subtractive (CMYK) Mixing paint colors and illuminating with white light
Colour Matching Experiment Mixing of 3 primaries Target colour overlap Adjust intensities to match the colour
RGB Color Space (Color Cube) • Define colors with (r, g, b) amounts of red, green, and blue
CMY Color Model CMY (short for Cyan, Magenta, Yellow, and key) is a subtractive color model.
The CMY Color Model • Cyan, magenta, and yellow are the complements of red, green, and blue – We can use them as filters to subtract from white – The space is the same as RGB except the origin is white instead of black • This is useful for hardcopy devices like laser printers – If you put cyan ink on the page, no red light is reflected
YIQ Color Space • YIQ is the color model used for color TV in America. Y is brightness, I & Q are color – Note: Y is the same as Color space XYZ – Result: Use the Y alone and backwards compatibility with B/W TV! – I and Q are hue and purity – These days when you convert RGB image to B/W image, the green and blue components are thrown away and red is used to control shades of grey (usually)
Converting Color Spaces • • Y = 0. 299 R + 0. 587 G + 0. 114 B I=R–Y Q=B–Y Converting between color models can also be expressed as such a matrix transform: • Note the relative unimportance of blue in computing the Y
Converting Color Spaces
HSV Color Space • A more intuitive color space – H = Hue – S = Saturation – V = Value (or brightness) Hue Saturation Value
HSV Color Model H 0 120 240 * * * 60 270 S 1. 0 0. 0 * 1. 0 0. 5 0. 0 V 1. 0 0. 5 0. 0 1. 0 0. 7 Color Red Green Blue White Gray Black ? ? ? Figure 15. 16&15. 17 from H&B
Intuitive Color Spaces
Halftoning • A technique used in newspaper printing • Only two intensities are possible, blob of ink and no blob of ink • But, the size of the blob can be varied • Also, the dither patterns of small dots can be used
Halftoning
Halftoning – dot size
Spatial versus Intensity Resolution • Halftone Approximation: Dither – n ´ n pixels encode n 2 + 1 intensity levels • The distribution of intensities is randomized: dither noise, to avoid repeating visual artifacts
Dithering • Halftoning for color images
Filling Polygons • So we can figure out how to draw lines and circles • How do we go about drawing polygons? • We use an incremental algorithm known as the scan-line algorithm
Polygon • Ordered set of vertices (points) – Usually counter-clockwise • • • Two consecutive vertices define an edge Left side of edge is inside Right side is outside Last vertex implicitly connected to first In 3 D vertices are co-planar 27
Filling Polygons • Three types of polygons 1. Simple convex 2. simple concave 3. non-simple (self-intersection) Convex polygons have the property that intersecting lines crossing it either one (crossing a corner), two (crossing an edge, going through the polygon and going out the other edge), or an infinite number of times (if the intersecting line lies on an edge).
Convex Does a straight line connecting ANY two points that are inside the polygon intersect any edges of the polygon?
Concave The polygon edges may also touch each other, but they may not cross one another.
Complex polygons are basically concave polygons that may have self-intersecting edges. The complexity arises while distinguishing which side is inside the polygon when filling it.
Some Problems 1. Which pixels should be filled in? 2. Which happened to the top pixels? To the rightmost pixels?
Flood Fill • 4 -fill – Neighbor pixels are only up, down, left, or right from the current pixel • 8 -fill – Neighbor pixels are up, down, left, right, or diagonal
4 vs 8 connected Define: 4 -connected versus 8 -connected, its about the neighbors
4 vs 8 connected Fill Result: 4 -connected versus 8 -connected “seed pixel”
Flood Fill • Algorithm: 1. Draw all edges into some buffer 2. Choose some “seed” position inside the area to be filled 3. As long as you can 1. “Flood out” from seed or colored pixels » 4 -Fill, 8 -Fill
Flood Fill Algorithm Seed Position Edge “Color” void boundary. Fill 4(int x, int y, int fill, int boundary) { Fill “Color” int curr; curr = get. Pixel(x, y); if ((current != boundary) && (current != fill)) { set. Color(fill); set. Pixel(x, y); boundary. Fill 4(x+1, y, fill, boundary); boundary. Fill 4(x-1, y, fill, boundary); boundary. Fill 4(x, y+1, fill, boundary); boundary. Fill 4(x, y-1, fill, boundary); } }
Scan-Line Polygon Example Polygon Vertices Maxima / Minima Edge Pixels Scan Line Fill
Scan Line Algorithms Create a list of vertex events (bucket sorted by y)
Initialize all of the edges
• For each edge, the following information needs to be kept in a table: 1. The minimum y value of the two vertices 2. The maximum y value of the two vertices 3. The x value associated with the minimum y value 4. The slope of the edge
0 (10, 10) 1 (10, 16) 2 (16, 20) 3 (28, 10) 4 (28, 16) 5 (22, 10) An Example
10 Scan-Line Polygon Fill Algorithm Scan Line 8 6 4 2 0 2 4 6 8 10 12 14 16
Scan-Line Polygon Fill Algorithm • The basic scan-line algorithm is as follows: – Find the intersections of the scan line with all edges of the polygon – Sort the intersections by increasing x coordinate – Fill in all pixels between pairs of intersections that lie interior to the polygon
Scanline Algorithms • given vertices, fill in the pixels triangles • split into two regions • fill in between edges arbitrary polygons (non-simple, non-convex) • build edge table • for each scanline • obtain list of intersections, i. e. , AEL • use parity test to determine in/out and fill in the pixels 45
Scan-Line Polygon Fill Algorithm (cont…)
Examples:
Solutions:
Scan Line Algorithms Create a list of the edges intersecting the first scanline Sort this list by the edge’s x value on the first scanline Call this the active edge list
1. Horizontal Edges
Polygon Fill B C Parity 0 = even 1 = odd Parity 0 1 D A F E
Polygon Fill 2 B Parity 0 = even 1 = odd C F Parity 0 1 D A E
2. Bottom and Left Edges vs. Top and Right Edges
Edge Tables • edge table (ET) – store edges sorted by y in linked list • at ymin, store ymax, xmin, slope • active edge table (AET) – active: currently used for computation – store active edges sorted by x • update each scanline, store ET values + current_x – for each scanline (from bottom to top) • do EAT bookkeeping • traverse EAT (from leftmost x to rightmost x) – draw pixels if parity odd
Scanline Rasterization Special Handling • Intersection is an edge end point, say: (p 0, p 1, p 2) ? ? • (p 0, p 1, p 2), so we can still fill pairwise • In fact, if we compute the intersection of the scanline with edge e 1 and e 2 separately, we will get the intersection point p 1 twice. Keep both of the p 1.
Scanline Rasterization Special Handling • But what about this case: still (p 0, p 1, p 2)
Edge Table
Active Edge Table (AET) • A list of edges active for current scanline, sorted in increasing x y= 9 y=8
Edge Table Bookkeeping • setup: sorting in y – bucket sort, one bucket per pixel – add: simple check of ET[current_y] – delete edges if edge. ymax > current_y • main loop: sorting in x – for polygons that do not self-intersect, order of edges does not change between two scanlines – so insertion sort while adding new edges suffices
Parity (Odd-Even) Rule Begin from a point outside the polygon, increasing the x value, counting the number of edges crossed so far, a pixel is inside the polygon if the number of edges crossed so far (parity) is odd, and outside if the number of edges crossed so far (parity) is even. This is known as the parity, or the odd-even, rule. It works for any kind of polygons. Parity starting from even odd odd even
Polygon Scan-conversion Algorithm Construct the Edge Table (ET); Active Edge Table (AET) = null; for y = Ymin to Ymax Merge-sort ET[y] into AET by x value Fill between pairs of x in AET for each edge in AET if edge. ymax = y remove edge from AET else edge. x = edge. x + dx/dy sort AET by x value end scan_fill
Rasterization Special Cases -Edge Shortening Trick: -Recall Odd-Parity Rule Problem: -Implement “Count Once” case with edge shortening: A A B C x. A, y. B’, 1/m. AB B' C x. C, y. B’, 1/m. CB B
Polygon Rasterization • Ignore horizontal 9 lines 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9
Polygon Rasterization • Ignore horizontal lines • Sort edges by smaller y coordinate Edg e A G B C D E F ymi n 1 1 2 2 5 6 6 9 8 7 F 6 D E G 5 4 C 3 2 B A 1 0 0 1 2 3 4 5 6 7 8 9
Polygon Rasterization • For each scanline… • Add edges where y = ymin Edg • Sorted by x e A G • Then by dx/dy B C D E F Edge x dx/dy ymax 9 8 7 F 6 ymi n 1 1 2 2 5 6 6 D E G 5 4 C 3 2 B A 1 0 0 1 2 3 4 5 6 7 8 9
Polygon Rasterization Plotting rules for when segments lie on pixels 1. Plot lefts 2. Don’t plot rights Edg ymi 3. Plot bottoms Ae n 1 G 1 4. Don’t plot tops B C D E F 2 2 5 6 6 Edge x dx/dy ymax 9 8 7 F 6 D E G 5 4 C 3 2 B A 1 0 0 1 2 3 4 5 6 7 8 9
Polygon Rasterization • y=1 • Delete y = ymax edges • Update x • Add y = ymin Edg ymi e n edges A 1 • For each pair. G 1 B 2 x 0, x 1, plot from C 2 D 5 ceil(x 0) E 6 to ceil(x 1) – 1 F 6 Edge G A x 1 1 dx/dy 2/7 4/2 ymax 8 3 9 8 7 F 6 D E G 5 4 C 3 2 B A 1 0 0 1 2 3 4 5 6 7 8 9
Polygon Rasterization • y=2 • Delete y = ymax edges • Update x • Add y = ymin Edg ymi e n edges A 1 • For each pair. G 1 B 2 x 0, x 1, plot from C 2 D 5 ceil(x 0) E 6 to ceil(x 1) – 1 F 6 Edge G A B C x 1 2/7 3 8 8 dx/dy 2/7 4/2 -3/1 0/3 ymax 8 3 3 5 9 8 7 F 6 D E G 5 4 C 3 2 B A 1 0 0 1 2 3 4 5 6 7 8 9
Polygon Rasterization • y=3 • Delete y = ymax edges • Update x • Add y = ymin Edg ymi e n edges A 1 • For each pair. G 1 B 2 x 0, x 1, plot from C 2 D 5 ceil(x 0) E 6 to ceil(x 1) – 1 F 6 Edge G C x 1 4/7 8 dx/dy 2/7 0/3 ymax 8 5 9 8 7 F 6 D E G 5 4 C 3 2 B A 1 0 0 1 2 3 4 5 6 7 8 9
Polygon Rasterization • y=4 • Delete y = ymax edges • Update x • Add y = ymin Edg ymi e n edges A 1 • For each pair. G 1 B 2 x 0, x 1, plot from C 2 D 5 ceil(x 0) E 6 to ceil(x 1) – 1 F 6 Edge G C x 1 6/7 8 dx/dy 2/7 0/3 ymax 8 5 9 8 7 F 6 D E G 5 4 C 3 2 B A 1 0 0 1 2 3 4 5 6 7 8 9
Polygon Rasterization • y=5 • Delete y = ymax edges • Update x • Add y = ymin Edg ymi e n edges A 1 • For each pair. G 1 B 2 x 0, x 1, plot from C 2 D 5 ceil(x 0) E 6 to ceil(x 1) – 1 F 6 Edge G D x 2 1/7 8 dx/dy 2/7 1/4 ymax 8 9 9 8 7 F 6 D E G 5 4 C 3 2 B A 1 0 0 1 2 3 4 5 6 7 8 9
Polygon Rasterization • y=6 • Delete y = ymax edges • Update x • Add y = ymin Edg ymi e n edges A 1 • For each pair. G 1 B 2 x 0, x 1, plot from C 2 D 5 ceil(x 0) E 6 to ceil(x 1) – 1 F 6 Edge G F E D x 2 3/7 4 6 8 1/4 dx/dy 2/7 -1/2 1/1 1/4 ymax 8 8 9 9 9 8 7 F 6 D E G 5 4 C 3 2 B A 1 0 0 1 2 3 4 5 6 7 8 9
Polygon Rasterization • y=7 • Delete y = ymax edges • Update x • Add y = ymin Edg ymi e n edges A 1 • For each pair. G 1 B 2 x 0, x 1, plot from C 2 D 5 ceil(x 0) E 6 to ceil(x 1) – 1 F 6 Edge G F E D x 2 5/7 3 1/2 7 8 2/4 dx/dy 2/7 -1/2 1/1 1/4 ymax 8 8 9 9 9 8 7 F 6 D E G 5 4 C 3 2 B A 1 0 0 1 2 3 4 5 6 7 8 9
Polygon Rasterization • y=8 • Delete y = ymax edges • Update x • Add y = ymin Edg ymi e n edges A 1 • For each pair. G 1 B 2 x 0, x 1, plot from C 2 D 5 ceil(x 0) E 6 to ceil(x 1) – 1 F 6 Edge E D x 8 8 3/4 dx/dy 1/1 1/4 ymax 9 9 9 8 7 F 6 D E G 5 4 C 3 2 B A 1 0 0 1 2 3 4 5 6 7 8 9
Polygon Rasterization • y=9 • Delete y = ymax edges • Update x • Add y = ymin Edg ymi e n edges A 1 • For each pair. G 1 B 2 x 0, x 1, plot from C 2 D 5 ceil(x 0) E 6 to ceil(x 1) – 1 F 6 Edge x dx/dy ymax 9 8 7 F 6 D E G 5 4 C 3 2 B A 1 0 0 1 2 3 4 5 6 7 8 9
Scan Line Algorithms For each scanline: 1. Maintain active edge list (using vertex events) 2. replace insert delete Increment edge’s x-intercepts, sort by x-intercepts 3. Output spans between left and right edges
Penetrating Polygons False edges and new polygons! Compare z value & intersection when AET is calculated
Example Let’s apply the rules to scan line 8 below. We fill in the pixels from point a, pixel (2, 8), to the first pixel to the left of point b, pixel (4, 8), and from the first pixel to the right of point c, pixel (9, 8), to one pixel to the left of point d, pixel (12, 8). For scan line 3, vertex A counts once because it is the ymin vertex of edge FA, but the ymax vertex of edge AB; this causes odd parity, so we draw the span from there to one pixel to the left of the intersection with edge CB. D F b a odd even c d even odd E C A B
Four Elaborations (cont. ) G G F H I E E C J A B D
Halftoning For 1 -bit (B&W) displays, fill patterns with different fill densities can be used to vary the range of intensities of a polygon. The result is a tradeoff of resolution (addressability) for a greater range of intensities and is called halftoning. The pattern in this case should be designed to avoid being noticed. These fill patterns are chosen to minimize banding.
- Slides: 80