博舍

人脸识别学习总结 人脸识别的好处与坏处作文怎么写

人脸识别学习总结

  对人脸识别算法进行了一定程度的学习,从最开始的特征脸到如今的CNN人脸检测,有了较为全面的了解。重点掌握了基于PCA的特征脸检测,LDA线性判别分析(Fisher线性判别),以及基于级联器的Haar特征,LBP特征的人脸检测算法,人脸检测的学习主要是基于OpenCV中人脸识别类FaceRecognizer的学习。目前支持的算法有:

       Eigenface特征脸   createEigenFaceRecognizer()       Fisherface             createFisherFaceRecognizer()      LBP局部二值直方图    createLBPHFaceRecognizer()

1、Eigenface特征脸(掌握PCA数学原理,人脸识别步骤)

    特征脸EigenFace:就相当于把人脸从像素空间变换到另一个空间,在另一个空间中做相似性的计算。EigenFace选择的空间变换方法是PCA,也就是大名鼎鼎的主成分分析。EigenFace方法利用PCA得到人脸分布的主要成分,具体实现是对训练集中所有人脸图像的协方差矩阵进行特征值分解,得到对应的特征向量,这些特征向量就是“特征脸”。

1)将训练集的每一个人脸图像都拉长一列,将他们组合在一起形成一个大矩阵A。假设每个人脸图像是MxM大小,那么拉成一列后每个人脸样本的维度就是N=MxM大小了。假设有20个人脸图像,那么样本矩阵A的维度就是20xN了。                 

2)将所有的20个人脸求每一列的平均值,就得到了一个“平均脸”,这个“平均脸”矩阵E是一个1xN的向量,将这个向量reshape成MxM矩阵,你就可以把这个脸显示出来。                  

3)将20个图像都减去那个平均脸图像(即矩阵A的每一行减去向量E),得到差值图像的数据矩阵Φ,矩阵Φ的维度也是20xN。

4)计算协方差矩阵 。协方差矩阵C的维度是NxN,(注意:协方差衡量的是不同像素位置间的相关性,并不是图像与图像之间的相关性)再对其进行特征值分解。就可以得到想要的特征向量(1xN)。这些特征向量如果还原成像素排列的话,其实还蛮像人脸的,所以称之为特征脸。我们可以取前40个特征向量,作为特征脸。            

5)将训练集图像和测试集的图像都投影到这些特征向量上了,再对测试集的每个图像找到训练集中的最近邻或者k近邻等处理,进行分类即可。

实现步骤:

1、读取训练样本    注意一定要读取灰度图,并且转换成CV_32FC1

2、求特征向量(特征脸)

intnumber_principal_compent=10;//保留最大的主成分数(特征向量数)//构造pca数据结构PCApca(database,Mat(),CV_PCA_DATA_AS_ROW,number_principal_compent);Mateigenvectors=pca.eigenvectors.clone();

3、求出每个训练样本和测试样本在子空间中的投影系数Matcv=pca.project(database);//输入database(m个样本)m*n,m张图像,返回cv是一个m*number_principal_compent的向量Mattest=pca.project(testimage);//testimage是输入一张人脸图像:1*n,返回test是一个1*number_principal_compent的向量,每个值代表该输入图像在每个特征脸上投影的系数。

4、计算每个训练样本和测试样本的欧式距离,取其中最小的为识别图片。

vectordistancefor(inti=0;i

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