特征脸

人臉識別問題的一組特徵向量

特征脸(Eigenface)是指用于机器视觉领域中的人脸识别问题的一组特征向量。使用特征脸进行人脸识别的方法首先由Sirovich and Kirby (1987)提出,并由Matthew TurkAlex Pentland用于人脸分类。该方法被认为是第一种有效的人脸识别方法[來源請求]。这些特征向量是从高维矢量空间的人脸图像的协方差矩阵计算而来。

来自 AT&T Laboratories 剑桥

生成特征脸

一组特征脸 可以通过在一大组描述不同人脸的图像上进行主成分分析(PCA)获得。任意一张人脸图像都可以被认为是这些标准脸的组合。例如,一张人脸图像可能是特征脸1的10%,加上特征脸2的55%,再减去特征脸3的3%。值得注意的是,它不需要太多的特征脸来获得大多数脸的近似组合。另外,由于人脸是通过一系列向量(每个特征脸一个比例值)而不是数字图像进行保存,可以节省很多存储空间。

实现

以下是特征脸的实现过程:

  1. 准备一个训练集的人脸图像。构成训练集的图片需要在相同的照明条件下拍摄的,并将所有图像的眼睛和嘴对齊。他们还必须在预处理阶段就重采样到一个共同的像素分辨率R×C)。现在,简单地将原始图像的每一行的像素串联在一起,产生一个具有R×C个元素的行向量,每个图像被视为一个向量。现在,假定所有的训练集的图像被存储在一个单一的矩阵T中,矩阵的每一列是一个图像。
  2. 减去均值向量. 均值向量a要首先计算,并且T中的每一个图像都要减掉均值向量。
  3. 计算协方差矩阵S特征值特征向量。每一个特征向量的维数与原始图像的一致,因此可以被看作是一个图像。因此这些向量被称作特征脸。他们代表了图像与均值图像差别的不同方向。通常来说,这个过程的计算代价很高(如果可以计算的话)。
  4. 选择主成份。一个D x D的协方差矩阵会产生D个特征向量,每一个对应R × c图像空间中的一个方向。具有较大特征值的特征向量会被保留下来,一般选择最大的N个,或者按照特征值的比例进行保存,如保留前95%。

这些特征脸现在可以用于标识已有的和新的人脸:我们可以将一个新的人脸图像(先要减去均值图像)投影到特征脸上,以此来记录这个图像与平均图像的偏差。每一个特征向量的特征值代表了训练集合的图像与均值图像在该方向上的偏差有多大。将图像投影到特征向量的子集上可能丢失信息,但是通过保留那些具有较大特征值的特征向量的方法可以减少这个损失。例如,如果当前处理一个100 x 100的图像,就会得到10000个特征向量。在实际使用中,大多数的图像可以投影到100到150个特征向量上进行识别,因此,10000个特征向量的绝大多数可以丢弃。

计算特征向量

直接在图像的协方差矩阵上进行PCA计算在计算量上是不可行的。如果图像比较小,如100 × 100的灰度图像,则每个图像是一个10000维空间的一个点,协方差矩阵 S 则具有10,000 × 10,000 = 108个元素。然而,协方差矩阵的受到训练图像的限制:如果有 N 个训练样本,则最多有 N − 1 个对应非零特征值的特征向量。如果训练样本的数目比图像的维数低,则可以通过如下方法简化主成份的计算。

T 是预处理图像的矩阵,每一列对应一个减去均值图像之后的图像。则,协方差矩阵为 S = TTT ,并且对 S 的特征值分解为

 

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

 

此时,我们发现如果在等式两边乘以T,可得到

 

这就意味着,如果 uiTTT的一个特征向量,则 vi = TuiS 的一个特征向量。假设我们的训练集有300张100 × 100像素的图像,则 TTT 是一个300 × 300的矩阵,这就比原先的 10,000 × 10,000 协方差矩阵要容易处理许多。需要注意的是,上面的特征向量 vi 没有进行归一化,如果需要,应该在后面在进行处理。

在人脸识别中的应用

特征脸的最直接的应用就是人脸识别。在这个需求下,特征脸相比其他手段在效率方面比较有优势,因為特征脸的计算速度非常快,短时间就可以处理大量人脸。但是,特征脸在实际使用时有个问题,就是在不同的光照条件和成像角度时,会导致识别率大幅下降。因此,使用特徵臉需限制使用者在统一的光照条件下使用正面图像进行识别。

相关领域

参考文献

外部链接