天天看点

基于PCA的人脸识别(MATLAB)

项目描述

采用数据库为剑桥大学ORL人脸数据库,包含40个人的400张人脸图像(每人对应10张),图像为92x112灰度图像(256灰度级)对于每个人的10张图像,随机选择7张用来训练,另外3张用于测试。采用2范数最小匹配,对每个人的另外3张训练图像分别测试,共测试3x40个图像,计算识别系统的正确率=(识别正确的图像数)/120。

算法描述

流程图

基于PCA的人脸识别(MATLAB)

基本原理及步骤分析

主成份

设有随机变量X1,X2,…,Xp,样本标准差记为S1,S2,…,Sp。

若C1=a11x1+a12x2+ … +a1pxp,且使 Var(C1)最大,则称C1为第一主成分;

若C2=a21x1+a22x2+…+a2pxp, (a21,a22,…,a2p)垂直于(a11,a12,…,a1p),且使Var(C2)最大,则称C2为第二主成分;

类似地,可有第三、四、五…主成分,至多有p个。

保留多少个主成分取决于保留部分的累积方差在方差总和中所占百分比(即累计贡献率),它标志着前几个主成分概括信息之多寡。实践中,粗略规定一个百分比便可决定保留几个主成分;如果多保留一个主成分,累积方差增加无几,便不再保留。

K-L变换

K-L变换本质上是针对这类广泛的随机图像提出来的, 当对M个图像施加了K-L变换以后,变换后的M 新图像组成的集合中各图像之间互不相关。

由变换结果图像集中取有限个图像K (K\<\M )而恢复的图像将是原图像在统计意义上的最佳逼近。

找到PCA人脸识别需要的投影特征空间之后,通过K-L变换进行投影运算,得出各个样本在空间Wpca上的投影特征:

基于PCA的人脸识别(MATLAB)
PCA

假设在图像集合f(m,n)中,每张图像可以用堆叠的方式表示成一个维列向量:

基于PCA的人脸识别(MATLAB)

从图像矩阵的第一列开始取,依次取到最后一列,每一列首尾相连,构成一个维列向量。将每一幅人脸图像表示成列向量以后,依次将每一个图像列向量转置成行向量,构成一个人脸样本矩阵,该样本矩阵即图像集合。

基于PCA的人脸识别(MATLAB)

可知样本矩阵有L行,其中每一行的数据就代表一张人脸样本图像,L表示训练样本的总个数。训练样本的协方差矩阵为:

基于PCA的人脸识别(MATLAB)

或者写成:

基于PCA的人脸识别(MATLAB)

mf是所有训练样本的平均值向量,也即是所有样本的平均脸

基于PCA的人脸识别(MATLAB)

特征值进行降序排列,并取每个特征值对应的特征向量构成一个正交矩阵,也即是一个维的正交空间。进行特征值和特征向量的求解,将求解出的特征向量和特征值经过SVD奇异值分解,得到原训练样本的特征向量,这样就可以构造出最终的人脸投影空间。将特征向量转化为矩阵,矩阵就可以表示图像,也即是所谓的特征脸。

基于PCA的人脸识别(MATLAB)
识别过程

将训练样本在特征空间上进行投影,得到投影样本的特征系数,然后将测试样本也在空间上进行投影,得到每个测试杨样本的投影特征系数,最后,将计算出的测试样本的特征系数与训练样本投影特征系数进行距离度量,按照要求用2范数最小匹配。看要测试的那个样本与训练集中哪个样本的距离最近,就可以将该测试样本归为与之距离最近那个样本的类别,识别完成。

实现代码

%待补充
%训练
%选择待识别图像
%识别
%计算正确率
           

一些截图

基于PCA的人脸识别(MATLAB)

写了个测试文件,可以计算主成份K从1到99的正确率,绘制折线图并导出对应的xls文件

基于PCA的人脸识别(MATLAB)

当K值较小时,正确率低。

  1. K = 9(识别错误)
    基于PCA的人脸识别(MATLAB)
  2. K = 19(识别错误)
    基于PCA的人脸识别(MATLAB)
  3. K = 29(识别错误)
    基于PCA的人脸识别(MATLAB)
  4. K = 39(识别正确)
    基于PCA的人脸识别(MATLAB)

有参考matlab实现基于PCA的人脸识别算法

继续阅读