特征脸(Eigenface)是指用于机器视觉领域中的人脸识别问题的一组特征向量。使用特征脸进行人脸识别的方法首先由Sirovich and Kirby (1987)提出,并由Matthew Turk和Alex Pentland用于人脸分类。该方法被认为是第一种有效的人脸识别方法。这些特征向量是从高维矢量空间的人脸图像的协方差矩阵计算而来。
一组特征脸 可以通过在一大组描述不同人脸的图像上进行主成分分析(PCA)获得。任意一张人脸图像都可以被认为是这些标准脸的组合。例如,一张人脸图像可能是特征脸1的10%,加上特征脸2的55%,在减去特征脸3的3%。值得注意的是,它不需要太多的特征脸来获得大多数脸的近似组合。另外,由于人脸是通过一系列向量(每个特征脸一个比例值)而不是数字图像进行保存,可以节省很多存储空间。
以下是特征脸的实现过程:
这些特征脸现在可以用于标识已有的和新的人脸:我们可以将一个新的人脸图像(先要减去均值图像)投影到特征脸上,以此来记录这个图像与平均图像的偏差。每一个特征向量的特征值代表了训练集合的图像与均值图像在该方向上的偏差有多大。将图像投影到特征向量的子集上可能丢失信息,但是通过保留那些具有较大特征值的特征向量的方法可以减少这个损失。例如,如果当前处理一个100 x 100的图像,就会得到10000个特征向量。在实际使用中,大多数的图像可以投影到100到150个特征向量上进行识别,因此,10000个特征向量的绝大多数可以丢弃。
直接在图像的协方差矩阵上进行PCA计算在计算量上是不可行的。如果图像比较小,如100 × 100的灰度图像,则每个图像是一个10000维空间的一个点,协方差矩阵 S 则具有10,000 × 10,000 = 108个元素。然而,协方差矩阵的秩受到训练图像的限制:如果有 个训练样本,则最多有 − 1 个对应非零特征值的特征向量。如果训练样本的数目比图像的维数低,则可以通过如下方法简化主成分的计算。
设 T 是预处理图像的矩阵,每一列对应一个减去均值图像之后的图像。则,协方差矩阵为 S = TTT ,并且对 S 的特征值分解为
然而, TTT 是一个非常大的矩阵。因此,如果转而使用如下的特征值分解
此时,我们发现如果在等式两边乘以T,可得到
这就意味着,如果 ui 是 TTT的一个特征向量,则 vi = Tui 是 S 的一个特征向量。假设我们的训练集有300张100 × 100像素的图像,则 TTT 是一个300 × 300的矩阵,这就比原先的 10,000 × 10,000 协方差矩阵要容易处理许多。需要注意的是,上面的特征向量 vi 没有进行归一化,如果需要,应该在后面在进行处理。
特征脸的最直接的应用就是人脸识别。在这个需求下,特征脸相比其他手段在效率方面比较有优势,因为特征脸的计算速度非常快,短时间就可以处理大量人脸。但是,特征脸在实际使用时有个问题,就是在不同的光照条件和成像角度时,会导致识别率大幅下降。因此,使用特征脸需限制使用者在统一的光照条件下使用正面图像进行识别。