基于LDA算法的人脸识别特征提取系统
项目简介
本项目是一个基于Matlab实现的经典人脸识别系统,核心算法采用
Fisherfaces方法(即PCA + LDA)。系统旨在解决高维人脸图像数据的特征提取与分类问题。通过结合主成分分析(PCA)和线性判别分析(LDA),该项目有效地解决了LDA在小样本情况下的“维数灾难”及散度矩阵奇异性问题。
系统内置了完整的数据处理流程,包括模拟数据生成、图像预处理、维数约减、特征空间投影以及最近邻分类识别,并提供了直观的可视化结果展示。
主要功能特性
*
合成数据模式:无需外部数据集,系统利用算法自动生成带有几何特征、高斯模糊和随机噪声的模拟人脸数据,方便快速演示算法流程。
*
真实数据加载:支持按文件夹分类读取真实人脸库(如ORL等),兼容易见的图像格式(JPG, BMP, PNG, PGM)。
- 图像标准化处理:自动将输入图像调整为统一尺寸(默认64x64像素)并转化为灰度向量,构建标准样本矩阵。
- 鲁棒的降维算法 (Fisherfaces):
*
PCA预处理:利用快照法(Snapshot Method)先将高维图像降维至 $(N-C)$ 维,有效避免LDA中类内散度矩阵不可逆的问题。
*
LDA特征提取:在PCA子空间内最大化类间散度同时最小化类内散度,提取最具鉴别力的Fisher特征。
- 数值稳定性优化:在求解广义特征值问题时引入微小正则化项,增强了矩阵运算的稳定性。
- 高效识别模块:基于向量化运算的最近邻分类器(1-NN),使用欧氏距离进行身份匹配。
- 可视化分析:输出Fisherfaces特征脸、总体平均脸以及识别结果(由于代码包含随机性,每次运行展示不同的随机样本对比)。
系统要求
- MATLAB R2016a 或更高版本
- Image Processing Toolbox(用于图像读取与调整大小)
使用方法
- 打开 MATLAB,定位到项目根目录。
- 打开主程序入口文件。
- 参数配置(位于代码顶部的“参数设置”区域):
*
params.syntheticData:设置为
true 使用模拟数据,
false 则读取本地数据集。
*
params.dataPath:若使用真实数据,需制定数据集根路径。
*
params.targetDim:指定最终保留的LDA特征维数。
*
params.trainRatio:设置训练集与测试集的划分比例(默认 0.7)。
- 运行主程序函数。
- 控制台将输出训练进度、维度变化及最终识别准确率,并弹出可视化窗口。
核心算法与实现细节
本项目严格遵循 Fisherfaces 的学术定义进行实现,以下是代码内部的具体逻辑分析:
1. 数据预处理与划分
- 加载逻辑:对于真实数据,代码遍历根目录下的子文件夹,将每个子文件夹视为一个类别,读取其中所有图像并拉伸为一维行向量。
- 分层采样:实现了 Stratified Split 策略,确保训练集和测试集中包含每个类别的样本比例一致(代码中通过通过循环每个类别并进行随机打乱索引实现)。
2. PCA 降维(解决小样本奇异性问题)
为了解决原始像素空间维数远大于样本数导致的矩阵奇异问题,代码首先执行 PCA:
- 中心化:计算所有训练样本的均值脸(Global Mean Face),并将数据去中心化。
- 快照法(Snapshot Method):当特征维数 $D$ 远大于样本数 $N$ 时,代码计算 $A^T A$ ($N times N$) 而非 $A A^T$ ($D times D$) 的特征值,极大地降低了计算量。
- 维度选择:代码动态设置 PCA 保留维度为
样本总数 - 类别数,这是保证后续 LDA 中类内散度矩阵 $S_w$ 非奇异的理论上限。
3. LDA 线性判别分析
在 PCA 投影后的子空间内执行 LDA:
* 计算总体均值和各类别的局部均值。
* 构建
类内散度矩阵 ($S_w$):累加各类别样本相对于其类均值的协方差。
* 构建
类间散度矩阵 ($S_b$):计算各类别均值相对于总体均值的加权散度。
* 求解 $S_b W = lambda S_w W$。
*
正则化处理:代码中显式地向 $S_w$ 添加了
1e-6 的单位矩阵扰动(
Sw + 1e-6 * eye),防止因数值精度问题导致的矩阵不可逆错误。
- 投影矩阵合成:最终的投影矩阵 $W_{opt}$ 计算为 $W_{pca} times W_{lda}$,将原始图像直接映射到低维 Fisher 空间。
4. 识别与分类
- 特征投影:将训练集和测试集均减去均值脸,并乘以 $W_{opt}$ 得到低维特征向量。
- 向量化距离计算:代码通过矩阵运算公式 $(x-y)^2 = x^2 + y^2 - 2xy$ 一次性计算测试集与训练集之间的全量距离矩阵,避免了低效的循环计算。
- 决策:选取距离最近的训练样本所属的标签作为预测结果。
结果可视化说明
程序运行结束后会生成一个包含四个子图的窗口:
- Top 1 Fisherface:展示具有最大特征值的特征向量还原后的图像,代表了区分度最高的人脸变化模式。
- Global Mean Face:训练集中所有图像的平均值,展示人脸的共性结构。
- 正确识别样本:随机抽取一个分类正确的测试样本,显示其图像及预测标签。
- 误判样本(若有):随机抽取一个分类错误的样本,显示其真实标签与错误预测的标签,便于分析算法弱点。