PCA主元分析法人脸识别概述性小结
来源:互联网 发布:软件成果报告 编辑:程序博客网 时间:2024/04/28 20:47
下面具体来说PCA算法在人脸识别中的算法流程,前提:有一个训练图集,里面放着同一个人的脸(对齐过的),并且每张图长宽的像素点都相同(比如160*120);有一个测试图集,里面放着待测图像,待测图像的长宽像素点与训练图集一样。
PCA的算法流程是:
一、训练流程
S1:构筑训练图像矩阵:将每一张人脸图张开成一维行向量(也可以是列向量,但以下的计算都是用行向量),训练集中所有图像组成一个训练图像矩阵,每一个行向量代表一张图。
S2:计算平均脸、协方差矩阵:平均脸就是将所有的行向量求平均得到的一个平均的行向量,将每张脸向量按下面公式计算得到协方差矩阵。
S3:计算协方差矩阵的特征值与特征向量,取前r大的特征值对应的特征向量构成r维特征空间,r<min(训练图集中图张数,每张图的像素点数)。为了使得r维特征空间更加具有代表性且更加的小,我们应该考虑特征值的变化情况,取更大的特征值,比如下面这种情况,我们取r=10即可以。
S4:按照下面公式将训练图集矩阵的每个行向量向特征空间投影,为每一张图得到投影后的r维向量,这就是降维后的每张图的特征向量了。
二、识别流程:
S1:保留训练流程中的平均脸与特征空间。
S2:构筑测试图像矩阵,与训练流程中的一样。
S3:将测试图像矩阵中的每一行按照训练流程s4中的公式向特征空间投影,得到每张图像矩阵的特征向量。
S4:根据投影后的特征向量与特征空间重建图像,计算原图像与重建后的图像间的距离。
S5:判断是否是人脸:设定阈值,如果原图像与重建后的图像间的距离小于阈值,则判断为人脸,继续s6,否则判否,识别结束。
S6:识别是否是特定人:设定阈值,并计算测试图像特征向量与所有训练图像特征向量间的欧氏距离,取最小的距离,如果最小距离小于阈值,则识别接受,否者就拒绝接受。
正如题目所示,这篇文章只是概述性的小结,说的很简单,以功能与算法流程为主,很多原理与细节没有展开,要想深入了解的,可以参考下面的文献:
关于PCA算法原理理解的:
《Eigenfaces for Recognition》——本文的公式都来自本论文,并没有仔细标明,具体参考这篇论文。
《基于PCA针对表情变化的人脸识别技术研究》
http://leen2010.blogbus.com/logs/124631640.html
用OPENCV编程实现PCA算法的:
http://apps.hi.baidu.com/share/detail/34585074
附:
OPENCV中的PCA使用(转)
对于PCA,一直都是有个概念,没有实际使用过,今天终于实际使用了一把,发现PCA还是挺神奇的。
在OPENCV中使用PCA非常简单,只要几条语句就可以了。
1、初始化数据
//每一行表示一个样本
CvMat* pData = cvCreateMat( 总的样本数, 每个样本的维数, CV_32FC1 );
CvMat* pMean = cvCreateMat(1, 样本的维数, CV_32FC1);
//pEigVals中的每个数表示一个特征值
CvMat* pEigVals = cvCreateMat(1, min(总的样本数,样本的维数), CV_32FC1);
//每一行表示一个特征向量
CvMat* pEigVecs = cvCreateMat( min(总的样本数,样本的维数), 样本的维数, CV_32FC1);
2、PCA处理,计算出平均向量pMean,特征值pEigVals和特征向量pEigVecs
cvCalcPCA( pData, pMean, pEigVals, pEigVecs, CV_PCA_DATA_AS_ROW );
3、选出前P个特征向量(主成份),然后投影,结果保存在pResult中,pResult中包含了P个系数
CvMat* pResult = cvCreateMat( 总的样本数, PCA变换后的样本维数(即主成份的数目), CV_32FC1 );
cvProjectPCA( pData, pMean, pEigVecs, pResult );
4、 重构,结果保存在pRecon中
CvMat* pRecon = cvCreateMat( 总的样本数, 每个样本的维数, CV_32FC1 );
cvBackProjectPCA( pResult, pMean, pEigVecs, pRecon );
5、重构误差的计算
计算pRecon和pData的"差"就可以了.
使用时如果是想用PCA判断“是非”问题,则可以先用正样本计算主成分,判断时,对需要判断得数据进行投影,然后重构,计算重构出的数据与原数据的差异,如果差异在给定范围内,可以认为“是”。
如果相用PCA进行分类,例如对数字进行分类,则先用所有数据(0-9的所有样本)计算主成分,然后对每一类数据进行投影,计算投影的系数,可简单得求平均。即对每一类求出平均系数。分类时,将需要分类得数据进行投影,得到系数,与先前计算出得每一类得平均系数进行比较,可判为最接近得一类。当然这只是最简单得使用方法
- PCA主元分析法人脸识别概述性小结
- PCA主元分析法人脸识别概述性小结
- PCA主元分析法人脸识别概述性小结
- **PCA主元分析法小结(人脸识别概述性)
- PCA主成分分析人脸识别
- 基于MATLAB,运用PCA+SVM的特征脸方法人脸识别
- PCA(主分量分析)在人脸识别中的应用
- PCA(主分量分析)在人脸识别中的应用
- 基于PCA(主成分分析)的人脸识别
- 基于PCA(主成分分析)的人脸识别
- 主元分析(PCA)原理
- 主元分析PCA原理以及应用
- 主元分析(PCA)原理
- Principal components analysis(PCA):主元分析
- 主元分析法PCA学习笔记
- 主元分析(PCA)原理
- 主成分分析(PCA)与图像识别
- PCA算法人脸识别小结--原理到实现
- Jailer智能型数据提取工具
- 算法评测
- DM365 linux kernel 移植总结
- Oracle 软件的美学变迁
- Unbound classpath variable: 'ANT_HOME/lib/ant.jar' in project 'XXX'
- PCA主元分析法人脸识别概述性小结
- 临时笔记
- java面试笔试题大汇总
- 随便扔
- 使用备用磁盘安装在LPAR上安装AIX
- 细心才是关键
- 一步步学Qt,第九天-Q"STL"与STL-Qvector,vector
- sep4020上完成了i2s的驱动
- C++的static关键字