# Using Line Integral Convolution to Render Effects on Images

Save this PDF as:

Size: px
Start display at page:

## Transcription

1 Using Line Integral Convolution to Render Effects on Images Ricardo David Castañeda Marín VISGRAF Lab Instituto Nacional de Matemática Pura e Aplicada A thesis submitted for the degree of Master in Mathematics-Computer Graphics Feb 2009

2 ii

3 Dedicated To My Family...

4 Acknowledgements I am very grateful to my parents Mariela and Gildardo, my sisters Eliana and Andrea and my friends Alejandro Mejia, Julian Lopez and Andres Serrano who have supported all my studies and have encouraged me to carry on with my academic and personal life; this monograph is dedicated to all them. Many thanks to my academic advisor Dr. Luiz Henrique de Figueiredo who accepted my request on working in this topic. Thank you for all the suggestions and for helping me in writing this dissertation. Particular thanks go also to Dr. Luiz Velho for his valuable tips and time we spent discussing new ideas. Those sessions were very helpful, thank you. Also I am in debt with Emilio Ashton Vital Brazil who gave generously his time to offer explanations especially with the pencil effect approach of Section 4.3.

5 Contents List of Figures v 1 Introduction 1 2 Line Integral Convolution DDA Convolution LIC Formulation A Fast LIC algorithm Final Considerations Vector Field Design Basic Design Another Approach - Distance Vector Fields Effects Using LIC Ideas Blur LIC Silhouette Pencil Rendering Painterly Rendering Conclusions and Future Work A Implementation in C++ 29 A.1 Getting Started with CImg A.2 LIC in C++ using CImg A.3 A Basic Vector Field Design System using CImg A.4 LIC effects in C A.4.1 LIC Pencil Effect iii

6 CONTENTS A.4.2 Painterly Rendering B Gallery 41 References 51 iv

7 List of Figures 2.1 LIC algorithm overview DDA convolution LIC Different Values for L FastLIC Image Domain Overflowing Singularities Classification Distance Vector Fields Blur Effect Warping a dithered image Automated Silhouette LIC Silhouette LIC Pencil Effect Examples LIC Spray-Like Effect LIC Pencil Effect Process Painterly Rendering A.1 Color to gray conversion A.2 Basic Vector Field Design example using CImg B.1 Pigeon Point Lighthouse, California B.2 Plymouth Hoe, England B.3 Landscape B.4 Girl Playing Guitar v

8 LIST OF FIGURES B.5 Shoes in the Grass B.6 Cows B.7 Garden IMS, Rio de Janeiro B.8 Live Performance B.9 Live Performance Continued B.10 Live Performance Continued vi

9 1 Introduction In this monograph we are going to expose the use of some ideas involved in the Line Integral Convolution (LIC) algorithm for the generation of many Non-Photorealistic Renditions on arbitrary raster images. In other words, our main objective is to create images that could be considered as pieces of visual art generated using ideas from the LIC algorithm. From this point of view, the output of our algorithms does not need to be considered as right or wrong, an aesthetic judgement will be more appropriate. That is what we are expecting from the reader. It is well known that even since its roots Computer Graphics procedures have been used by artists for both aesthetics and commercial purposes. Our motivation comes from the original paper on LIC (1) which explores another kind of applications considered as realistic effects, more specifically blur-warping. In a similar way, we searched for other uses of these LIC ideas mixing the already known NPR techniques like painterly rendering and pencil sketches. This monograph is then the result of such experiments. The material presented demands basic knowledge of ordinary differential equations and vector calculus. Chapter 2 defines and explains the LIC algorithm to visualize the structure of planar vector fields using white noise as the input image. Since our approach uses arbitrary vector fields to guide the effects, two methods for designing these vector fields are given in chapter 3. Chapter 4 discusses the actual NPR effects results. There is also an appendix A which exposes the implementation of our procedures using the CImg library for image processing and visualization of the results, and an appendix B which is a gallery with our results. 1

10 1. INTRODUCTION 2

11 2 Line Integral Convolution This chapter is about the main algorithm of this text: Line Integral Convolution (LIC). It was introduced in (1) by B. Cabral and L. Leedom at the SIGGRAPH conference in LIC was designed primarily to plot 2D vector fields that could not be visualized with traditional arrows and streamlines, i.e., fields with high density. Due to the low of performance of the original algorithm on large images, over the years several alternatives of the same calculations have been published to increase the speed and the details of the visualization. We will discuss a fast procedure briefly. Since every other algorithm here will be an extension or a derivation from LIC, it is important to have a good understanding of how it works. 2.1 DDA Convolution The LIC algorithm takes as input an image and a vector field defined on the same domain. The output image is computed as a convolution of the intensity values over the integral curves of the vector field (see Figure 2.1). In the case we want to visualize the topology and structure of this field, the input image needs to have pixels uniformly distributed and with mutually independent intensities (6). A simple white noise as input image will be enough for what we want here. On the other hand, the input image can be arbitrarily chosen, and the output image will have an effect depending on the input vector field. We will turn to this subject later. As stated in the original paper, LIC is a generalization of what is known as DDA convolution. The DDA algorithm performs convolution on a line direction rather than 3

