3.7 实验:基于PCA的特征脸提取
3.7.1 实验目的
(1)了解使用PyCharm作为开发环境的基本使用方法。
(2)了解基于PCA的特征脸提取的基本原理。
(3)使用PCA算法获取特征脸并重构人脸。
(4)运行程序,看到结果。
3.7.2 实验要求
(1)了解PyCharm的工作原理。
(2)了解特征脸的基本结构和功能。
(3)了解使用基于PCA进行特征脸提取的基本流程。
(4)理解PyCharm中的相关源码。
3.7.3 实验原理
PyCharm是由JetBrains打造的一款Python IDE,同时支持Google App Engine、IronPython。这些功能在先进代码分析程序的支持下,使PyCharm成为Python专业开发人员和刚起步人员使用的有力工具。PyCharm拥有一般IDE具备的功能,如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。PyCharm还提供了一些用于Django开发的很好的功能。
特征脸(Eigenface)是指用于机器视觉领域中的人脸识别问题的一组特征向量。使用特征脸进行人脸识别的方法首先由Sirovich和Kirby提出,并由Matthew Turk和Alex Pentland用于人脸分类。该方法被认为是第一种有效的人脸识别方法。这些特征向量是从高维矢量空间的人脸图像的协方差矩阵计算而来的。
一组特征脸可以通过在一大组描述不同人脸的图像上进行主成分分析(PCA)获得。任意一张人脸图像都可以被认为是这些标准脸的组合。例如,一张人脸图像可能是特征脸1的10%,加上特征脸2的55%,再减去特征脸3的3%。值得注意的是,它不需要太多的特征脸来获得大多数脸的近似组合。
PyCharm的操作界面如图3-4所示。
图3-4 PyCharm的操作界面
3.7.4 实验步骤
本实验环境:Windows10操作系统、Python语言、PyCharm开发环境。
(1)准备一系列的人脸图像作为训练集,所有的人脸图像需要有相同的像素分辨率(R×C),如图3-5所示训练集中的6张人脸图像。简单地将原始图像每一行的像素串联在一起,产生一个具有R×C个元素的行向量。将所有训练集的图像存储在一个矩阵data中,矩阵的每一行是一个图像。
(2)对人脸图像矩阵data进行PCA处理,具体步骤包括对所有人脸图像取平均得到平均脸mu,所有人脸图像减去平均脸得到差值矩阵ma_data,对差值矩阵做SVD处理就得到了特征脸e_faces,最后差值矩阵ma_data和特征脸e_faces相乘得到权重矩阵weights。
图3-5 训练集人脸图像
(3)利用前面得到的特征脸、平均脸和权重矩阵重构人脸图像。
3.7.5 实验结果
运行程序后,在文件夹中能得到特征脸、平均脸、人脸重构后的结果,分别如图3-6、图3-7和图3-8所示。
图3-6 特征脸
图3-6 特征脸(续)
图3-7 平均脸
图3-8 人脸重构后的结果