Principal Component Analysis. 更多...
#include <opencv2/core.hpp>
公共类型 

enum 
Flags
{
DATA_AS_ROW = 0, DATA_AS_COL = 1, USE_AVG = 2 } 
Public Member Functions 

PCA ()  
default constructor
更多...


PCA ( InputArray data, InputArray mean , int flags, int maxComponents=0)  
PCA ( InputArray data, InputArray mean , int flags, double retainedVariance)  
Mat  backProject ( InputArray vec) const 
Reconstructs vectors from their PC projections.
更多...


void  backProject ( InputArray vec, OutputArray result) const 
PCA &  operator() ( InputArray data, InputArray mean , int flags, int maxComponents=0) 
performs PCA
更多...


PCA &  operator() ( InputArray data, InputArray mean , int flags, double retainedVariance) 
Mat  project ( InputArray vec) const 
Projects vector(s) to the principal component subspace.
更多...


void  project ( InputArray vec, OutputArray result) const 
void  read (const FileNode &fn) 
load
PCA
对象
更多...


void  write ( FileStorage &fs) const 
write
PCA
对象
更多...


Public Attributes 

Mat  eigenvalues 
eigenvalues of the covariation matrix
更多...


Mat  eigenvectors 
eigenvectors of the covariation matrix
更多...


Mat  mean 
mean value subtracted before the projection and added after the back projection
更多...


Principal Component Analysis.
The class is used to calculate a special basis for a set of vectors. The basis will consist of eigenvectors of the covariance matrix calculated from the input set of vectors. The class PCA can also transform vectors to/from the new coordinate space defined by the basis. Usually, in this new coordinate system, each vector from the original set (and any linear combination of such vectors) can be quite accurately approximated by taking its first few components, corresponding to the eigenvectors of the largest eigenvalues of the covariance matrix. Geometrically it means that you calculate a projection of the vector to a subspace formed by a few eigenvectors corresponding to the dominant eigenvalues of the covariance matrix. And usually such a projection is very close to the original vector. So, you can represent the original vector from a highdimensional space with a much shorter vector consisting of the projected vector's coordinates in the subspace. Such a transformation is also known as KarhunenLoeve Transform, or KLT. See http://en.wikipedia.org/wiki/Principal_component_analysis
The sample below is the function that takes two matrices. The first function stores a set of vectors (a row per vector) that is used to calculate PCA . The second function stores another "test" set of vectors (a row per vector). First, these vectors are compressed with PCA , then reconstructed back, and then the reconstruction error norm is computed and printed for each vector. :
enum cv::PCA::Flags 
cv::PCA::PCA  (  ) 
default constructor
The default constructor initializes an empty PCA structure. The other constructors initialize the structure and call PCA::operator()() .
cv::PCA::PCA  (  InputArray  data , 
InputArray  mean ,  
int  flags ,  
int 
maxComponents
=
0


) 
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
data  input samples stored as matrix rows or matrix columns. 
mean 
optional mean value; if the matrix is empty (
noArray()
), the mean is computed from the data.

