特征脸(Eigenfaces)
2016-03-13 19:01
162 查看
我们给的图像表达的问题在于它的高维度性。一个二维的pxq的灰度图像扩展到一个m=pq维的向量空间,所以对一个100X100像素的图像来说,已经有一个10000维的图像空间了。这对于任何计算来说都是太多了,但是所有的维度对我们来说都是有用的吗?只有在数据上有一些变化时,我们才能做出决定。所以我们要寻找的是占最多信息的部分。Karl Pearson于1901年独立地提出主元素分析(Principal Component Analysis),Harold Hotelling将一个可能的相关变量集合降到一个更小的不相关变量的集合。高维的数据集经常描述为相关变量,因此只有一些有意义的维度占据了信息的绝大大部分。PCA方法寻找数据中方差最大的方向,称为主元素。
算法描述:
假设X={x1,x2,...,xn}X=\{x_1,x_2,...,x_n\}是一个随机变量,xi∈Rdx_i \in R^d
以下每个人脸图像对应一个XX中的一列。
计算均值μ=1n∑i=1nx2i\mu=\frac{1}{n}\sum_{i=1}^n x_i^2
以下图像为上述25张图像的平均值,也就是平均脸。
计算协方差矩阵SSS=1n∑i=1n(xi−μ)(xi−μ)TS=\frac{1}{n}\sum_{i=1}^n(x_i-\mu)(x_i-\mu)^T
计算SS的特征值λi\lambda_i和特征向量νi\nu_i Sνi=λiνi,i=1,2,...,nS\nu_i=\lambda_i\nu_i, i=1,2,...,n
根据他们的特征值将特征向量递减排序。kk个主成分即为对应着kk个最大的特征值的特征向量。
然后,向量xx的kk个主成分通过以下式子给出:y=WT(x−μ)y=W^T(x-\mu),其中W=(ν1,ν2,...,νk)W=(\nu_1,\nu_2,...,\nu_k). 从PCA基进行重建由下式给出:x=Wy+μx=Wy+\mu
我们来推导一下这个关系,对y=WT(x−μ)y=W^T(x-\mu)两侧同乘以(WT)−1(W^T)^{-1}即为(WT)−1y=x−μ(W^T)^{-1}y=x-\mu,将μ\mu移到右侧,即得x=(WT)−1y+μx=(W^T)^{-1}y+\mu
因为WW是SS的特征向量组成的矩阵,因为特征向量是正交的,所以矩阵WW是正交矩阵。因为正交矩阵的转置等于正交矩阵的逆,即WT=W−1W^T=W^{-1},得(WT)−1=W(W^T)^{-1}=W。(注:此处的证明不确定是正确的)
特征脸方法通过以下步骤进行人脸识别:
1. 将所有的训练图像数据映射到PCA子空间。
2. 将查询图像数据映射到PCA子空间。
3. 在映射的训练图像和查询图像之间找到最近的一个。
至此仍然有一个问题没有解决。假设我给出了400副图像,每副图像的大小为100X100像素。主元素分析要求解协方差矩阵S=XXTS=XX^T,其中在我们的例子中size(X)=10000×400size(X)=10000\times400。你需要处理10000×1000010000\times10000的矩阵,大约为0.8GB0.8GB。很显然这是不可行的,所以我们用了一些小伎俩。从线性代数中我们知道一个M×NM\times N的矩阵,其中M>NM>N,只有N−1N-1个非零特征值。所以可以对S=XTXS=X^TX替代S=XTXS=X^TX进行特征值分解:XTXνi=λiνiX^TX\nu_i=\lambda_i\nu_i
对上式左乘一个矩阵X得到S=XTXS=X^TX的初始特征向量:XXT(Xνi)=λi(Xνi)XX^T(X\nu_i)=\lambda_i(X\nu_i)
生成的特征向量是正交的,为了得到正交特征向量他们需要被归一化到单位长度。
算法描述:
假设X={x1,x2,...,xn}X=\{x_1,x_2,...,x_n\}是一个随机变量,xi∈Rdx_i \in R^d
以下每个人脸图像对应一个XX中的一列。
计算均值μ=1n∑i=1nx2i\mu=\frac{1}{n}\sum_{i=1}^n x_i^2
以下图像为上述25张图像的平均值,也就是平均脸。
计算协方差矩阵SSS=1n∑i=1n(xi−μ)(xi−μ)TS=\frac{1}{n}\sum_{i=1}^n(x_i-\mu)(x_i-\mu)^T
计算SS的特征值λi\lambda_i和特征向量νi\nu_i Sνi=λiνi,i=1,2,...,nS\nu_i=\lambda_i\nu_i, i=1,2,...,n
根据他们的特征值将特征向量递减排序。kk个主成分即为对应着kk个最大的特征值的特征向量。
然后,向量xx的kk个主成分通过以下式子给出:y=WT(x−μ)y=W^T(x-\mu),其中W=(ν1,ν2,...,νk)W=(\nu_1,\nu_2,...,\nu_k). 从PCA基进行重建由下式给出:x=Wy+μx=Wy+\mu
我们来推导一下这个关系,对y=WT(x−μ)y=W^T(x-\mu)两侧同乘以(WT)−1(W^T)^{-1}即为(WT)−1y=x−μ(W^T)^{-1}y=x-\mu,将μ\mu移到右侧,即得x=(WT)−1y+μx=(W^T)^{-1}y+\mu
因为WW是SS的特征向量组成的矩阵,因为特征向量是正交的,所以矩阵WW是正交矩阵。因为正交矩阵的转置等于正交矩阵的逆,即WT=W−1W^T=W^{-1},得(WT)−1=W(W^T)^{-1}=W。(注:此处的证明不确定是正确的)
特征脸方法通过以下步骤进行人脸识别:
1. 将所有的训练图像数据映射到PCA子空间。
2. 将查询图像数据映射到PCA子空间。
3. 在映射的训练图像和查询图像之间找到最近的一个。
至此仍然有一个问题没有解决。假设我给出了400副图像,每副图像的大小为100X100像素。主元素分析要求解协方差矩阵S=XXTS=XX^T,其中在我们的例子中size(X)=10000×400size(X)=10000\times400。你需要处理10000×1000010000\times10000的矩阵,大约为0.8GB0.8GB。很显然这是不可行的,所以我们用了一些小伎俩。从线性代数中我们知道一个M×NM\times N的矩阵,其中M>NM>N,只有N−1N-1个非零特征值。所以可以对S=XTXS=X^TX替代S=XTXS=X^TX进行特征值分解:XTXνi=λiνiX^TX\nu_i=\lambda_i\nu_i
对上式左乘一个矩阵X得到S=XTXS=X^TX的初始特征向量:XXT(Xνi)=λi(Xνi)XX^T(X\nu_i)=\lambda_i(X\nu_i)
生成的特征向量是正交的,为了得到正交特征向量他们需要被归一化到单位长度。
相关文章推荐
- java 二进制I/O
- 年轻就需要沉淀
- 模拟恶劣网络环境常用的几种解决方案
- Java 8: 从永久代(PermGen)到元空间(Metaspace)
- Calculate distance, bearing and more between Latitude/Longitude points——根据两点经纬度计算距离,角度及其他
- Verilog HDL 出租车计费器实现
- UML之协作图
- DOM
- MongoDb gridfs-ngnix文件存储方案 - 图片
- KMP算法
- 程序猿关注的微信公众号和网站
- Android 属性动画(Property Animation) 完全解析 (下)
- 75.数塔问题(动态规划)
- 测试环境的搭建
- 在自己网站中插入网易云音乐的外链,播放音乐
- 75.数塔问题(动态规划)
- Android 属性动画(Property Animation) 完全解析 (上)
- C++ 虚函数表解析
- 关于C++一行语句变量自加自减的判断
- javascript DOM对象