OpenCV人脸识别之Eigenface算法(PCA特征脸方法)

Eigenface

Eigenfaces就是特征脸的意思,是一种从主成分分析(Principal Component AnalysisPCA)中导出的人脸识别和描述技术。特征脸方法的主要思路就是将输入的人脸图像看作一个个矩阵,通过在人脸空间中一组正交向量,并选择最重要的正交向量,作为主成分来描述原来的人脸空间。

1.特征脸训练与识别原理图

OpenCV人脸识别之Eigenface算法(PCA特征脸方法)_第1张图片

2.PCA主要过程

在很多应用中需要对大量数据进行分析计算并寻找其内在的规律,但是数据量巨大造成了问题分析的复杂性,因此我们需要一些合理的方法来减少分析的数据和变量同时尽量不破坏数据之间的关联性。于是这就有了主成分分析方法,PCA作用:

  • 数据降维。减少变量个数;确保变量独立;提供一个合理的框架解释。
  • 去除噪声,发现数据背后的固有模式。

PCA的主要过程:

  1. 特征中心化:将每一维的数据(矩阵A)都减去该维的均值,使得变换后(矩阵B)每一维均值为0
  2. 计算变换后矩阵B的协方差矩阵C
  3. 计算协方差矩阵C的特征值和特征向量;
  4. 选取大的特征值对应的特征向量作为主成分,并构成新的数据集

3.特征脸方法

特征脸方法就是将PCA方法应用到人脸识别中,将人脸图像看成是原始数据集,使用PCA方法对其进行处理和降维,得到主成分”——即特征脸,然后每个人脸都可以用特征脸的组合进行表示。这种方法的核心思路是认为同一类事物必然存在相同特性(主成分),通过将同一目标(人脸图像)的特性寻在出来,就可以用来区分不同的事物了。人脸识别嘛,就是一个分类的问题,将不同的人脸区分开来。

特征脸方法的实现步骤:

  1. 获取包含M张人脸图像的集合T。假设这里使用15张图片来作为人脸训练图像,每张图片的尺寸是100*150,所以这里M=15。我们把导入的图像拉平,本来,100*150的矩阵,拉平就是一个15000*1的矩阵,然后M张放在一个大矩阵下,该矩阵为15000*15
  2. 计算平均图像A,并获得偏差矩阵B,为15000*15平均图像也就是把每一行的15个元素平均计算,这样最后的平均图像就是一个我们所谓的大众脸。然后每张人脸都减去这个平均图像,最后得到:

                                                                               

                                                                                        

3.求得的方差矩阵。并计算的特征值和特征向量。这就是标准的PCA算法流程。很大的问题就是协方差矩阵的维度会大到无法计算,下面的方法可以解决:

K是预处理图像的矩阵,每一列对应一个减去均值图像之后的图像。则协方差矩阵为S=K

,并且对S的特征值分解 :

                                                                                   

 

然而KKT是一个非常大的矩阵。因此,如果转而使用如下的特征值分解:

                                                                                      

  等式两边同时乘以K得到:

                                                                                    

这就意味着,如果UiKKT的一个特征向量,则Vi=TUiS的一个特征向量,反正到最后我们得KKT的一个特征向量,再用K与之相乘就是协方差矩阵的特征向量μ。而此时求得特征向量是15000*15的矩阵,每一行(15000*1)如果变成图像大小矩阵(100*150)的话,都可以看做是一个新人脸,被称为特征脸。

4.主成分分析。在求得的特征向量和特征值中,越大的特征值对于我们区分越重要,也就是主成分,只需要那些大的特征值对应的特征向量,而那些十分小甚至为0的特征值来说,对应的特征向量几乎没有意义。在这里通过一个阈值selecthr来控制,当排序后的特征值的一部分相加大于该阈值,选择这部分特征值对应的特征向量,此时剩下的矩阵15000*MM根据情况而变。这样不仅减少计算量,而且保留了主成分,减少了噪声的干扰。

5.人脸识别。此时导入一个新的人脸,使用上面主成分分析后得到的特征向量μ,来求得一个每一个特征向量对于导入人脸的权重向量Ω

                                                                               '

                                                                                         

这里的A就是第二步求得的平均图像,特征向量其实就是训练集合的图像与均值图像在该方向上的偏差,通过未知人脸在特征向量的投影,我们就可以知道未知人脸与平均图像在不同方向上的差距。此时我们用上面第2步求得的偏差矩阵的每一行做这样的处理,每一行会得到一个权重向量。利用求得ΩΩk的欧式距离来判断未知人脸与第K张训练人脸之间的差距

                                                                                            

你可能感兴趣的:(人脸识别算法原理,人脸识别,算法,opencv)