我们给的图像表达的问题在于它的高维度性。一个二维的pxq的灰度图像扩展到一个m=pq维的向量空间,所以对一个100X100像素的图像来说,已经有一个10000维的图像空间了。这对于任何计算来说都是太多了,但是所有的维度对我们来说都是有用的吗?只有在数据上有一些变化时,我们才能做出决定。所以我们要寻找的是占最多信息的部分。Karl Pearson于1901年独立地提出主元素分析(Principal Component Analysis),Harold Hotelling将一个可能的相关变量集合降到一个更小的不相关变量的集合。高维的数据集经常描述为相关变量,因此只有一些有意义的维度占据了信息的绝大大部分。PCA方法寻找数据中方差最大的方向,称为主元素。
算法描述:
假设
X={x1,x2,...,xn}
是一个随机变量,
xi∈Rd
以下每个人脸图像对应一个
X
中的一列。
- 计算均值
μ=1n∑i=1nx2i
以下图像为上述25张图像的平均值,也就是平均脸。
计算协方差矩阵 S
S=1n∑i=1n(xi−μ)(xi−μ)T 计算 S 的特征值
λi 和特征向量 νiSνi=λiνi,i=1,2,...,n- 根据他们的特征值将特征向量递减排序。
k
个主成分即为对应着
k 个最大的特征值的特征向量。 然后,向量 x 的
k 个主成分通过以下式子给出:y=WT(x−μ),其中 W=(ν1,ν2,...,νk) . 从PCA基进行重建由下式给出:x=Wy+μ
我们来推导一下这个关系,对 y=WT(x−μ) 两侧同乘以 (WT)−1 即为 (WT)−1y=x−μ ,将 μ 移到右侧,即得x=(WT)−1y+μ
因为 W 是S 的特征向量组成的矩阵,因为特征向量是正交的,所以矩阵 W 是正交矩阵。因为正交矩阵的转置等于正交矩阵的逆,即WT=W−1 ,得 (WT)−1=W 。(注:此处的证明不确定是正确的)
特征脸方法通过以下步骤进行人脸识别:
1. 将所有的训练图像数据映射到PCA子空间。
2. 将查询图像数据映射到PCA子空间。
3. 在映射的训练图像和查询图像之间找到最近的一个。
至此仍然有一个问题没有解决。假设我给出了400副图像,每副图像的大小为100X100像素。主元素分析要求解协方差矩阵 S=XXT ,其中在我们的例子中 size(X)=10000×400 。你需要处理 10000×10000 的矩阵,大约为 0.8GB 。很显然这是不可行的,所以我们用了一些小伎俩。从线性代数中我们知道一个 M×N 的矩阵,其中 M>N ,只有 N−1 个非零特征值。所以可以对 S=XTX 替代 S=XTX 进行特征值分解:XTXνi=λiνi
对上式左乘一个矩阵X得到 S=XTX 的初始特征向量:XXT(Xνi)=λi(Xνi)
生成的特征向量是正交的,为了得到正交特征向量他们需要被归一化到单位长度。