采用PCA(主成分分析)或LDA(线性判别分析)的人脸识别

来源:互联网 发布:小班美工纸球反思 编辑:程序博客网 时间:2024/04/28 09:44

 

http://blog.csdn.net/raby_gyl/article/details/12623539

 

第八章 采用PCA(主成分分析)或LDA(线性判别分析)的人脸识别(二)

 

 

查看学习的知识


然而并不是必须的,在学习你的训练数据时,观察人脸识别算法产生的内部数据结果是相当有用的,特别地如果你想理解你选择的算法背后的理论,并且想核实它是否工作或者找到为什么他不像你期望的那样工作。对于不同的算法内部数据结构可能不同,但是幸运的是,对于EigenfacesFisherfaces他们是相同的,因此让我们仅看看这两个。这两个都是基于一维特征矢量矩阵,当他们作为二维图像观察时,表现的有点像人脸。因此当使用人脸识别算法,Eigenfaces或者Fisherfaces时,将特征矢量作为特征人脸是很普通的。


在简单的术语中,Eigenfaces的基本原理是,将计算一组特殊图像(特征脸eigenfaces)并且混合比例(特征值),在训练集合中以不同的方式混合可以产生训练图像集中的每一个图像,但是同样可以用于在训练集中区分许多人脸图像。例如:在训练集中的一些人脸带有小胡子,一些没有,那么至少有一个特征脸来表现小胡子。并且带有小胡子的训练人脸应当有一个高的混合比例来表现它带有一个小胡子。并且不带小胡子的人脸对于他们的特征向量有一个低的混合比例。如果一个训练集有5个人,对于每个人有20张人脸,那么在训练集中将会100个特征人脸和特征矢量来区分100全部人脸,并且事实上这些将被排序,因此第一个少量的特征脸和特征矢量将会是最重要的区分器,并且最后一个少量的特征脸和特征矢量仅是随机的像素噪声,对我们区分数据实际上没有帮助。因此很自然的抛弃最后的一些特征并且仅保存前50个左右的特征人脸。


相比较,Fisherfaces的基本原理是,代替计算训练集中每个图像的特征向量和特征值,它只计算每一个人的一个特征向量和特征值,因此在前面的5个人,每人20个人脸的例子中,Eigenfaces算法将使用100特征人脸和特征值,然而Fisherfaces算法将使用仅5个特征人脸和特征值。


 

为了访问EigenfacesFisherfaces算法的内部数据结构,我们使用cv::Algorithm::get()函数在运行时获得他们,因为在编译时,无法访问他们。数据结构作为数学计算的一部分而不是图像处理的一部分来使用。因此他们通常以浮点型数据存储,典型的在0.01.0范围内。而不是从02558uchar类型的像素,在整齐的图像中,类似于像素。他们通常也是一维行或者列矩阵或者组成有很多一维行向量或者列向量的矩阵。因此在显示这些内部数据结构之前,你必须将他们的转换成正确的矩形形状(reshape),把他们转换到0255范围内的8uchar类型像素。因为矩阵数据可能在0.01.0或者-1.01.0或者任何范围之内。你可以使用cv::normalize()函数,带有cv::norm_minmax可选参数,来确保输出的数据在0255之间,而不管输入数据的范围是什么。让我们创建函数来执行到矩形形状转变以及到8bit像素的转换,如下:

 

0 0
原创粉丝点击