人脸识别算法之pca 主成分分析法

    完整的人脸匹配过程,我们大致可以分为以下几个步骤:(1)检测每张图片中的人脸,即人脸检测。(2)对每张图片中的人脸进行特征向量的提取,以特征向量组成的矩阵来表示图像。(3)对查询的图片做相同的操作,即进行人脸检测和特征向量提取。(4)将得到的查询图片的特向量与图像库中的每个特征向量进行相似度的计算。返回图像库中与查询图片相似度最高的图片。今天要讲的主要就是这几个步骤中的第二、三步,我们利用主成分分析法来进行特征向量的提取。

    主成分分析法,以下简称pca,主要目的是降维,用降维来去除杂质,减少变量个数,同时确保这些变量之间的独立性,从而增加变量的代表性和变量之间的区分度。具体到我们的图片这里,我们可以认为图像

    pca算法的主要步骤有以下几步:

    (1)特征中心化。即矩阵A中每一维都减去该维的平均值,得到矩阵B。

    (2)计算矩阵B的协方差矩阵C。

    (3)求出矩阵c的特征向量和特征值。

    (4)对特征向量按照特征值的大小进行降序排序,选出前k个特征向量,组成新的矩阵。这个矩阵便是我们的投影矩阵。我们将图片投影到这个矩阵上,即可得到降到k维后的数据,这个数据,便是我们要提取的人脸特征向量。

    下面我们以m张30*40的图片为作为图像库来举例:首先我们将30*40的图片平铺,m张图偏形成一个m*1200的矩阵A。之后我们对矩阵的每一行对减去该行的均值得到矩阵B。并对其求协方差矩阵得到C。调用opencv函数eigen()函数求出协方差矩阵的特征值和特征向量。对特征值进行降序排序,取前k个特征向量组成矩阵D,将A投影在矩阵D之后,得到m*k的矩阵。每一行即为对应图片的特征向量。对于测试图片,我们同样首先平铺,得到1*1200的矩阵,并将测试图片对应的矩阵投影到特征向量矩阵D中,即可得到测试图片的人脸特征向量。之后我们采用一定的计算方法,如欧氏距离、余弦相似度、naive查询处理算法、KD-Tree查询处理算法等,即可计算得到两张人脸的相似度。

    ps:基于pca的主成分分析法的人脸识别,经过实验之后,发现效果并不是特别好。它主要的思想是将多维的图片中提取影响最大的几个维度,用这几个维度来表示图片,去除无关紧要的因素,也就是说若图片中光照变化成为了主要元素,成为特征矩阵的一个维度的话,则光照的变化也会影响特征向量之间的距离,也就是说同样的人脸,在不同的光照下,通过pca提取出的人脸向量之间的距离也会很大,这显然与我们的理想情况相违,实质上这种方法鉴别的还是两张图片的相似度,并非正真的人脸相似度,同样道理的还有opencv中提供的Fisher脸,LBPH识别方法,真正要提取到人脸的特征,应该要使用其他的方法。


参考资料:《刷脸背后》 张重生著

展开阅读全文

没有更多推荐了,返回首页