[−][src]Struct opencv::core::PCA
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 high-dimensional space with a much shorter vector consisting of the projected vector's coordinates in the subspace. Such a transformation is also known as Karhunen-Loeve 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. :
using namespace cv; PCA compressPCA(const Mat& pcaset, int maxComponents, const Mat& testset, Mat& compressed) { PCA pca(pcaset, // pass the data Mat(), // we do not have a pre-computed mean vector, // so let the PCA engine to compute it PCA::DATA_AS_ROW, // indicate that the vectors // are stored as matrix rows // (use PCA::DATA_AS_COL if the vectors are // the matrix columns) maxComponents // specify, how many principal components to retain ); // if there is no test data, just return the computed basis, ready-to-use if( !testset.data ) return pca; CV_Assert( testset.cols == pcaset.cols ); compressed.create(testset.rows, maxComponents, testset.type()); Mat reconstructed; for( int i = 0; i < testset.rows; i++ ) { Mat vec = testset.row(i), coeffs = compressed.row(i), reconstructed; // compress the vector, the result will be stored // in the i-th row of the output matrix pca.project(vec, coeffs); // and then reconstruct it pca.backProject(coeffs, reconstructed); // and measure the error printf("%d. diff = %g\n", i, norm(vec, reconstructed, NORM_L2)); } return pca; }
See also
calcCovarMatrix, mulTransposed, SVD, dft, dct
Implementations
impl PCA
[src]
pub fn as_raw_PCA(&self) -> *const c_void
[src]
pub fn as_raw_mut_PCA(&mut self) -> *mut c_void
[src]
impl PCA
[src]
pub fn default() -> Result<PCA>
[src]
default constructor
The default constructor initializes an empty %PCA structure. The other constructors initialize the structure and call PCA::operator()().
pub fn new(
data: &dyn ToInputArray,
mean: &dyn ToInputArray,
flags: i32,
max_components: i32
) -> Result<PCA>
[src]
data: &dyn ToInputArray,
mean: &dyn ToInputArray,
flags: i32,
max_components: i32
) -> Result<PCA>
default constructor
The default constructor initializes an empty %PCA structure. The other constructors initialize the structure and call PCA::operator()().
Overloaded parameters
Parameters
- data: input samples stored as matrix rows or matrix columns.
- mean: optional mean value; if the matrix is empty (@c 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.
C++ default parameters
- max_components: 0
pub fn new_with_variance(
data: &dyn ToInputArray,
mean: &dyn ToInputArray,
flags: i32,
retained_variance: f64
) -> Result<PCA>
[src]
data: &dyn ToInputArray,
mean: &dyn ToInputArray,
flags: i32,
retained_variance: f64
) -> Result<PCA>
default constructor
The default constructor initializes an empty %PCA structure. The other constructors initialize the structure and call PCA::operator()().
Overloaded parameters
Parameters
- 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.
Trait Implementations
impl Boxed for PCA
[src]
unsafe fn from_raw(ptr: *mut c_void) -> Self
[src]
fn into_raw(self) -> *mut c_void
[src]
fn as_raw(&self) -> *const c_void
[src]
fn as_raw_mut(&mut self) -> *mut c_void
[src]
impl Drop for PCA
[src]
impl PCATrait for PCA
[src]
fn as_raw_PCA(&self) -> *const c_void
[src]
fn as_raw_mut_PCA(&mut self) -> *mut c_void
[src]
fn eigenvectors(&mut self) -> Mat
[src]
fn set_eigenvectors(&mut self, mut val: Mat)
[src]
fn eigenvalues(&mut self) -> Mat
[src]
fn set_eigenvalues(&mut self, mut val: Mat)
[src]
fn mean(&mut self) -> Mat
[src]
fn set_mean(&mut self, mut val: Mat)
[src]
fn project(&self, vec: &dyn ToInputArray) -> Result<Mat>
[src]
fn project_to(
&self,
vec: &dyn ToInputArray,
result: &mut dyn ToOutputArray
) -> Result<()>
[src]
&self,
vec: &dyn ToInputArray,
result: &mut dyn ToOutputArray
) -> Result<()>
fn back_project(&self, vec: &dyn ToInputArray) -> Result<Mat>
[src]
fn back_project_to(
&self,
vec: &dyn ToInputArray,
result: &mut dyn ToOutputArray
) -> Result<()>
[src]
&self,
vec: &dyn ToInputArray,
result: &mut dyn ToOutputArray
) -> Result<()>
fn write(&self, fs: &mut FileStorage) -> Result<()>
[src]
fn read(&mut self, fn_: &FileNode) -> Result<()>
[src]
impl Send for PCA
[src]
Auto Trait Implementations
impl RefUnwindSafe for PCA
[src]
impl !Sync for PCA
[src]
impl Unpin for PCA
[src]
impl UnwindSafe for PCA
[src]
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,