基于PCA的人脸识别(MATLAB)
项目描述
基于剑桥大学ORL的人脸数据库
算法描述
流程图

基本原理及步骤分析
主成份
设有一组随机变量序列X₁,X₂,…,X_p,…,X_n,在计算它们的标准差时分别用S₁,S₂,…,S_p表示;
若C₁ = a₁₁x₁ + a₁₂x₂ + … + a₁_px_p,则称满足使C₁的方差最大的线性组合为第一主成分;
类似地,在保证系数向量(a₂₁,a₂₂,…,a₂_p)与(a₁₁,a₁₂,…,a₁_p)正交的条件下,
若C₂ = a₂¹x¹ + a²²x² + … + a²_px_p使得其方差达到最大,则称其为第二主成分;
以此类推,
第三、四、五…主成分均需满足相应的正交条件并使各自对应的方差最大化;
由于主成分的数量最多不超过原始变量的数量p,
因此需要根据累积贡献率达到一定比例来确定保留多少个主成分;
一般认为当新增一个主成分所带来的累积贡献率增量微小时,
即可停止选取新的主成分。
K-L变换
K-L变换是一种针对广泛随机图像集合开发的有效数学工具。通过对M个原始图像应用K-L变换后得到的新图像集合中各图像是互不相关的。
从变换结果图集中选取有限数量的特征(数量小于原始总数)来重构的图像是在统计意义上最接近原图的最佳近似。
基于PCA方法确定投影特征空间后,通过应用K-L变换进行投影运算,从而获得各个样本在空间Wpca上的投影特征。

PCA
考虑在图像集合f(m,n)中的一幅图像而言,在信息处理过程中可以通过叠加的方法将其表示为一个m×n维列向量。

从图像矩阵的第一列依次取出每一列数据直到最后一列,并将这些列首尾相连形成一个维列向量。将每个面部图像表示为列向量后,在将其转置后成为行向量的基础上构建一个人脸样本矩阵。该样本矩阵即用于后续的人脸识别任务中所必需的特征数据集结构。

该样本矩阵包含L行数据信息,在这些数据中每一行为一张人脸样本图像。其中L代表的是训练样例的总数目,在此过程中我们计算得到训练数据集的协方差矩阵为:C = \frac{1}{L-1} \sum_{i=1}^{L} (x_i - \mu)(x_i - \mu)^T

或者写成:

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

对各特征值进行排序并取对应的特征向量组成正交矩阵

识别过程
通过将训练样本投射到特征空间中得到其投影后的特征系数向量,并对测试样本同样施以投射操作以获得各自对应的投影后特征向量。随后通过计算对比测试样本与各训练样例之间的投影后特征向量间的距离,并根据2范数最小匹配原则确定该待测样本与其在训练集中最邻近的那个样例所属类别。
实现代码
%待补充
%训练
%选择待识别图像
%识别
%计算正确率
一些截图

创建了一个测试文件,并能够生成主成份K的值范围为1至99时的准确率计算结果。通过绘制折线图的方式展示主成份K变化趋势,并将最终分析结果输出为Excel文件

当K值较小时,正确率低。
- K = 9(识别错误)

- K = 19(识别错误)

- K = 29(识别错误)

- K = 39(识别正确)

可作为参考的是基于主成分分析(PCA)的人脸识别算法的Matlab实现方法
