Principal Component Analysis of Motion data

advertisement
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.
Download