人脸识别之特征向量

        最近在学习人脸识别算法,看了Opencv自带的Eigenfaces人脸识别算法,算法的主要思想是利用PCA(Principal Component Analysis)将人脸图像数据高维空间映射到底维空间,将待识别图像低维空间数据与训练样本低维空间数据比较达到识别的目的, 主要实现原理如下:

1. 设置参数和加载数据

1.1 设置主成份数num_components和误差距离阈值threshold

1.2   用vector imgs和vector labels分别存储各图像数据和图像对应的标签;

注:如果图像对应标签相同证明是同一个人;

2. 训练模型

2.1   数据格式转换

假设训练样本有N个人,各图像大小为w*h;则按行为主序将imgs转换为行数为N,列数为w*h的矩阵S,将labels存储为行数为N列数为1的矩阵;

2.2   PCA

利用主元分析法计算所有样本各像素的平均值Mean、以及特征值向量eigenvalues和特征向量矩阵eigenvectors。

2.2.1   计算平均值矩阵

其中Mean行数为1,列数为w*h,每列的元素为

                                                 

2.2.2    计算协方差矩阵covar:covar是一个N*N的矩阵

(1)将Mean行复制N次,获得行为N,列为w*h矩阵Mean_(opencv通过reshape实现),原始数据矩阵S与Mean_相减:S=S-Mean_;

(2)协方差矩阵,其中scale=1/N,此时covar已经对称。

2.2.3   计算eigenvalues和eigenvectors

(1)利用协方差矩阵covar计算特征值矩阵和特征向量矩阵,并特征值从大到小对其进行排序。其中eigenvalues为N*1,eigenvectors为N*N,每一行代表某个特征值对应特征向量(opencv通过函数eigen实现)

(2)计算图像各像素对应的特征向量eigenvectors

(3)对eigenvectors的每一行分别进行归一化(opencv通过函数normalize实现)

2.2.4 取num_components前个特征值和特征向量为最终结果。

2.3   计算所有样本在PCA空间的投影向量矩阵

2.3.1  各样本数据为Si,则对应1*num_components投影向量为

2.3.2    所有样本的投影向量为

3. 预测

计算待识别人脸图片数据对于训练模型的PCA空间投影向量proj_q,计算方法同2.3.1;计算proj_q与训练模型在PCA空间投影proj每个投影的欧式距离,取距离最小dis_min的投影,并记录对应标签label_min,如果dis_min

你可能感兴趣的:(人脸识别,Opencv自带算法,人脸识别,PCA,opencv)