基于 K-L 变换的 MATLAB 人脸识别系统
本项目是一个在 MATLAB 环境下运行的人脸识别系统,核心算法采用 Karhunen-Loève(K-L)变换。该算法在统计学中被称为主成分分析(PCA),通过将原始的人脸图像数据投影到低维的特征子空间(即“特征脸”空间)中,提取出最具代表性的图像特征,从而实现对目标身份的自动识别。
本系统不仅包含了核心的识别逻辑,还内置了模拟人脸数据的生成机制,使其在没有外部图像库的情况下也能独立运行,非常适合作为模式识别、数字图像处理及算法研究的教学或开发原型。
功能特性
- 自动数据生成:内置模拟数据库生成功能,能够快速构建包含随机干扰、位移和噪点的多类别训练及测试样本集。
- 高效降维计算:针对高维图像数据,采用了 A'A 技巧优化协方差矩阵的特征向量计算,显著降低了多样本情况下的运算压力。
- 精确特征提取:利用 K-L 变换提取前 N 个主成分,生成能够代表样本全局特征的“特征脸”模板库。
- 实时匹配与评估:基于欧氏距离度量测试样本与模板库之间的相似度,并提供直观的匹配状态结果。
- 多维度可视化方案:系统提供完整的可视化界面,展示平均脸、主要特征脸、待测图像与识别匹配图像的对比。
使用方法
- 启动系统:在 MATLAB 环境中打开程序文件夹,运行主程序脚本。
- 自动生成数据:系统首次运行时会自动在当前路径下创建临时人脸数据库文件夹。
- 执行训练:脚本将自动读取生成的训练图像,完成灰度化、归一化、均值消除以及特征空间构建。
- 随机测试:系统会从测试集中随机抽取一张人脸,将其投影到特征空间并与训练库进行匹配。
- 查看结果:计算完成后,MATLAB 绘图窗口将展示识别的详细过程及成功/失败的状态,控制台同步输出具体的距离分值。
系统要求
- MATLAB 版本:建议 R2016b 及以上版本。
- 工具箱需求:需要安装 Image Processing Toolbox(图像处理工具箱)。
- 存储空间:运行过程中会生成少量的临时图像文件用于模拟测试。
详细功能逻辑描述
本系统的运行逻辑完全集成于主脚本中,具体分为以下五个关键模块:
- 模拟环境初始化:
系统首先定义图像尺寸(默认 64x64)、人数(5人)及每人的样本分布(7张训练,3张测试)。若检测到本地无预置数据库,程序将利用几何掩码(模拟面部椭圆)配合随机生成的亮度偏差和噪点,模拟真实的人脸拍摄差异,并将其按照类别存储。
- 图像预处理与向量化:
程序遍历数据库,将所有训练图像转换为灰度图并统一缩放。随后,图像被拉伸为列向量并整合进一个大型矩阵。通过计算所有样本的平均向量(平均脸)并将其从原始数据中扣除,实现数据的零均值化处理,这是 K-L 变换的关键前置步骤。
- K-L 变换与特征空间构建:
系统不直接对庞大的协方差矩阵 AA' 求特征值,而是计算规模更小的 A'A 的特征值和特征向量(N x N 规模,N为样本数)。通过这种数学技巧,将得到的特征向量映射回原始高维空间,生成“特征脸”。系统选取能量最高的 20 个主成分构成降维矩阵,并将所有训练样本投影到该低维空间内。
- 自动识别匹配:
系统随机从模拟库的测试组中抽取图片。首先对其进行相同的预处理和均值扣除,然后将其投影到由训练集建立的特征子空间中。通过计算测试向量与库中所有已知向量之间的欧氏距离,寻找最接近的邻居。
- 结果展示与打印:
识别结果通过图形界面直观呈现,包括平均脸的视觉效果、前三个主要特征脸的纹理。界面右侧会显示测试图与被识别出的训练图。若识别结果与真实标签一致,界面显示绿色成功标志;否则显示红色失败标志,并同步显示具体的匹配距离分值。
关键过程分析
- 平均脸(Mean Face):代表了训练集中所有人脸的共有特征,是进行 K-L 变换的基准线。
- 特征脸(Eigenfaces):是特征空间的一组基向量,看起来像是模糊且具有轮廓感的幽灵脸,每一张特征脸都捕捉了人脸库中不同维度的变化(如光照、轮廓宽度等)。
- 特征维度(k_dims):决定了系统的压缩效率与识别精度。本系统默认使用 20 维,能够在极大减少数据量的同时保持高识别率。
- 欧氏距离(Euclidean Distance):作为相似度度量的标准,距离越小代表两张人脸在特征层面上越接近。