flags  operation flags; currently the parameter is only used to specify the data layout ( PCA::Flags ) 
maxComponents  maximum number of components that PCA should retain; by default, all the components are retained. 
cv::PCA::PCA  (  InputArray  data , 
InputArray  mean ,  
int  flags ,  
double  retainedVariance  
) 
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
data  input samples stored as matrix rows or matrix columns. 
mean  optional mean value; if the matrix is empty ( noArray() ), the mean is computed from the data. 
flags  operation flags; currently the parameter is only used to specify the data layout ( PCA::Flags ) 
retainedVariance  Percentage of variance that PCA should retain. Using this parameter will let the PCA decided how many components to retain but it will always keep at least 2. 
Mat cv::PCA::backProject  (  InputArray  vec  )  const 
Reconstructs vectors from their PC projections.
The methods are inverse operations to PCA::project . They take PC coordinates of projected vectors and reconstruct the original vectors. Unless all the principal components have been retained, the reconstructed vectors are different from the originals. But typically, the difference is small if the number of components is large enough (but still much smaller than the original vector dimensionality). As a result, PCA 被使用。
vec  coordinates of the vectors in the principal component subspace, the layout and size are the same as of PCA::project output vectors. 
void cv::PCA::backProject  (  InputArray  vec , 
OutputArray  result  
)  const 
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
vec  coordinates of the vectors in the principal component subspace, the layout and size are the same as of PCA::project output vectors. 
result  reconstructed vectors; the layout and size are the same as of PCA::project input vectors. 
PCA & cv::PCA::operator()  (  InputArray  data , 
InputArray  mean ,  
int  flags ,  
int 
maxComponents
=
0


) 
performs PCA
The operator performs PCA of the supplied dataset. It is safe to reuse the same PCA structure for multiple datasets. That is, if the structure has been previously used with another dataset, the existing internal data is reclaimed and the new eigenvalues , eigenvectors and mean are allocated and computed.
The computed eigenvalues are sorted from the largest to the smallest and the corresponding eigenvectors are stored as eigenvectors rows.
data  input samples stored as the matrix rows or as the matrix columns. 
mean  optional mean value; if the matrix is empty ( noArray() ), the mean is computed from the data. 
flags  operation flags; currently the parameter is only used to specify the data layout. (Flags) 
maxComponents  maximum number of components that PCA should retain; by default, all the components are retained. 
PCA & cv::PCA::operator()  (  InputArray  data , 
InputArray  mean ,  
int  flags ,  
double  retainedVariance  
) 
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
data  input samples stored as the matrix rows or as the matrix columns. 
mean  optional mean value; if the matrix is empty ( noArray() ), the mean is computed from the data. 
flags  operation flags; currently the parameter is only used to specify the data layout. ( PCA::Flags ) 
retainedVariance  Percentage of variance that PCA should retain. Using this parameter will let the PCA decided how many components to retain but it will always keep at least 2. 
Mat cv::PCA::project  (  InputArray  vec  )  const 
Projects vector(s) to the principal component subspace.
The methods project one or more vectors to the principal component subspace, where each vector projection is represented by coefficients in the principal component basis. The first form of the method returns the matrix that the second form writes to the result. So the first form can be used as a part of expression while the second form can be more efficient in a processing loop.
vec 
input vector(s); must have the same dimensionality and the same layout as the input data used at PCA phase, that is, if DATA_AS_ROW are specified, then
vec.cols==data.cols
(vector dimensionality) and
vec.rows
is the number of vectors to project, and the same is true for the
PCA::DATA_AS_COL
case.

void cv::PCA::project  (  InputArray  vec , 
OutputArray  result  
)  const 
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
vec 
input vector(s); must have the same dimensionality and the same layout as the input data used at
PCA
phase, that is, if DATA_AS_ROW are specified, then
vec.cols==data.cols
(vector dimensionality) and
vec.rows
is the number of vectors to project, and the same is true for the
PCA::DATA_AS_COL
case.

result 
output vectors; in case of
PCA::DATA_AS_COL
, the output matrix has as many columns as the number of input vectors, this means that
result.cols==vec.cols
and the number of rows match the number of principal components (for example,
maxComponents
parameter passed to the constructor).

void cv::PCA::read  (  const FileNode &  fn  ) 
load PCA 对象
加载 eigenvalues eigenvectors and mean from specified FileNode
void cv::PCA::write  (  FileStorage &  fs  )  const 
write PCA 对象
写入 eigenvalues eigenvectors and mean to specified FileStorage
Mat cv::PCA::eigenvalues 
eigenvalues of the covariation matrix
Mat cv::PCA::eigenvectors 
eigenvectors of the covariation matrix
Mat cv::PCA::mean 
mean value subtracted before the projection and added after the back projection