PCA--主成分分析,主要用在降维上。
具体原理讲解的很多,在这里就不多说了。
PCA主要计算步骤如下:
1、事先把每个样本归一化,把原始数据中每个样本用一个向量表示,然后把所有样本组合起来构成一个矩阵。
2、求该矩阵的协防差矩阵
3、求步骤2中得到的协方差矩阵的特征值和特征向量。
4、将求出的特征向量按照特征值的大小进行组合形成一个映射矩阵,并根据指定的PCA保留的特征个数取出映射矩阵的前n行或者前n列作为最终的映射矩阵。
5、用步骤4的映射矩阵对原始数据进行映射,达到数据降维的目的。
PCA的应用:
1、人脸识别
2、其他运算的预处理也叫数据的白化
opencv中PCA类的主要函数有:
C++: PCA::PCA(InputArray data, InputArray mean, int flags, int maxComponents=0)
//参数依次为:原始数据;原始数据均值,输入空会自己计算;每行/列代表一个样本;保留多少特征值,默认全保留
C++: PCA::PCA(InputArray data, InputArray mean, int flags, double retainedVariance)
//参数依次为:原始数据;原始数据均值,输入空会自己计算;每行/列代表一个样本;保留多少特征值,百分比,默认全保留
C++: PCA& PCA::computeVar(InputArray data, InputArray mean, int flags, double retainedVariance)
//参数依次为:原始数据;原始数据均值,输入空会自己计算;每行/列代表一个样本;保留多少特征值,百分比,默认全保留
C++: Mat PCA::project(InputArray vec) const
//原图像,投影到新的空间
C++: Mat PCA::backProject(InputArray vec) const
//先进行project之后的数据,反映摄到原始图像
变量值有:mean--------原始数据的均值
eigenvalues--------协方差矩阵的特征值
eigenvectors--------特征向量
函数使用测试:#pragma once#pragma execution_character_set("utf-8")
#include
#include
#include
#include
using namespace cv;
using namespace std;
#define DIMENTIONS7
#define SAMPLE_NUM31
float Coordinates[DIMENTIONS*SAMPLE_NUM] = {
101.5, 100.4, 97.0, 98.7, 100.8, 114.2, 104.2
, 100.8, 93.5, 95.9, 100.7, 106.7, 104.3, 106.4
, 100.8,