PCA and ICA of Motion Capture data for Crowd simulation Mankyu Sung Introduction While more realistic human motion has played an important part of media like video games and movies, realistic animation of human motion is a challenging task since people have proven to be adept at discerning the subtleties of human movement and identifying inaccuracies. One common solution to this problem is motion capture. Since motion capture data are obtained by capturing human motion of performer, realistic motions are guaranteed. However, the amount of data for animating human figure is increase rapidly because we need every joint angles data for every time frame, for example 1/30. Moreover, when we want to animate crowd in which every single character are doing different action with different motion capture data, the amount of data needed for any time step is enormous. In this report, we used PCA(principal component Analysis) technique to reduce the dimensionality of data so that we can compress the data at any given time. By doing this, we can also achieve the controllability of crowd because we can control the behavior of crowd as a whole rather than control individual character. In addition to this, we applied ICA(Independent Component Analysis) to extract features of motion capture data. PCA Analysis of motion data The motion capture data are composed of a set of poses over time. The poses can be represented as a 3D position of markers. In general, the number of maker determines that skeleton of character. In our experiment, we use seventeen 3D points to represent character. By the analysis of PCA, we can transform the Euclidean space of the data into the Eigenspace. For example, suppose we have a configuration vector X of the character, where (1) and Xi is a 3D position of marker of the character. which means that I used point cloud as a configuration vector. Then, after accumulating this training vector as many as possible, we can compute the mean vector : (2) and covariance matrix of the same data set is (3) The component of Cx denoted by Ci,j, represents the covariance between Xi and Xj. And Cii is the variance of the component Xi. From a symmetric matrix such as covariance matrix, we can calculate the orthogonal basis by finding its eigenvalues and eigenvectors. To find eigenvalues and eigenvectors of the covariance matrix, I used SVD(Singular Value Decomposition) to decompose the matrix into two orthogonal matrix U,V and a diagonal matrix S[1]. (4) where S contain singular values representing eigenvalues and V contain corresponding eigenvectors. By ordering the eigenvectors in the order of descending eigenvalues, one can create an ordered orthogonal basis with the first eigenvector having the direction of the largest variance of the data. In this way, we can find the direction in which the data set has the most important amounts of energy[1]. Once we have orthogonal basis vectors made from eigenvectors, we can project a vector of original coordinate space into orthogonal coordinate system defined by the eigenvectors. If we have a matrix A consist of eigenvectors of the covariance matrix as the row vectors. By projecting a data vector X onto eigenspace, we get (5) where y represent a point in the eigenspace. Of course, we can reconstruct original data vector x from the y by inverse processing of (5). (6) where we used orthogonal matrix property . Rather than using all eigenvectors of the covariance matrix, If we only takes eigenvectors that have large amount of energy, we can efficiently reduce the dimension of the data without losing important information. If we denote the matrix having the K first eigenvectors as Ak. (7) (8) , where k < n (total number of eigenvectors). This means that we project the original data vector on the coordinate axes having the dimension K and transforming the vector back by a linear combination of the basis vectors. This minimizes the mean-square error between the data and this representation with given number of eigenvectors[1]. Suppose we have 25 markers on the character to track the motion. Then, we have 75 dimension to represent the posture of the character as a data vector because each position is in R3. By using PCA, we can reduce this dimension significantly depending on how many eigenvectors are used for projection. To test this dimension reduction, I performed PCA over the Dance01.bvh motion. 300 250 200 150 100 50 73 69 65 61 57 53 49 45 41 37 33 29 25 21 17 13 9 5 1 0 Fig1. Eigenvalues of covariance matrix(Descending order) 1.2 1 0.8 0.6 0.4 0.2 71 66 61 56 51 46 41 36 31 26 21 16 11 6 1 0 Fig2. Accumulation of energy (0 e 1) of eigenvalues As shown in Fig2, we can know that only around 10 eigenvectors can fully represent the whole motion. It means that the original 75 dimension can be reduced to 8 dimension, And even in these 8 dimension, one can express whole motion with minimizing information lost. PCA Analysis of crowd data This dimension reduction appeared to be more significantly, when we animation crowd. Suppose we have a crowd that each individual character is doing different action, then the “captured” image of crowd at an instant of time can be represented as a vector of which length is n x m where n is the size of configuration vector in (1) and m is the number of character of crowd. Then, even in crowd case, we can also apply same PCA to reduce the big configuration vector. Suppose we have m characters in the environment, and each motion of character can be represented by (1), then the crowd configuration of c is C = (X1, X2, X3…Xm ) (9) Where Xn is a configuration vector in (1). In this case, the original dimension is Rm x 75 , where m is the number of character, which is much higher than the case of single character. For this experiment, I made a sample environment and put 10 characters in the environment. The environment of development is follows. Language : Visual C++ with embedded Python Script language(http://www.python.org) Library : In order to interfacing Visual C++ and Python, I used Swig library (http://www.swig.org). For graphics library , I used Open GL graphics programming interface. Finally, for GUI, I used FLTK open source library (http://www.fltk.org) Platform : Pentium III, 512 M To give a motion for character, I use walking ,standing, jogging, turning motion capture data randomly so that every one of character are doing one of these motion. Fig3. GUI interface for experiment At an instant of time, I captured the current state of crowd by getting vector c in (9) , And by using PCA, I extract most significant parameters of crowd. Fig 4. Eigenvalues of covariance matrix(Descending order) As shown in Fig 4, most of energy are focused in the first couple of eigen values, which means that we can represent the whole state of crowd with a couple of basis vectors that are made of eigen vectors. Fig 5. plotting of reduced crowd vector As an application of this technique, since the reduced dimension data has small amount of data than original data, we can speed up the searching time of typical motion from a corpus of motion database.