1.eigenfaces 算法原理
本科毕业设计我做过遗落物检测,老实说对于从没有接触过图像处理的我着实很懵逼,但是知识是一步一步学习的,言归正传,讲讲现在开始学习的基于opencv的第一个人脸识别算法,如果有理解错误的地方,欢迎大佬们指出。egienfaces的基本原理是空间的变换,以图像像素点为原始维度单位(如320*240的图,其维度为76800*1),试图找到一种变换将其进行降维处理,以达到在目标空间里,每种人脸能得到最好的区分。
2.eigenfaces 算法流程
输入:包含M张人脸图像的集合S。每张图片用I1,I2,I3,…IM表示。假设每张图片大小为40*60,那么该图片的维度为2400维。将每张图片的行像素排为一列用Tk。
表示有N*N维
组合后为N维,因为是一行为一个向量单位,所以是N行。
- 计算平均脸,计算公式如下:
2.计算每张图片与平均脸的差值向量,用Φ表示
3.计算协方差矩阵C,计算对应的特征值和特征向量,这一步为整个算法的关键步骤,涉及很多数学知识,有兴趣的可以看一下http://blog.csdn.net/xiaojidan2011/article/details/11595869该博客的文章,讲的很详细,由于公式很难编辑,我简单的编辑一下希望能看懂。矩阵A表示差值Φ向量的集合矩阵,表示M张图片的每个像素与均值的差值矩阵,用数学表示式表示为 ,它是一个N*M维的矩阵,而他的转置AT 则是M*N维的矩阵。
AAT的乘积斜对角线为方差,其余为协方差,相乘以后一个N*N维的矩阵,假如一张图片维数为20*20,那么N*N为160000,计算量太大。数据冗余,因为每个像素的的值可能存在相关性。这里就提及到使用PCA降维方法进行降维。
PCA方法的原理:PCA(Principal Component Analysis)是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。
而计算AAT的特征值采用的方法是转而计算ATA的特征值,计算的方法就借用别人的吧,希望看的懂,手写的太难看了。ei表示特征向量,λ表示特征值。C表示原数据集S,C’表示ATA。
4.对特征值进行递减排序,特征向量和它顺序一致. K个主成分也就是K个最大的特征值对应的特征向量。特征向量x的k个主成分表示为:
当新来一张图片时,将其投影到特征空间,即特征向量组成的矩阵WT,数学表达式为
PCA基的重构为:T = WY +φ,相当于在低维的空间进行图像的重构
5.人脸识别,通过欧式距离判定
Opencv自带的程序实现测试的结果,功能分为三部分:第一,训练人脸模型;第二,画出特征脸;第三,得到平均脸,能初步的描述算法分类的准确性。
特征脸:
下面两张是重构脸与平均脸
具体实现下次再说吧。