12 2. LINE INTEGRAL CONVOLUTION Figure 2.1: LIC algorithm overview - Left to right: White noise, input vector field and output LIC visualization. on integral curves. For each pixel location (i, j) on the input image I, we want to compute the pixel intensity in the output image O(i, j). For this, DDA takes the normalized vector V (i, j) corresponding to that location and moves in its positive and negative directions some fixed length L. This generates a line of locations l(s) = (i, j) + sv (i, j), s { L, L + 1,..., 0,..., L 1, L and a line of pixels intensities I(l(s)) of length 2L + 1. Choosing a filter kernel K : R R with Supp(K) [ L, L], the line function I(l(s)) is filtered and normalized to generate the intensity output O(i, j): O(i, j) = 1 2L + 1 L s= L I(l(s))K(l 1 (i, j) s) 1 2L + 1 I l(i,j) K The symbol stands for discrete convolution and is responsible for the name of the algorithm. So for each pixel we perform a discrete convolution of the input image with some fixed filter kernel. As a special case, when K is chosen to be a box kernel (K 1 on [ L, L] and K 0 everywhere else), the convolution becomes the average sum of the pixels I(l(s)): O(i, j) = 1 2L + 1 L s= L I(l(s)) Fig 2.2 depicts the process. As expected, DDA is very sensitive to the fixed length L, since we are assuming not only that the vector field can be locally approximated by 4

13 2.2 LIC Formulation a straight line, but also that this line has fixed length L everywhere, generating a uneven visualization: linear parts are better represented than vortices or paths with high curvature. Line integral convolution remedies this by performing convolution over integral curves. Figure 2.2: DDA convolution - Convolution over a line of pixels. Picture adapted from (1). 2.2 LIC Formulation LIC can be performed on 2D and 3D spaces. Because we are only concerned with the generation of effects on 2D images, our vector field will have a planar domain. integral curve of the vector field v : Ω R 2 R 2, passing over x 0 Ω at time τ 0, is defined as a function c x0 : [ L, L] R 2 with: d dτ c x 0 (τ) = v(c x0 (τ)), c x0 (0) = x 0 that is, a curve solution of the initial value problem d dτ c(τ) = v(c(τ)), c(0) = x 0 Uniqueness of the solution of this ODE is reached when the field locally satisfies a Lipschitz condition. When d dτ c x(τ) 0 for all x Ω and for all τ [ τ, τ], every c x can be reparametrized by arc length s (2). An easy computation of this reparametrization leads to an alternate definition of integral curves: An 5

14 2. LINE INTEGRAL CONVOLUTION d ds c x 0 (s) = v(c x 0 (s)) v(c x0 (s)), c x 0 (s 0 ) = x 0 Basically the generalization from DDA to LIC is done when one changes the line l(s) involved, for the integral curve c l(0) c (i,j). The new output pixel O(i, j), with s 0 such that c (i,j) (s 0 ) = (i, j), is computed by LIC as: O(i, j) = 1 2L + 1 s 0 +L s=s 0 L and simplifying with a box filter: O(i, j) = I(c (i,j) (s))k(s 0 s) 1 2L + 1 s 0 +L s=s 0 L I(c (i,j) (s)) 1 2L + 1 I c (i,j) K Figure 2.3 shows this process. Notice that we are restricting the integral curve to the interval [ L, L] for some fixed length L like in DDA. In general a good L depends on the vector field and its density. Figure 2.4 show some examples for different values of L and the same vector field. Figure 2.3: LIC - Convolution over a integral curve of pixels. Picture adapted from (1). To compute the integral curves of the input vector field, the solution of the ODE is obtained by integration: s c x0 (s) = x 0 + v(c x0 (s ))ds s 0 6

15 2.2 LIC Formulation Figure 2.4: Different Values for L - From top to bottom and left to right: Values for L: 1,3,5,10,20, and 50. The next pseudocode performs a discretization of this equation, storing in an array C the pixel locations of the integral curve. The function vector field(p) returns the vector at point p. The constant ds is the sample rate for the integral curve, see section 2.4 for an explanation. Computing the integral curve for a pixel p = (x, y): 1 function compute_integral_curve(p){ 2 V=vector_field(p) 3 add p to C 4 for (s=0;s<l;s=s+1){ // positive calculations 5 x=x+ds*v.x 6 y=y+ds*v.y 7 add the new (x,y) to C 8 compute the new V=vector_field(x,y) 9 10 (x,y)=p V=vector_field(p) //return to original point and original vector 11 for (s=0;s>-l;s=s-1){ // negative calculations 7

16 2. LINE INTEGRAL CONVOLUTION 12 x=x-ds*v.x 13 y=y-ds*v.y 14 add the new (x,y) to C 15 compute the new V=vector_field(x,y) return C 18 used: To compute the convolution with a box kernel a simple average of the intensities is Computing the convolution along integral curves: 1 function compute_convolution(image,c){ 2 sum=0 3 for each location p in C { 4 sum=sum+image(p) 5 6 sum=sum/(2*l+1) // normalization 7 return sum 8 Next is the pseudocode of the final LIC algorithm. LIC Pseudocode with a box kernel: 1 function LIC(image){ 2 create an empty image O_img 3 for each p on image{ 4 array C=compute_integral_curve(p) 5 sum = compute_convolution(image,c) 6 set pixel p on O_img to sum 7 8 return O_img 9 Note that for a point on a particular integral curve c, its own integral curve is highly related to c. The low performance of the LIC algorithm can be seen there: for 8

17 2.3 A Fast LIC algorithm each pixel location we have to compute the integral curve passing through that location (without using the already computed integral curves) and perform a convolution with some filter kernel. In the next section we will see how this relations can be explored to increase speed of the LIC algorithm. 2.3 A Fast LIC algorithm Given that when computed, an integral curve covers lot of pixels, uniqueness of the solution of the ODE implies that the convolution involved in LIC can be reused. Choose a box filter kernel and suppose we have an integral curve of a location (i, j), say c (i,j) and another location along it c (i,j) (s), then their output values are related by O(c (i,j) (s)) = O(i, j) s 0 L+s s =s 0 L I(c (i,j) (s )) + s 0 +L+s s =s 0 +L I(c (i,j) (s )) Figure 2.5 illustrates this relation. In practice, to reuse an already computed convolution for a set of pixels, a matrix of the same size of the image is created such that each entry stores the number of times that pixel has been visited. The order in which the pixels are analyzed is important for the efficiency of this process. The goal is to hit as many uncovered pixels with each new integral curve to reuse the convolutions as possible, and thus it is not a good choice to make it in a scanline order. Nevertheless, we can adopt another approach in which the image is subdivided in blocks and process the pixels in scanline order on each block. For instance, we take the first pixel of each block and make the calculations, then the second pixel and so on 1. Figure 2.5: FastLIC - Integral curves relation involved in the FastLIC approach. The shaded region of the convolution could be reused. 1 There are other methods to compute the order to process the pixels, see for example (6; 11). 9

18 2. LINE INTEGRAL CONVOLUTION The following is a pseudocode of the basic FastLIC algorithm (5). This code is used on each block, as stated in the previous paragraph, to ensure reusability of the integral curves. FastLIC Pseudocode: 1 for each pixel p 2 if p hasn t been visited then 3 compute the integral curve with center p=c(0) 4 compute the LIC of p, and add result to O(p) 5 m=1 6 while m<l 7 update convolutions for c(m) and c(-m) 8 set output pixels: O(c(m)) and O(c(-m)) 9 set pixels c(m) and c(-m) as visited 10 m=m+1; Final Considerations As you can see from the previous sections, LIC is a simple but powerful tool for visualizing vector fields. In this section I want to make explicit some considerations regarding the implementation of this algorithm. This section is optional for the readers whose interest is the implementation rather than the applications. The already given material is enough for what we want to develop with LIC. The first consideration is about the space of the variable s. In section 2.1 we define the DDA convolution for discrete values: s { L, L + 1,..., 0,..., L 1, L. However, in general s is a real variable on the interval [ L, L]. The line of locations l(s) is in general generated by sampling this interval, with l(0) = (i, j). It is clear that for some sampling rates this line is not injective, given that our image is a raster image with integer locations (i, j). The DDA line is computed as l(k s) = (i, j) + k sv (i, j) with integer k [ L s, L s ]. If s 1 we will be back in our original definition. Practical experience (6) shows that using a s of about a third or half an image pixel width is enough for good visualizations. The same sampling consideration is applied for integral curves in the general LIC algorithm. 10

19 2.4 Final Considerations Another thing one should consider when implementing LIC is that the domain of the input I and output image O can be taken as continuous domains rather than a grid of pixels (i, j). Basically we take a continuous rectangular domain and define a set of cells with center a pixel location (i, j). Then to compute the output pixel at location (i, j) one choose a number of samples locations within its correspondent cell, perform the computations and compute an average intensity value. Because increasing the number of samples on each cell increases the run time of the algorithm, a small number is recommended. Finally, when performing the convolution on pixels near the boundary of the image domain, sometimes the algorithm will try to retrieve an intensity value of a invalid pixel location, because generally the integral curve will leave the image domain. Figure 2.6 illustrates this. One solution is to pad the image with zeros on the boundary. This however will cause sometimes black regions at the image boundaries. In the case we have a vector field defined only on the image grid, we simply extend it arbitrarily and smoothly on the domain (e.g., by repeating values). Figure 2.6: overflowing. Image Domain Overflowing - A padding with zeros is used to avoid 11

20 2. LINE INTEGRAL CONVOLUTION 12

21 3 Vector Field Design In the previous chapter we saw how planar vector fields with high density can be visualized using the LIC algorithm. We now turn on the subject to design the input vector field. This is motivated by many graphics applications including texture synthesis, fluid simulation and, as we will see in the next chapter, NPR effects on images. 3.1 Basic Design In section 2.2 we saw that a vector field v : Ω R 2 R 2 defines the differential equation d c(τ) = v(c(τ)) dτ such that for each point x 0 Ω, the solution, with intial condition c x0 (s 0 ) = x 0, is the integral curve c x0 (τ). A singularity of the vector field v is a point x Ω such that v(x) = 0. A very basic vector field design consists of local linearizations and a classification of the singularities. Explicitly, if v is given by the scalar functions F and G, i.e v(x) = (F (x), G(x)), then the local linearization of v at a point x 0 is V (x) = v(x 0 ) + Jv(x 0 )(x x 0 ) ( F x where Jv(x 0 ) = (x F 0) y (x ) 0) G x (x G 0) y (x is the Jacobian matrix evaluated at the point 0) x 0. When x 0 is a singularity we have V (x) = Jv(x 0 )(x x 0 ) 13

22 3. VECTOR FIELD DESIGN We will assume that for singularities x 0 its corresponding Jacobian matrix has full rank and thus that it has two non zero eigenvalues. This implies also that the only element on the null space of the Jacobian is zero, and so the only singularity of the vector field V is x 0. We know from linear algebra that in this case the eigenvalues of the Jacobian are both real or both complex. When they are real, we have three cases: 1. Both are positive. In this case the singularity is called a source. 2. Both are negative. In this case the singularity is called a sink. 3. One is positive and the other is negative. In this case the singularity is called a saddle. On the other hand, when the eigenvalues are complex, we have a center when the real part of both are zero. Figure 3.1 shows this classification for the singularities of our vector field. Figure 3.1: Singularities Classification - Top and left to right: A sink, a source and a saddle. Bottom and left to right: A center, and a mix of a saddle a sink and a center. 14

23 3.1 Basic Design The basic design consists of providing locations and types of singularities on the image domain. For instance, to create the center at (0, 0) shown in figure 3.1, we defined the vector field as V (x, y) = ( ) ( x y In general the type of singularity can be stored as the Jacobian matrix JV, that we can define as: ( ) k 0 JV = for a sink. 0 k ( ) k 0 JV = for a saddle. 0 k ( ) k 0 JV = for a source. 0 k ( ) 0 k JV = for a counter-clockwise center. k 0 ( ) 0 k JV = for a clockwise center. k 0 where k > 0 is a constant representing the strength of the singularity. In practice, if we want a vector field with a singularity of any type at position p 0 = (x 0, y 0 ), then one defines the vector field as: ( ) V (p) = e d p p 0 2 x x0 JV y y 0 choosing the desired JV and where d is a decay constant that controls the influence of the vector field on points near and far from the singularity. This is essential when one wants to design a vector field which is a composition of many basic fields with singularities. To construct such vector field, we define a simple vector field separately for each singularity, and then we define the final vector field as their sum. For example a vector field with a sink at q 1 = (10, 10) and a center at q 2 = ( 5, 4) can be modeled as: V (p) = e d 1 p q 1 2 ( k1 0 0 k 1 or more compactly: ) ( x 10 y 10 ) ) + e d 2 p q 2 2 ( 0 k2 k 2 0 ) ( x + 5 y 4 ) 15

24 3. VECTOR FIELD DESIGN V (p) = V q1 (p) + V q2 (p) Note that each V qi has just one singularity, namely q i. This is not the case for our final vector field, in which new singularities are present when V q1 (p) = V q2 (p). In particular, choosing each d i properly, each q i is a singularity of the final vector field, but it could happen that V (p) = 0 for points p where V q1 (p) 0 and V q2 (p) 0. There is a method to control this undesired new singularities using Conley indices (4) but it falls out of the scope of this monograph. 3.2 Another Approach - Distance Vector Fields In the previous section we saw how to design planar vector fields classifying its singularities: the user chooses a location and type and a linear vector field its created by choosing some other parameters like strength and influence. In this section we are interested in constructing vector fields using gestures. The idea is to create a vector field that resembles the direction of a given planar curve. vector field which is explained next. We use a distance-based Given a parametrized curve C : [a, b] R R 2 the distance from a point p R 2 to the curve is given by d(p, C) min {d(p, C(t)) t [a,b] The parameter t for which the equality holds in the equation above may be not unique. Indeed, when C is a circumference and p is taken as the center of the circumference, this equation will hold for every value of t. Nevertheless we obtained pleasant results choosing an aleatory value from all the candidates. We will note this value by τ p. Also we took the Euclidean distance function d(x, y) = x 2 + y 2 for simplicity. To a curve C and a distance function d, we associated two vector fields V : R 2 R 2 and W : R 2 R 2, each perpendicular to the other by definition: V (p) C(τ p ) p, W (p), V (p) 0 Assuming that C is differentiable with C (t) 0 for all t [a, b], from the definition it is clear that for a point p R 2 with p C(t) for all t [a, b], the vector W (p) has 16

25 3.2 Another Approach - Distance Vector Fields the direction (up to sign) of the tangent vector of the curve at τ p. In fact the function f : R R defined by f(t) = C(t) p, C(t) p which measures the square of the distance from p to C(t) for each t [a, b], has a minimmun at τ p. On the other hand, we have and thus f (τ p ) = 0 implies that f (t) = 2 C (t), C(t) p C (τ p ), V (p) = 0 leading to W (p) = λc (τ p ) for λ R as claimed. From this we see that the vector field W could be a good option to accomplish the design of a vector field that resembles a given curve. However, given that in practice the curve C could be not differentiable (creating it interactively for example), numerous artifacts in the final vector field appear. Figure 3.2 show some examples of V and W for different polylines created with a mouse. Note also how all the points in the curve C became singularities of V and W, which is obvious from their definition. 17

26 3. VECTOR FIELD DESIGN Figure 3.2: Distance Vector Fields - Left to right: White noise with the curve C in red and distance vector fields V and W. 18

27 4 Effects Using LIC Ideas Computational art can be thought as studies concerned in creating and producing pieces of art by means of a computer 1. In this monograph we are not going to discuss the creative process that leads to a piece of art from the initial white canvas. These subjects, I think, fall into the context of artificial intelligence and cognition and are out of the scope of this text. The creativity involved here will be then of another kind; we will be given an input digital image and we will create and use modifications of the LIC algorithm to process it and generate a new digital image. The result image needs not be compared to any other, since we will be creating rather than imitating styles. Since the results are in some sense non-real, they are called NPR or non-photorealistic rendering effects on images. Nevertheless we will be also including the original real effects blur-warping for completeness. 4.1 Blur A warping or blur effect can be achieved when using LIC on an arbitrary image rather than on white noise. In this case the vector field will drive the warping effect in its directions. To guarantee visual coherence on the result image, each RGB channel is processed separately. A code in C++ using CImg can be found in the appendix section A.2. Figure 4.1 shows some results. As you may notice, the deformation on the final image depends strongly on the input image and the vector field used. Also notice that in chapter 2 we were able to 1 We will be referring just to graphic arts like painting, drawing and photography. This point of view is independent from the definition of art, which we are not going to discuss here. 19

28 4. EFFECTS USING LIC IDEAS Figure 4.1: Blur Effect - Left-Original Image, Middle-LIC on white noise of the vector field used. Right-LIC of the original image. 20

29 4.2 LIC Silhouette visualize the structure of the vector field because of the uniformly distribution of the white noise input image. In general, we compute as a preprocessing step a dithered version of the input image to ensure this charactheristic and then perform the LIC to generate a warping effect. Figure 4.2 shows an example. Another application of blur-warping is to generate an animation that advects the colors on the image in the direction of the input vector field. This is achieved by iterating LIC several times with the same vector field. This technique could be used to flow visualization not only for steady vector fields but unsteady aswell. However some considerations need to be made to control the color advection at the image boundaries (section 2.4). This black regions can be avoided with a technique called Image Based Flow Visualization (10). Figure 4.2: Warping a dithered image - From left to right images: dithered, and warping the dithered image 4.2 LIC Silhouette We can generate a silhouette image automatically with LIC. For this, a threshold is defined to control the value of the convolution of a given pixel. The first step is to convert the image to gray to avoid color incoherences. Then for each pixel we proceed 21

30 4. EFFECTS USING LIC IDEAS as in LIC, but the output pixel is set depending on the value of the convolution and the thresholds predefined. This process can be used also to generate a dithered version of the visualization of a vector field. Below is a pseudocode of this process. Figure 4.3 show examples of this method. Figure 4.3: Automated Silhouette - Left-Original image, Middle-Dithered LIC, Right- Automated Silhouette using LIC function Silhouette(image){ convert image to gray(image) for each pixel p in image C=compute_integral_curve(p) I=compute_convolution(image,C) if (val 1<I< val 2) { set OutputImage(p)=color 1 if (I<val 1){ set OutputImage(p)=color 2 else{ set OutputImage(p)=color 3 22

31 4.2 LIC Silhouette This approach can be thought as a quantification of the image guided by the values of the line integral convolution. We subdivide the interval [0, 1] in three parts, and we choose an arbitrary color to each part to achieve different effects including the silhouette. We obtained good results setting color i as the color of the first pixel p in the original image that belongs to the i part of the subdivision.the thresholds val1 and val2 can be set arbitrarily. However we found interesting results computing the mean intensity value M of the LIC blurred image and then set val1 = M M/3, val2 = M + M/3. Sometimes when the image is too dark we invert colors as a preprocessing step to ensure a good silhouette visualization. Figure 4.4 show some results with this settings. Figure 4.4: LIC Silhouette - Setting color i as the color of the first pixel in the original image belonging to the i part of the [0, 1] subdivision. It is important to note also the role of the vector field in this approach. Observe that high (low) values of I correspond to convolutions over integral curves on regions with high (low) intensities. Thus for vector fields with integral curves passing from high intensity to low intensity regions we will have an I close to the mean value. That is the reason for edges to appear in the final result for vector fields in directions of discontinuities in the original image. 23

32 4. EFFECTS USING LIC IDEAS 4.3 Pencil Rendering We adapted the algorithm described on (8; 9) to create a pencil effect. Below are some results. Figure 4.5: LIC Pencil Effect Examples - Some results of the interactive pencil rendering with LIC Our procedure is set to interactively paint pencil strokes in the direction of an input vector field. Strokes are then integral curves with a fixed length L predefined. As a preprocessing step we compute the gradient image of a grayscale version of the original I(x,y) image as E(x, y) = I(x,y) x + y to perform edge detection. The output energy image is used as the height image and paper is modeled in the same way described in (8). After this when the user clicks on the image, we process a predefined quantity of pixels in the perpendicular direction, rather than this pixel alone. This is done to 24

33 4.3 Pencil Rendering create strokes with width greater than one pixel, ideal for this kind of effect. Figure 4.7 shows the process step by step. The pseudocode follows: function Interactive_Pencil_rendering(image){ convert image to gray(image) compute the energy image E(gray image) create paper with E array C=compute_integral_curve(mouseX, mousey); array PP=compute_perpendicular_path(mouseX,mouseY); for each location p in C and PP { paper_draw(p, presure); As in (8), the parameter presure is a value in the interval [0, 1] to model the presure of the pencil in the paper. The paper draw function is guided by the height input image (in this case our energy image) and a sampling function that perturbs locally and uniformly the presure to imitate a hand-made effect. The method above can be trivially generalized for color images to create an spraylike effect. Here we can choose to process all the colors by pixel or process each RGB channel separately. The latter will create an image with aleatory colors uniformly distributed from the original image. See Figure 4.6. Figure 4.6: LIC Spray-Like Effect - Images from left to right: Processing all colors at once, and processing each RGB channel separately. 25

34 4. EFFECTS USING LIC IDEAS Figure 4.7: LIC Pencil Effect Process - Images: Original, LIC blur, grayscale, energy, interactive pencil rendering and final result. 26

35 4.4 Painterly Rendering 4.4 Painterly Rendering To create an image with a hand-painted appearance from an input photograph we used the algorithm described in (7). The method uses curved brush strokes of multiples sizes guided automatically by the contours of the gradient image. We adapted the mentioned algorithm to create strokes in the directions of an input vector field. These strokes are computed as integral curves like in LIC. The stroke length is controlled by the style stroke maximum length like in the original algorithm. A pseudocode the stroke computations procedure follow. Figure 4.8 shows an example. LIC Strokes Procedure: function makelicstroke(pixel p, R,reference_img){ array C=compute_integral_curve(p) with L=style max length strokecolor= reference_img.color(p) K= new stroke with radius R, with locations C, and color strokecolor Figure 4.8: Painterly Rendering - Left-Vector Field Image, Right- Painterly rendering. 4.5 Conclusions and Future Work As we can see from this whole monograph, the Line Integral Convolution algorithm ideas can be used not only to visualize high density planar vector fields, but also to 27

36 4. EFFECTS USING LIC IDEAS render non-realistic effects on arbitrary images by mixing already know NPR methods like painterly rendering and pencil drawing. The vector field design stage is fundamental in this approach, allowing the user to create a vector field to use as a guide for a determined effect. There are many ways to continue the work done here by either improving our results or by creating totally new algoritms and experiments. For instance, given that our interactive design is still slow, a GPU implementation for a real-time design will enhance the experimentation process when creating new effects. Given that our painterly rendering algorithm is not interactive, it could be a good experiment to create a system to interactively paint strokes similarly to the pencil and spray effects of section 4.3. Here some considerations with the layers of the original method need to be considered: When the user clicks, is that pixel going to be approximated by which level of detail?. Other future work could be a generalization to 3D spaces. For this, a tensor field design system will be more appropriate as suggested by the literature (3) increasing the flexibility of the whole system and extending the range of visual effects. An interesting next step of our system could be also the use of a Tangible User Interface for the design and visualization of the results. Out of the topic of this monograph, but still my main interest on flow and vector visualization could be considered as future work. Scientific visualization is a growing area that creates visual representations of complex scientific concepts to improve or discover new understandings from a set of data information. However at this time it is not clear a direct application into the field of computer music. The challenge is to create a new visualization of a piece of music that could gives us an alternative way to understand the basic sound components, or then an artistic visualization that could be used in computer music composition: Given our new visualization of a particular song, can we create another image that has the same characteristics in order to create music from it?. The suggestion is to make a connection between two art components: Graphics and music. Thus, can we use the LIC ideas to create this new visualization?, what information could we retrieve from a song which advects an 1D white noise? and can we visualize this advection?. These are examples of questions that could guide a future work on scientific visualization and computer music. 28

37 Appendix A Implementation in C++ This appendix is included to expose the main algorithms presented all along the chapters making use of the CImg Library, which is an open source C++ image processing toolkit created by David Tschumperlé at INRIA 1. For a better understanding, we will introduce briefly some of its characteristics before going into our procedures. A.1 Getting Started with CImg The CImg Library consist of a single header file CImg.h that contains all the C++ classes and methods. This implies among other things, that a simple line of code is needed to use it, namely... #include "lib_path/cimg.h"... using namespace cimg_library;... given that we had already downloaded the standard package from the website and had placed it into lib path. All the classes and functions are encapsulated in the cimg library namespace, so it is a good idea to use the second line of code too 2. The main classes of the CImg Library are: CImg<T> for images, CImgList<T> for a list of 1 2 This is different from the cimg namespace which implements functions with the same name as standard C/C++ functions! Never use by default the cimg namespace. 29

38 A. IMPLEMENTATION IN C++ images, and CImgDisplay which is like a canvas to display any image. The template parameter T specify the type of the pixels, for example a raster image with entries of type double is defined as CImg<double>. Possible values of T are float, double and unsigned char. As you may expect displaying an image with CImg is as simple as with MAT LAB. Here is the code to load and display an image called myimage.jpg which is in the same directory as our code: #include "lib_path/cimg.h" using namespace cimg_library; int main(){ CImg<unsigned char>("myimage.jpg").display(); return 0; // needed by the compiler To load an image and put it into our code as a variable I, we use the code: CImg<unsigned char> I("myimage.jpg"). To display an already loaded image I, we use its display method: I.display(). The code above is a compact version of these two steps: loading and displaying. We also could load an image and display it on a CImgDisplay. This is useful when doing applications with interactivity, given that the CImgDisplay class allows control to define the user callbacks like mouse clicks and keyboard inputs. The correspondent code using a CImgDisplay is next: #include "lib_path/cimg.h" using namespace cimg_library; CImgDisplay main_disp; int main(){ main_disp.assign( CImg<unsigned char>("myimage.jpg"),"my very first display!!"); while (!main_disp.is_closed){ main_disp.wait(); return 0; 30

39 A.1 Getting Started with CImg The assign method takes as first argument the image we want to display. We could re-assign any other loaded image at any moment. The second argument will be the title of the window. The while loop is necessary to tell the program to wait for user events. Here is where we should put the code to control user events. If this is ommited the program will run normally but will close after displaying the image which ocurs in a small fraction of time, so you will barely see the image!. Each CImgDisplay has its own parameters to control the user events which can be retrieved like any other field of the class with a point, some of them are:.mouse x or.mouse y to retrieve the integer coordinates (x, y) of a user click on the display,.key to retrieve keyboard inputs and.button which is of boolean type to indicate whether or not there was a click on the display. To control the different buttons of the mouse separately we use.button&1 for the left button and.button&2 for the right button. For more on this check the CImg documentation. Once we load an image on a variable, say I, we can retrieve the values of its pixel (x,y,z) like we were handling a matrix, that is: I(x,y,z,v). The parameter v refers to the type of image: v=1 for gray scale images, and v=3 for color images. CImg can handle 3D images, in our case for 2D images we will have always z=1 when declaring a 2D image and z=0 when retrieving pixel values. Remember that indices on C++ begins at 0, thus to retrieve the RGB components of a 2D image at pixel (10,10) we will have: I(10,10,0,0) for red, I(10,10,0,1) for green and I(10,10,0,2) for blue. Finally to retrieve any of the dimensions of I we can call.dimx() for the x dimension,.dimv() for the v dimension and so on. As an application the next function convert a color image to a grayscale image: CImg<unsigned char> to_gray(cimg<unsigned char> img){ if (img.dimv()==1) return img; //already gray CImg<unsigned char> gray(img.dimx(),img.dimy(),1,1); for (int x=1;x<img.dimx()-1;x++){ for (int y=1; y<img.dimy()-1;y++){ gray(x,y,0,0)=.2989*img(x,y,0,0)+.5870*img(x,y,0,1)+.1140*img(x,y,0,2); 31

40 A. IMPLEMENTATION IN C++ return(gray); Figure A.1: Color to gray conversion - Converting from color to grayscale using the CImg library. A.2 LIC in C++ using CImg Section 2.2 exposed a general pseudocode of LIC with a box kernel. Basically, the algorithm was composed of two functions: computing the integral curve, and computing the convolution. The next code is a mix of these two functions to perform LIC with a box kernel for an arbitrary input image using CImg. Our data type vector was defined to store the vector values (vx, vy) of the (x, y) position. The vector field function will be explained in the next section. LIC-Box kernel with CImg: CImg<double> LIC(CImg<double> img){ int n_chn=img.dimv(), n=img.dimx(), m=img.dimy(); CImg<double> OutputImg(n,m,1,n_chn); double u, v, Vi, Vj, x, y, sum, ds; int u1,v1,l; ds=1; L=10; for (int h=0;h<n_chn; h++){ for (int i=0;i<n;i++){ for (int j=0;j<m;j++){ vector V=vector_field(x,y); u=i; v=j; Vi=V.x; Vj=V.y; 32

41 A.3 A Basic Vector Field Design System using CImg sum=0; for (int s=0;s<=l;s++){ //positive calculations u=u+ds*v.x; v=v+ds*v.y; u1=(int)floor(u); v1=(int)floor(v); if (u1<0 u1>n v1<0 v1>m) continue; else sum=sum+img(u1,v1,h); V=vector_field(u,v); u=i; v=j; V.x=Vi; V.y=Vj; for (int s=0;s<=-l;s=s-1){ //negative calculations u=u-ds*v.x; v=v-ds*v.y; u1=(int)floor(u); v1=(int)floor(v); if (u1<0 u1>n v1<0 v1>m) continue; else sum=sum+img(u1,v1,h); V=vector_field(u,v); OutputImg(i,j,0,h)=sum/(2*L+1); return(outputimg); A.3 A Basic Vector Field Design System using CImg We can use CImg to create a system that can handle the basic vector field design ideas of section 3.1. For this we use the classes vector and singular point to store vector components and singular points with its respectives fields: parameters, type (Jacobian) and position. The code looks like this: typedef struct {double x, y; vector; class singular_point { public: vector pos; //position vector W1,W2; //rows of the jacobian matrix 33

42 A. IMPLEMENTATION IN C++ double d, k; //parameters public: singular_point(vector poss,vector W11, vector W22, double k1, double d1){ pos=poss; W1=W11; W2=W22;k=k1;d=d1; ; singular_point(){; // constructor by default ; // end of class singular_point We store all the singularities in an simple array LIST OF SING with a global variable length to control its length. The system begins loading an image stored globally as image and waiting for user events. A click on the display will add a singularity at this position. The type of the singularity to add is controled by the global variables V1, V2 which correspond to the rows of the jacobian of the actual singularity. This varibles are initialized for a type sink by default, and can be modified with the keyboard: S for a sink, O for a source, D for a saddle, C for a clockwise center and W for a couter-clockwise center. The main function is next: int main() { load_img(); while (!main_disp.is_closed) { main_disp.wait(); if(main_disp.button && main_disp.mouse_x>=0 && main_disp.mouse_y>=0){ int u0 = main_disp.mouse_x, v0 = main_disp.mouse_y; vector pos; pos.x=u0; pos.y=v0; singular_point s(pos,v1,v2,k,d); length++; LIST_OF_SING[length-1]=s; cout<<"calculating LIC...\n"; image=lic(image); cout<<"done.\n"; image.display(main_disp); if (main_disp.key){ switch (main_disp.key){ case cimg::keyq: exit(0); break; case cimg::keys: V1.x=-k; V1.y=0.0; V2.x=0.0; V2.y=-k; break; case cimg::keyo: V1.x=k; V1.y=0.0; V2.x=0.0; V2.y=k; break; 34

43 A.3 A Basic Vector Field Design System using CImg case cimg::keyd: V1.x=k; V1.y=0.0; V2.x=0.0; V2.y=-k; break; case cimg::keyc: V1.x=0.0; V1.y=-k; V2.x=k; V2.y=0.0; break; case cimg::keyw: V1.x=0.0; V1.y=k; V2.x=-k; V2.y=0.0; break; // end while return 0; The additional function load img used to load the image and perform the variables initialization: void load_img(void){ char name[50]; cout<<"please enter the image name (ex: dog.jpg):\n"; cin>>name; CImg<double> im(name); image=im; main_disp.assign(image,"basic Vector field Design"); d=0.0001; k=0.5; // by default V1.x=-k; V1.y=0.0; V2.x=0.0; V2.y=-k; // sink by default length=0; //no singular points so far Finally, the actual normalized vector field computation for a point (x, y) is done as sums of vector field influences of each singularity, see section 3.1. Here is the code: vector vector_field(double x, double y) { vector OUT; double d,k,x0,y0; vector U1,U2; OUT.x=OUT.y=0.0; for (int i=0;i<length;i++){ double t; d=list_of_sing[i].d; k=list_of_sing[i].k; U1=LIST_OF_SING[i].W1; U2=LIST_OF_SING[i].W2; x0=list_of_sing[i].pos.x; y0=list_of_sing[i].pos.y; t=exp(-d*((x-x0)*(x-x0)+(y-y0)*(y-y0))); OUT.x=OUT.x+t*(U1.x*k*(x-x0)+U1.y*k*(y-y0)); OUT.y=OUT.y+t*(U2.x*k*(x-x0)+U2.y*k*(y-y0)); 35

44 A. IMPLEMENTATION IN C++ double NV=sqrt(OUT.x*OUT.x+OUT.y*OUT.y); if (NV!=0){OUT.x=OUT.x/NV; OUT.y=OUT.y/NV; else{out.x=out.y=0; return OUT; The figure below shows an example of this system. Figure A.2: Basic Vector Field Design example using CImg - A simple combination of a sink a saddle and a center A.4 LIC effects in C++ This section concludes the implementation in C++ of the LIC effects presented in chapter 4. We already saw the blur-warp effect on section A.2, and the silhouette algorithm is straight forward from that code and the observations of section 4.2. We will proceed then with the pencil effect and painterly rendering. A.4.1 LIC Pencil Effect The main class involved in the pencil effect is of course the paper class which stores the height image (in our case the energy image) and the initial white canvas. The drawing 36

45 A.4 LIC effects in C++ function is called interactively with a certain presure perturbed by a sampling function. The final value for a pixel p on the canvas depends linearly on this perturbed presure and the intensity of the pixel p in the height image. For all our results prs=0.005: class Paper{ public: CImg<double> height_img; CImg<double> canvas; public: Paper(int resx, int resy, CImg<double> H); //constructor void draw(int coordx, int coordy, double prs); double sampling(double pres, int res =10); ; Paper::Paper(int resx, int resy, CImg<double> H){ this -> height_img =H; CImg<unsigned char> grain(resx,resy,1,1,1); this -> canvas=grain; void Paper::draw( int coordx, int coordy, double prs ){ coordx=(coordx>0)?coordx:0; coordy=(coordy>0)?coordy:0; double d, h, g; h=this->height_img(x,y,0); h*=0.65; g = this->sampling(prs); d = h+g; canvas(coordx,coordy,0)-=d; canvas(coordx,coordy,0)=(canvas(coordx,coordy,0)<0)? 0.0:canvas(coordX,coordY,0); double Paper::sampling(double pres, int res){ int aux = 0 ; for (int i = 0 ; i < res ; ++i ){ double p = (double)std::rand()/(double)(rand_max); if ( p < pres ) ++aux; 37

46 A. IMPLEMENTATION IN C++ return (double)aux/(double)res ; Next is the pencil effect main procedure using the above class of paper and the CImg library. For this effect we set the length of the integral curves to L = 100 and process lgd = 10 pixels in the perpendicular direction (see section 4.3). void pencil_effect(cimg<double> original){ CImg<double> Height=to_gray(original); Height=invert_colors(Height); Height=energy(Height); Height=normalize_0_1(Height); int n=original.dimx(), m=original.dimy(); Paper paper( n, m, Height,1); CImgDisplay main_disp(height,"pencil Effect"); int const lgd=10; while (!main_disp.is_closed){ main_disp.wait(); if (main_disp.mouse_x>=0 && main_disp.mouse_y>=0){ int startx = main_disp.mouse_x, starty = main_disp.mouse_y; vector V=vector_field(startx,starty,LIST_OF_SING); vector Vppd; Vppd.x=-V.y; Vppd.y=V.x; for (int i=0;i<lgd;i++){ double u=startx+i*vppd.x, v=starty+i*vppd.y; double u0=u,v0=v; vector Vstart=V=vector_field(u,v,LIST_OF_SING); for (int s=0;s<100;s++){ // positive integral curve u=u+v.x; v=v+v.y; int u1=(int)floor(u), v1=(int)floor(v); u1 = ( u1 < n )? u1 : n - 1; v1 = ( v1 < m )? v1 : m - 1; paper.draw( u1, v1, 0.005); V=vector_field(u,v,LIST_OF_SING); u= u0, v=v0; V=Vstart; 38

47 A.4 LIC effects in C++ for (int s=0;s<100;s++){ // negative integral curve u=u-v.x; v=v-v.y; int u1=(int)floor(u), v1=(int)floor(v); u1 = ( u1 < n )? u1 : n - 1; v1 = ( v1 < m )? v1 : m - 1; paper.draw( u1, v1, 0.005); V=vector_field(u,v,LIST_OF_SING); paper.height.display(main_disp); // end while A.4.2 Painterly Rendering We implemented the algorithm of section 2.1 in (7) replacing the makestroke procedure with our new make LIC Stroke to paint strokes in the direction of the input vector field, see section 4.4. Next is the code: stroke make_lic_stroke(int x0,int y0,double R){ int n=image.dimx(), m=image.dimy(); int r=floor(ref_img(x0,y0,0,0)); int g=floor(ref_img(x0,y0,0,1)); int b=floor(ref_img(x0,y0,0,2)); int* strokecolor= new int[3]; strokecolor[0]=r; strokecolor[1]=g; strokecolor[2]=b; stroke K= stroke(r,strokecolor); point p,q; vector V; double ds=1.0; p.x=q.x=x0; p.y=q.y=y0; K.pts[K.lgth]=p; K.lgth++; vector float_pt, float_qt; float_pt.x=p.x; float_pt.y=p.y; float_qt.x=p.x; float_qt.y=p.y; V=vector_field(x0,y0); for (int so=0; so<r+sty.maxlgth*0.3;so++){ float_pt.x+=ds*v.x; float_pt.y+=ds*v.y; p.x=(int)float_pt.x; p.y=(int)float_pt.y; 39

48 A. IMPLEMENTATION IN C++ float_qt.x-=ds*v.x; float_qt.y-=ds*v.y; q.x=(int)float_qt.x; q.y=(int)float_qt.y; if (!(p.x<0 p.x>n p.y<0 p.y>m)){ K.pts[K.lgth]=p; K.lgth++; V=vector_field(float_pt.x,float_pt.y); if (!(q.x<0 q.x>n q.y<0 q.y>m)){ K.pts[K.lgth]=q; K.lgth++; V=vector_field(float_qt.x,float_qt.y); //end for return K; 40

49 Appendix B Gallery Here are some of our results. All the images in full color and the source code can be found in the website rdcastan/visualization. Figure B.1: Pigeon Point Lighthouse, California - Images from top to bottom and left to right: Original, warp, LIC on a spray image with each RGB processed separately and painterly 41

50 B. GALLERY Figure B.2: Plymouth Hoe, England - From top and left to right: Original, vector field visualization, spray and LIC of the spray image. 42

51 Figure B.3: Landscape - Painterly Rendering. 43

52 B. GALLERY Figure B.4: Girl Playing Guitar - LIC Silhouette effect. 44

53 Figure B.5: Shoes in the Grass - LIC pencil effect. 45

54 B. GALLERY Figure B.6: Cows - LIC after spray effect. 46

55 Figure B.7: Garden IMS, Rio de Janeiro - Painterly Rendering. Garden of the Instituto Moreira Salles 47

56 B. GALLERY Figure B.8: Live Performance - Top to Bottom-Original (Anita Robinson from Viva Voce), painterly and LIC pencil. 48

57 Figure B.9: Live Performance Continued... - Top to Bottom-LIC silhouette, spray on each RGB and simple spray. 49

58 B. GALLERY Figure B.10: Live Performance Continued... - Top to Bottom-Dithered and LIC on dithered 50

### Enhanced LIC Pencil Filter

Enhanced LIC Pencil Filter Shigefumi Yamamoto, Xiaoyang Mao, Kenji Tanii, Atsumi Imamiya University of Yamanashi {daisy@media.yamanashi.ac.jp, mao@media.yamanashi.ac.jp, imamiya@media.yamanashi.ac.jp}

### Visualization and Feature Extraction, FLOW Spring School 2016 Prof. Dr. Tino Weinkauf. Flow Visualization. Image-Based Methods (integration-based)

Visualization and Feature Extraction, FLOW Spring School 2016 Prof. Dr. Tino Weinkauf Flow Visualization Image-Based Methods (integration-based) Spot Noise (Jarke van Wijk, Siggraph 1991) Flow Visualization:

### Non-Photorealistic Rendering

15-462 Computer Graphics I Lecture 22 Non-Photorealistic Rendering Pen-and-Ink Illustrations Painterly Rendering Cartoon Shading Technical Illustrations Acknowledgment: Steve Lin April 25, 2002 Frank Pfenning

### Non-Photorealistic Rendering

15-462 Computer Graphics I Lecture 22 Non-Photorealistic Rendering Pen-and-Ink Illustrations Painterly Rendering Cartoon Shading Technical Illustrations Acknowledgment: Steve Lin April 25, 2002 Frank Pfenning

### Texture Screening Method for Fast Pencil Rendering

Journal for Geometry and Graphics Volume 9 (2005), No. 2, 191 200. Texture Screening Method for Fast Pencil Rendering Ruiko Yano, Yasushi Yamaguchi Dept. of Graphics and Computer Sciences, Graduate School

### 3 hours One paper 70 Marks. Areas of Learning Theory

GRAPHIC DESIGN CODE NO. 071 Class XII DESIGN OF THE QUESTION PAPER 3 hours One paper 70 Marks Section-wise Weightage of the Theory Areas of Learning Theory Section A (Reader) Section B Application of Design

### VISUAL ALGEBRA FOR COLLEGE STUDENTS. Laurie J. Burton Western Oregon University

VISUAL ALGEBRA FOR COLLEGE STUDENTS Laurie J. Burton Western Oregon University VISUAL ALGEBRA FOR COLLEGE STUDENTS TABLE OF CONTENTS Welcome and Introduction 1 Chapter 1: INTEGERS AND INTEGER OPERATIONS

Image Segmentation Preview Segmentation subdivides an image to regions or objects Two basic properties of intensity values Discontinuity Edge detection Similarity Thresholding Region growing/splitting/merging

### THEA RENDER INSTANCING TUTORIAL

THEA RENDER INSTANCING TUTORIAL REVISION AUTHOR REASON FOR CHANGE 11/09/12 Christina Psarrou Initial version. INTRODUCTION In computer graphics, geometry instancing is the practice of rendering multiple

### 2.2 Creaseness operator

2.2. Creaseness operator 31 2.2 Creaseness operator Antonio López, a member of our group, has studied for his PhD dissertation the differential operators described in this section [72]. He has compared

### Data Storage 3.1. Foundations of Computer Science Cengage Learning

3 Data Storage 3.1 Foundations of Computer Science Cengage Learning Objectives After studying this chapter, the student should be able to: List five different data types used in a computer. Describe how

### Interactive Visualization of Magnetic Fields

JOURNAL OF APPLIED COMPUTER SCIENCE Vol. 21 No. 1 (2013), pp. 107-117 Interactive Visualization of Magnetic Fields Piotr Napieralski 1, Krzysztof Guzek 1 1 Institute of Information Technology, Lodz University

### LabVIEW Day 3: Arrays and Clusters

LabVIEW Day 3: Arrays and Clusters Vern Lindberg By now you should be getting used to LabVIEW. You should know how to Create a Constant, Control, or Indicator. I will assume you know how to create a new

### Working With Animation: Introduction to Flash

Working With Animation: Introduction to Flash With Adobe Flash, you can create artwork and animations that add motion and visual interest to your Web pages. Flash movies can be interactive users can click

### Layout Based Visualization Techniques for Multi Dimensional Data

Layout Based Visualization Techniques for Multi Dimensional Data Wim de Leeuw Robert van Liere Center for Mathematics and Computer Science, CWI Amsterdam, the Netherlands wimc,robertl @cwi.nl October 27,

### GeoGebra. 10 lessons. Gerrit Stols

GeoGebra in 10 lessons Gerrit Stols Acknowledgements GeoGebra is dynamic mathematics open source (free) software for learning and teaching mathematics in schools. It was developed by Markus Hohenwarter

### Fireworks 3 Animation and Rollovers

Fireworks 3 Animation and Rollovers What is Fireworks Fireworks is Web graphics program designed by Macromedia. It enables users to create any sort of graphics as well as to import GIF, JPEG, PNG photos

### CS 248 Assignment 2 Polygon Scan Conversion. CS248 Presented by Josh Wiseman Stanford University October 19, 2005

CS 248 Assignment 2 Polygon Scan Conversion CS248 Presented by Josh Wiseman Stanford University October 19, 2005 Announcements First thing: read README.animgui animgui.. It should tell you everything you

### CBE 6333, R. Levicky 1. Potential Flow

CBE 6333, R. Levicky Part I. Theoretical Background. Potential Flow Potential Flow. Potential flow is irrotational flow. Irrotational flows are often characterized by negligible viscosity effects. Viscous

### Graphic Design. Background: The part of an artwork that appears to be farthest from the viewer, or in the distance of the scene.

Graphic Design Active Layer- When you create multi layers for your images the active layer, or the only one that will be affected by your actions, is the one with a blue background in your layers palette.

### Interactive simulation of an ash cloud of the volcano Grímsvötn

Interactive simulation of an ash cloud of the volcano Grímsvötn 1 MATHEMATICAL BACKGROUND Simulating flows in the atmosphere, being part of CFD, is on of the research areas considered in the working group

### 15.062 Data Mining: Algorithms and Applications Matrix Math Review

.6 Data Mining: Algorithms and Applications Matrix Math Review The purpose of this document is to give a brief review of selected linear algebra concepts that will be useful for the course and to develop

### QUICK REFERENCE: ADOBE ILLUSTRATOR CS2 AND CS3 SECTION 1: CS3 TOOL BOX: PAGE 2 SECTION 2: CS2 TOOL BOX: PAGE 11

QUICK REFERENCE, ADOBE ILLUSTRATOR, PAGE 1 QUICK REFERENCE: ADOBE ILLUSTRATOR CS2 AND CS3 CS2 SECTION 1: CS3 TOOL BOX: PAGE 2 SECTION 2: CS2 TOOL BOX: PAGE 11 SECTION 3: GENERAL CONCEPTS: PAGE 14 SELECTING

### Otis Photo Lab Inkjet Printing Demo

Otis Photo Lab Inkjet Printing Demo Otis Photography Lab Adam Ferriss Lab Manager aferriss@otis.edu 310.665.6971 Soft Proofing and Pre press Before you begin printing, it is a good idea to set the proof

### Exercise #8. GIMP - editing, retouching, paths and their application

dr inż. Jacek Jarnicki, dr inż. Marek Woda Institute of Computer Engineering, Control and Robotics Wroclaw University of Technology {jacek.jarnicki, marek.woda}@pwr.wroc.pl Exercise #8 GIMP - editing,

### Automatic 3D Reconstruction via Object Detection and 3D Transformable Model Matching CS 269 Class Project Report

Automatic 3D Reconstruction via Object Detection and 3D Transformable Model Matching CS 69 Class Project Report Junhua Mao and Lunbo Xu University of California, Los Angeles mjhustc@ucla.edu and lunbo

### Course Overview. CSCI 480 Computer Graphics Lecture 1. Administrative Issues Modeling Animation Rendering OpenGL Programming [Angel Ch.

CSCI 480 Computer Graphics Lecture 1 Course Overview January 14, 2013 Jernej Barbic University of Southern California http://www-bcf.usc.edu/~jbarbic/cs480-s13/ Administrative Issues Modeling Animation

### http://school-maths.com Gerrit Stols

For more info and downloads go to: http://school-maths.com Gerrit Stols Acknowledgements GeoGebra is dynamic mathematics open source (free) software for learning and teaching mathematics in schools. It

### DYNAMIC RANGE IMPROVEMENT THROUGH MULTIPLE EXPOSURES. Mark A. Robertson, Sean Borman, and Robert L. Stevenson

c 1999 IEEE. Personal use of this material is permitted. However, permission to reprint/republish this material for advertising or promotional purposes or for creating new collective works for resale or

### Excel Guide for Finite Mathematics and Applied Calculus

Excel Guide for Finite Mathematics and Applied Calculus Revathi Narasimhan Kean University A technology guide to accompany Mathematical Applications, 6 th Edition Applied Calculus, 2 nd Edition Calculus:

### Data Storage. Chapter 3. Objectives. 3-1 Data Types. Data Inside the Computer. After studying this chapter, students should be able to:

Chapter 3 Data Storage Objectives After studying this chapter, students should be able to: List five different data types used in a computer. Describe how integers are stored in a computer. Describe how

### ART 170: Web Design 1

Banner Design Project Overview & Objectives Everyone will design a banner for a veterinary clinic. Objective Summary of the Project General objectives for the project in its entirety are: Design a banner

### Classroom Tips and Techniques: The Student Precalculus Package - Commands and Tutors. Content of the Precalculus Subpackage

Classroom Tips and Techniques: The Student Precalculus Package - Commands and Tutors Robert J. Lopez Emeritus Professor of Mathematics and Maple Fellow Maplesoft This article provides a systematic exposition

### An introduction to Global Illumination. Tomas Akenine-Möller Department of Computer Engineering Chalmers University of Technology

An introduction to Global Illumination Tomas Akenine-Möller Department of Computer Engineering Chalmers University of Technology Isn t ray tracing enough? Effects to note in Global Illumination image:

### Algolab Photo Vector

Algolab Photo Vector Introduction: What Customers use Photo Vector for? Photo Vector (PV) is a handy tool for designers to create, cleanup, make fast corrections, edit designs with or without further conversion

### Tutorial 8 Raster Data Analysis

Objectives Tutorial 8 Raster Data Analysis This tutorial is designed to introduce you to a basic set of raster-based analyses including: 1. Displaying Digital Elevation Model (DEM) 2. Slope calculations

### Blind Deconvolution of Barcodes via Dictionary Analysis and Wiener Filter of Barcode Subsections

Blind Deconvolution of Barcodes via Dictionary Analysis and Wiener Filter of Barcode Subsections Maximilian Hung, Bohyun B. Kim, Xiling Zhang August 17, 2013 Abstract While current systems already provide

### Creating Large Format Posters Using PowerPoint

Creating Large Format Posters Using PowerPoint The ideal poster is designed to Tell a story Provide a brief overview of your work Initiate discussion Stand alone when you re not there to provide an explanation

### Mathematics Course 111: Algebra I Part IV: Vector Spaces

Mathematics Course 111: Algebra I Part IV: Vector Spaces D. R. Wilkins Academic Year 1996-7 9 Vector Spaces A vector space over some field K is an algebraic structure consisting of a set V on which are

### Computer Vision: Filtering

Computer Vision: Filtering Raquel Urtasun TTI Chicago Jan 10, 2013 Raquel Urtasun (TTI-C) Computer Vision Jan 10, 2013 1 / 82 Today s lecture... Image formation Image Filtering Raquel Urtasun (TTI-C) Computer

### Understand the Sketcher workbench of CATIA V5.

Chapter 1 Drawing Sketches in Learning Objectives the Sketcher Workbench-I After completing this chapter you will be able to: Understand the Sketcher workbench of CATIA V5. Start a new file in the Part

### Visualization of 2D Domains

Visualization of 2D Domains This part of the visualization package is intended to supply a simple graphical interface for 2- dimensional finite element data structures. Furthermore, it is used as the low

### (Refer Slide Time: 00:01:23 min)

Computer Aided Design Prof. Anoop Chalwa Department of Mechanical Engineering Indian Institute of Technology, Delhi Lecture No. # 02 Input Output Devices, Raster Graphics Today we will be talking about

### G563 Quantitative Paleontology. SQL databases. An introduction. Department of Geological Sciences Indiana University. (c) 2012, P.

SQL databases An introduction AMP: Apache, mysql, PHP This installations installs the Apache webserver, the PHP scripting language, and the mysql database on your computer: Apache: runs in the background

### Introduction to Autodesk Inventor for F1 in Schools

F1 in Schools race car Introduction to Autodesk Inventor for F1 in Schools In this course you will be introduced to Autodesk Inventor, which is the centerpiece of Autodesk s Digital Prototyping strategy

### Problem definition: optical flow

Motion Estimation http://www.sandlotscience.com/distortions/breathing_objects.htm http://www.sandlotscience.com/ambiguous/barberpole.htm Why estimate motion? Lots of uses Track object behavior Correct

### B2.53-R3: COMPUTER GRAPHICS. NOTE: 1. There are TWO PARTS in this Module/Paper. PART ONE contains FOUR questions and PART TWO contains FIVE questions.

B2.53-R3: COMPUTER GRAPHICS NOTE: 1. There are TWO PARTS in this Module/Paper. PART ONE contains FOUR questions and PART TWO contains FIVE questions. 2. PART ONE is to be answered in the TEAR-OFF ANSWER

### Template-based Eye and Mouth Detection for 3D Video Conferencing

Template-based Eye and Mouth Detection for 3D Video Conferencing Jürgen Rurainsky and Peter Eisert Fraunhofer Institute for Telecommunications - Heinrich-Hertz-Institute, Image Processing Department, Einsteinufer

### Jiří Matas. Hough Transform

Hough Transform Jiří Matas Center for Machine Perception Department of Cybernetics, Faculty of Electrical Engineering Czech Technical University, Prague Many slides thanks to Kristen Grauman and Bastian

### Interpolating and Approximating Implicit Surfaces from Polygon Soup

Interpolating and Approximating Implicit Surfaces from Polygon Soup 1. Briefly summarize the paper s contributions. Does it address a new problem? Does it present a new approach? Does it show new types

### Help on the Embedded Software Block

Help on the Embedded Software Block Powersim Inc. 1. Introduction The Embedded Software Block is a block that allows users to model embedded devices such as microcontrollers, DSP, or other devices. It

### Introduction to SolidWorks Software

Introduction to SolidWorks Software Marine Advanced Technology Education Design Tools What is SolidWorks? SolidWorks is design automation software. In SolidWorks, you sketch ideas and experiment with different

### Image registration in DataViewer

Image registration in DataViewer A brief user guide Starting from version 1.5.0.0, DataViewer provides tools for image registration for both 2D and 3D. In both cases, only rigid transformation is considered.

### Polygon Clipping and Filling Week 3, Lecture 5

CS 430/536 Computer Graphics I Polygon Clipping and Filling Week 3, Lecture 5 David Breen, William Regli and Maxim Peysakhov Geometric and Intelligent Computing Laboratory Department of Computer Science

### Microsoft Excel 2010 Prepared by Computing Services at the Eastman School of Music July 2010

Microsoft Excel 2010 Prepared by Computing Services at the Eastman School of Music July 2010 Contents Microsoft Office Interface... 4 File Ribbon Tab... 5 Microsoft Office Quick Access Toolbar... 6 Appearance

### 6 EXTENDING ALGEBRA. 6.0 Introduction. 6.1 The cubic equation. Objectives

6 EXTENDING ALGEBRA Chapter 6 Extending Algebra Objectives After studying this chapter you should understand techniques whereby equations of cubic degree and higher can be solved; be able to factorise

### We can display an object on a monitor screen in three different computer-model forms: Wireframe model Surface Model Solid model

CHAPTER 4 CURVES 4.1 Introduction In order to understand the significance of curves, we should look into the types of model representations that are used in geometric modeling. Curves play a very significant

### ImageJ Quick Reference

The ImageJ user interface ImageJ Quick Reference The ImageJ user interface is nearly identical for Windows and Macintosh operating systems, except for the location of the menu bar. Windows Under Windows,

### Introduction to Autodesk Inventor for F1 in Schools

Introduction to Autodesk Inventor for F1 in Schools F1 in Schools Race Car In this course you will be introduced to Autodesk Inventor, which is the centerpiece of Autodesk s digital prototyping strategy

### Derive 5: The Easiest... Just Got Better!

Liverpool John Moores University, 1-15 July 000 Derive 5: The Easiest... Just Got Better! Michel Beaudin École de Technologie Supérieure, Canada Email; mbeaudin@seg.etsmtl.ca 1. Introduction Engineering

### The Role of Size Normalization on the Recognition Rate of Handwritten Numerals

The Role of Size Normalization on the Recognition Rate of Handwritten Numerals Chun Lei He, Ping Zhang, Jianxiong Dong, Ching Y. Suen, Tien D. Bui Centre for Pattern Recognition and Machine Intelligence,

### Microsoft Mathematics for Educators:

Microsoft Mathematics for Educators: Familiarize yourself with the interface When you first open Microsoft Mathematics, you ll see the following elements displayed: 1. The Calculator Pad which includes

### Visualizing Data: Scalable Interactivity

Visualizing Data: Scalable Interactivity The best data visualizations illustrate hidden information and structure contained in a data set. As access to large data sets has grown, so has the need for interactive

### Excel -- Creating Charts

Excel -- Creating Charts The saying goes, A picture is worth a thousand words, and so true. Professional looking charts give visual enhancement to your statistics, fiscal reports or presentation. Excel

### Learn CUDA in an Afternoon: Hands-on Practical Exercises

Learn CUDA in an Afternoon: Hands-on Practical Exercises Alan Gray and James Perry, EPCC, The University of Edinburgh Introduction This document forms the hands-on practical component of the Learn CUDA

### Linear Threshold Units

Linear Threshold Units w x hx (... w n x n w We assume that each feature x j and each weight w j is a real number (we will relax this later) We will study three different algorithms for learning linear

### Unit 7 Quadratic Relations of the Form y = ax 2 + bx + c

Unit 7 Quadratic Relations of the Form y = ax 2 + bx + c Lesson Outline BIG PICTURE Students will: manipulate algebraic expressions, as needed to understand quadratic relations; identify characteristics

### suggestive contours and abstracted shading Daniel Arias

suggestive contours and abstracted shading Daniel Arias LINES AND SHADES Shape, volume, shades and texture in drawing lines as nonphotorealistic rendering technique Luis Caballero Suggestive contours Many

### PGR Computing Programming Skills

PGR Computing Programming Skills Dr. I. Hawke 2008 1 Introduction The purpose of computing is to do something faster, more efficiently and more reliably than you could as a human do it. One obvious point

### A Complete Gradient Clustering Algorithm for Features Analysis of X-ray Images

A Complete Gradient Clustering Algorithm for Features Analysis of X-ray Images Małgorzata Charytanowicz, Jerzy Niewczas, Piotr A. Kowalski, Piotr Kulczycki, Szymon Łukasik, and Sławomir Żak Abstract Methods

### Virtual Mouse Using a Webcam

1. INTRODUCTION Virtual Mouse Using a Webcam Since the computer technology continues to grow up, the importance of human computer interaction is enormously increasing. Nowadays most of the mobile devices

### MMGD0203 Multimedia Design MMGD0203 MULTIMEDIA DESIGN. Chapter 3 Graphics and Animations

MMGD0203 MULTIMEDIA DESIGN Chapter 3 Graphics and Animations 1 Topics: Definition of Graphics Why use Graphics? Graphics Categories Graphics Qualities File Formats Types of Graphics Graphic File Size Introduction

### A Direct Numerical Method for Observability Analysis

IEEE TRANSACTIONS ON POWER SYSTEMS, VOL 15, NO 2, MAY 2000 625 A Direct Numerical Method for Observability Analysis Bei Gou and Ali Abur, Senior Member, IEEE Abstract This paper presents an algebraic method

### Vector Spaces; the Space R n

Vector Spaces; the Space R n Vector Spaces A vector space (over the real numbers) is a set V of mathematical entities, called vectors, U, V, W, etc, in which an addition operation + is defined and in which

### Overview of the Adobe Flash Professional CS6 workspace

Overview of the Adobe Flash Professional CS6 workspace In this guide, you learn how to do the following: Identify the elements of the Adobe Flash Professional CS6 workspace Customize the layout of the

### CONCEPT-II. Overview of demo examples

CONCEPT-II CONCEPT-II is a frequency domain method of moment (MoM) code, under development at the Institute of Electromagnetic Theory at the Technische Universität Hamburg-Harburg (www.tet.tuhh.de). Overview

### Inkscape. Two-dimensional vector graphics. For laser cutting

Inkscape Two-dimensional vector graphics For laser cutting Inkscape - Vector drawing Free vector drawing program Vectors are mathematically defined points, lines, curves, etc. Scalable, unlike raster images

### CS1112 Spring 2014 Project 4. Objectives. 3 Pixelation for Identity Protection. due Thursday, 3/27, at 11pm

CS1112 Spring 2014 Project 4 due Thursday, 3/27, at 11pm You must work either on your own or with one partner. If you work with a partner you must first register as a group in CMS and then submit your

### Measuring Length and Area of Objects in Digital Images Using AnalyzingDigitalImages Software. John Pickle, Concord Academy, March 19, 2008

Measuring Length and Area of Objects in Digital Images Using AnalyzingDigitalImages Software John Pickle, Concord Academy, March 19, 2008 The AnalyzingDigitalImages software, available free at the Digital

### Analecta Vol. 8, No. 2 ISSN 2064-7964

EXPERIMENTAL APPLICATIONS OF ARTIFICIAL NEURAL NETWORKS IN ENGINEERING PROCESSING SYSTEM S. Dadvandipour Institute of Information Engineering, University of Miskolc, Egyetemváros, 3515, Miskolc, Hungary,

### Drawing an Umbrella using Bezier Curves in CS3 Fireworks

Bezier Curves are the mathematical means of making nice smooth and balanced curves in most computer graphics programs. They can be extremely annoying and difficult to use for complete beginners. The things

Excel 2010: Create your first spreadsheet Goals: After completing this course you will be able to: Create a new spreadsheet. Add, subtract, multiply, and divide in a spreadsheet. Enter and format column

### The following is an overview of lessons included in the tutorial.

Chapter 2 Tutorial Tutorial Introduction This tutorial is designed to introduce you to some of Surfer's basic features. After you have completed the tutorial, you should be able to begin creating your

### A simplified implementation of the least squares solution for pairwise comparisons matrices

A simplified implementation of the least squares solution for pairwise comparisons matrices Marcin Anholcer Poznań University of Economics Al. Niepodleg lości 10, 61-875 Poznań, Poland V. Babiy McMaster

### Manual Analysis Software AFD 1201

AFD 1200 - AcoustiTube Manual Analysis Software AFD 1201 Measurement of Transmission loss acc. to Song and Bolton 1 Table of Contents Introduction - Analysis Software AFD 1201... 3 AFD 1200 - AcoustiTube

### Data source, type, and file naming convention

Exercise 1: Basic visualization of LiDAR Digital Elevation Models using ArcGIS Introduction This exercise covers activities associated with basic visualization of LiDAR Digital Elevation Models using ArcGIS.

### Assessment. Presenter: Yupu Zhang, Guoliang Jin, Tuo Wang Computer Vision 2008 Fall

Automatic Photo Quality Assessment Presenter: Yupu Zhang, Guoliang Jin, Tuo Wang Computer Vision 2008 Fall Estimating i the photorealism of images: Distinguishing i i paintings from photographs h Florin

### Face Recognition using Principle Component Analysis

Face Recognition using Principle Component Analysis Kyungnam Kim Department of Computer Science University of Maryland, College Park MD 20742, USA Summary This is the summary of the basic idea about PCA

### The Fourth International DERIVE-TI92/89 Conference Liverpool, U.K., 12-15 July 2000. Derive 5: The Easiest... Just Got Better!

The Fourth International DERIVE-TI9/89 Conference Liverpool, U.K., -5 July 000 Derive 5: The Easiest... Just Got Better! Michel Beaudin École de technologie supérieure 00, rue Notre-Dame Ouest Montréal

### Create a folder on your network drive called DEM. This is where data for the first part of this lesson will be stored.

In this lesson you will create a Digital Elevation Model (DEM). A DEM is a gridded array of elevations. In its raw form it is an ASCII, or text, file. First, you will interpolate elevations on a topographic

### HYDROHASARDS PostGraduate Study Program. Remote Sensing Lab Exercises. LAB 2: Band Math Map Composition. Band Math

HYDROHASARDS PostGraduate Study Program Remote Sensing Lab Exercises LAB 2: Band Math Map Composition Dr. Marios Spiliotopoulos -------------------------------------------------------------------------------------------------

### CHAPTER 5 SENDER AUTHENTICATION USING FACE BIOMETRICS

74 CHAPTER 5 SENDER AUTHENTICATION USING FACE BIOMETRICS 5.1 INTRODUCTION Face recognition has become very popular in recent years, and is used in many biometric-based security systems. Face recognition

### Spreadsheet View and Basic Statistics Concepts

Spreadsheet View and Basic Statistics Concepts GeoGebra 3.2 Workshop Handout 9 Judith and Markus Hohenwarter www.geogebra.org Table of Contents 1. Introduction to GeoGebra s Spreadsheet View 2 2. Record

### Introduction to acoustic imaging

Introduction to acoustic imaging Contents 1 Propagation of acoustic waves 3 1.1 Wave types.......................................... 3 1.2 Mathematical formulation.................................. 4 1.3

### Figure 2.1: Center of mass of four points.

Chapter 2 Bézier curves are named after their inventor, Dr. Pierre Bézier. Bézier was an engineer with the Renault car company and set out in the early 196 s to develop a curve formulation which would