PCA人脸识别理论基础(附源码)
人脸识别代码原理

人脸识别代码原理
人脸识别是一种通过计算机技术自动识别图像或视频中的人脸的方法。
下面是一种常见的人脸识别代码原理:
1. 数据准备:首先需要获取用于训练的人脸图像数据集,这些图像需要包含已知人脸的标签信息。
同时,还需确保图像数据集中的人脸图像具有较高的质量,清晰度和多样性。
2. 特征提取:接下来,通过特征提取算法将每个人脸图像转化为一组特征向量。
常用的特征提取算法包括主成分分析(PCA)、线性判别分析(LDA)和局部二值模式(LBP)等。
这些算法会提
取人脸图像中的关键特征,如眼睛、鼻子、嘴巴等,并将其编码为数值表示。
3. 数据训练:使用已知标签的人脸图像和其特征向量,训练一个分类器模型,如支持向量机(SVM)、卷积神经网络(CNN)等。
该模型将通过学习训练数据集中的特征和标签之间的关系,来识别未知人脸的标签。
4. 人脸识别:当需要进行人脸识别时,首先需要对待识别图像进行同样的特征提取操作。
然后将提取得到的特征向量输入训练好的模型中进行预测。
模型将根据特征向量与训练数据的关系,计算其与每个标签的相似度得分。
最终选择得分最高的标签,作为识别结果。
需要注意的是,人脸识别还会面临一些挑战,如光照变化、表情变化、遮挡等导致的图像变化。
为了提高识别的准确性,可
以采用人脸对齐、人脸图像增强等预处理技术,以及使用多个不同角度的训练图像来训练模型。
此外,还可以结合活体检测技术来确保识别过程中的真实性和安全性。
人脸识别程序源代码

1 .利用OpenCV进行人脸检测人脸检测程序主要完成3部分功能,即加载分类器、加载待检测图象以及检测并标示。
本程序使用OpenCV中提供的"haarcascade_frontalface_alt.xml”文件存储的目标检测分类,用cvLoa d函数载入后,进行强制类型转换。
OpenCV中提供的用于检测图像中目标的函数是cvHaarDete ctObjects,该函数使用指针对某目标物体(如人脸)训练的级联分类器在图象中找到包含目标物体的矩形区域,并将这些区域作为一序列的矩形框返回。
分类器在使用后需要被显式释放,所用的函数为cvReleaseHaarClassifierCascade。
这些函数原型请参看有关OpenCV手册。
2 .程序实现1)新建一个VisualC++MFC项目,取名为“FaceDetection",选择应用程序类型为“单文档”。
将菜单中多余的项去掉,并添加一项“人脸检测”,其ID为"ID_FaceDetected”,并生成该菜单项的消息映射函数。
2)在“FaceDetectionView.h”头文件中添加以下灰底色部分程序代码:〃南京森林公安高等专科学校江林升//FaceDetectionView.h:CFaceDetectionView 类的接□#pragmaonce#include"cv.h"#include"highgui.h"classCFaceDetectionView:publicCView<protected:〃仅从序列口化创建CFaceDetectionView();DECLARE_DYNCREATE(CFaceDetectionView)精心整理public:CFaceDetectionDoc*GetDocument()const;CvHaarClassifierCascade*cascade;〃特征器分类CvMemStorage*storage;voiddetect_and_draw(IplImage*img);IplImage*src; 〃载入的图像3)在,小2。
人脸识别核心算法及MATLAB代码

人脸识别核心算法在检测到人脸并定位面部关键特征点之后,主要的人脸区域就可以被裁剪出来,经过预处理之后,馈入后端的识别算法。
识别算法要完成人脸特征的提取,并与库存的已知人脸进行比对,完成最终的分类。
我们在这方面的主要工作包括:∙基于LGBP的人脸识别方法问题:统计学习目前已经成为人脸识别领域的主流方法,但实践表明,基于统计学习的方法往往会存在“推广能力弱”的问题,尤其在待识别图像“属性”未知的情况下,更难以确定采用什么样的训练图像来训练人脸模型。
鉴于此,在对统计学习方法进行研究的同时,我们还考虑了非统计模式识别的一类方法。
思路:对于给定的人脸图像,LGBP方法首先将其与多个不同尺度和方向的Gabor滤波器卷积(卷积结果称为Gabor特征图谱)获得多分辨率的变换图像。
然后将每个Gabor特征图谱划分成若干互不相交的局部空间区域,对每个区域提取局部邻域像素的亮度变化模式,并在每个局部空间区域内提取这些变化模式的空间区域直方图,所有Gabor特征图谱的、所有区域的直方图串接为一高维特征直方图来编码人脸图像。
并通过直方图之间的相似度匹配技术(如直方图交运算)来实现最终的人脸识别。
在FERET四个人脸图像测试集合上与FERET97的结果对比情况见下表。
由此可见,该方法具有良好的识别性能。
而且LGBP方法具有计算速度快、无需大样本学习、推广能力强的优点。
参见ICCV2005表.LGBP方法与FERET'97最佳结果的对比情况∙基于AdaBoost的Gabor特征选择及判别分析方法问题:人脸描述是人脸识别的核心问题之一,人脸识别的研究实践表明:在人脸三维形状信息难以准确获取的条件下,从图像数据中提取多方向、多尺度的Gabor特征是一种合适的选择。
使用Gabor特征进行人脸识别的典型方法包括弹性图匹配方法(EGM)和Gabor特征判别分类法(GFC)。
EGM在实用中需要解决关键特征点的定位问题,而且其速度也很难提高;而GFC则直接对下采样的Gabor特征用PCA降维并进行判别分析,尽管这避免了精确定位关键特征点的难题,但下采样的特征维数仍然偏高,而且简单的下采样策略很可能遗漏了非常多的有用特征。
基于机器学习的PCA算法在人脸识别中的应用研究

基于机器学习的PCA算法在人脸识别中的应用研究随着人工智能技术的不断发展,人脸识别已经成为了智能化生活、公共安全监控、金融支付等领域的核心技术。
而机器学习在人脸识别中的应用也越来越广泛。
本文将围绕PCA算法在人脸识别中的应用展开研究。
一、机器学习在人脸识别中的应用机器学习是一种通过训练数据来学习模型并从中进行预测的技术。
深度学习是机器学习的一种,它利用神经网络对大量的数据进行训练,并通过多层次的特征提取来实现对复杂数据的处理。
人脸识别就是其中的一个典型应用领域。
近年来,随着大数据的发展和算法技术的不断进步,人脸识别的精度和准确度都得到了极大的提升。
基于机器学习的人脸识别系统在智能家居、社交网络等方面都得到了广泛的应用。
机器学习在人脸识别中的应用主要包括特征提取、分类器设计和模型训练等方面。
其中,特征提取是最关键的一步,目前在特征提取方面,常用的算法有LBP、HOG、SURF、ORB、SIFT等。
而在分类器设计中,SVM、KNN、Adaboost等算法也得到了广泛的应用。
另外,深度学习算法也正在逐渐替代传统的机器学习算法,并成为人脸识别领域的主流技术。
二、PCA算法原理PCA全称为Principal Component Analysis,即“主成分分析”。
PCA算法是一种常用的数据降维算法,能够从高维度的数据中提取出相对重要的特征。
降维能够剔除一些无关特征和噪声,提高了数据处理效率和准确率。
PCA算法的原理是将原始的高维数据转化为一组线性不相关的低维数据,从而实现降维。
在提取主成分之前,需要将原始数据进行标准化处理(即:均值为0,方差为1)。
然后采用特征值分解(Eigenvalue Decomposition)的方式,求出数据的协方差矩阵,然后通过计算协方差矩阵的特征向量和特征值,得到主成分,并将其投影到新的低维空间中,从而实现数据降维。
三、PCA算法在人脸识别中的应用PCA算法在人脸识别中的应用是基于矩阵分解的思想。
基于matlab的人脸识别算法(PCA)(优.选)

3.基于matlab的人脸识别算法3.1 问题描述对于一幅图像可以看作一个由像素值组成的矩阵,也可以扩展开,看成一个矢量,如一幅N*N 象素的图像可以视为长度为N2 的矢量,这样就认为这幅图像是位于N2 维空间中的一个点,这种图像的矢量表示就是原始的图像空间,但是这个空间仅是可以表示或者检测图像的许多个空间中的一个。
不管子空间的具体形式如何,这种方法用于图像识别的基本思想都是一样的,首先选择一个合适的子空间,图像将被投影到这个子空间上,然后利用对图像的这种投影间的某种度量来确定图像间的相似度,最常见的就是各种距离度量。
因此,本次试题采用PCA 算法并利用GUI实现。
对同一个体进行多项观察时,必定涉及多个随机变量X1,X2,…,Xp,它们都是的相关性, 一时难以综合。
这时就需要借助主成分分析来概括诸多信息的主要方面。
我们希望有一个或几个较好的综合指标来概括信息,而且希望综合指标互相独立地各代表某一方面的性质。
任何一个度量指标的好坏除了可靠、真实之外,还必须能充分反映个体间的变异。
如果有一项指标,不同个体的取值都大同小异,那么该指标不能用来区分不同的个体。
由这一点来看,一项指标在个体间的变异越大越好。
因此我们把“变异大”作为“好”的标准来寻求综合指标。
3.1.1 主成分的一般定义设有随机变量X1,X2,…,Xp,其样本均数记为,,…,,样本标准差记为S1,S2,…,Sp。
首先作标准化变换,我们有如下的定义:(1) 若C1=a11x1+a12x2+ … +a1pxp,…,且使 Var(C1)最大,则称C1为第一主成分;(2) 若C2=a21x1+a22x2+…+a2pxp,…,(a21,a22,…,a2p)垂直于(a11,a12,…,a1p),且使Var(C2)最大,则称C2为第二主成分;(3) 类似地,可有第三、四、五…主成分,至多有p个。
3.1.2 主成分的性质主成分C1,C2,…,Cp具有如下几个性质:(1) 主成分间互不相关,即对任意i和j,Ci 和Cj的相关系数Corr(Ci,Cj)=0 i j(2) 组合系数(ai1,ai2,…,aip)构成的向量为单位向量,(3) 各主成分的方差是依次递减的,即Var(C1)≥Var(C2)≥…≥Var(Cp)(4) 总方差不增不减,即Var(C1)+Var(C2)+ … +Va r(Cp)=Var(x1)+Var(x2)+ … +Var(xp) =p这一性质说明,主成分是原变量的线性组合,是对原变量信息的一种改组,主成分不增加总信息量,也不减少总信息量。
人脸识别算法代码

人脸识别算法的实现涉及多个步骤,包括图像采集、预处理、特征提取和匹配等。
这里,我将给出一个使用Python和OpenCV库进行人脸识别的简单示例。
这个示例将使用Haar Cascade分类器进行人脸检测和识别。
首先,你需要安装必要的库:```bashpip install opencv-pythonpip install numpy```然后,你可以使用以下代码进行人脸识别:```pythonimport cv2# 加载Haar Cascade分类器face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')# 打开摄像头cap = cv2.VideoCapture(0)while True:# 从摄像头读取一帧图像ret, img = cap.read()if not ret:break# 将图像转换为灰度图像gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 使用Haar Cascade分类器检测人脸faces = face_cascade.detectMultiScale(gray, 1.3, 5)# 在检测到的人脸周围画矩形框for (x, y, w, h) in faces:cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)# 显示图像cv2.imshow('img', img)if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放摄像头并关闭所有窗口cap.release()cv2.destroyAllWindows()```这个代码将打开你的摄像头,并在检测到的人脸周围画矩形框。
PCA人脸识别的python实现

PCA⼈脸识别的python实现这⼏天看了看PCA及其⼈脸识别的流程,并在⽹络上搜相应的python代码,有,但代码质量不好,于是⾃⼰就重新写了下,对于att_faces数据集的识别率能达到92.5%~98.0%(40种类型,每种随机选5张训练,5张识别),全部代码如下,不到50⾏哦。
# -*- coding: utf-8 -*-import numpy as npimport os, glob, random, cv2def pca(data,k):data = np.float32(np.mat(data))rows,cols = data.shape #取⼤⼩data_mean = np.mean(data,0) #求均值Z = data - np.tile(data_mean,(rows,1))D,V = np.linalg.eig(Z*Z.T ) #特征值与特征向量V1 = V[:, :k] #取前k个特征向量V1 = Z.T*V1for i in xrange(k): #特征向量归⼀化V1[:,i] /= np.linalg.norm(V1[:,i])return np.array(Z*V1),data_mean,V1def loadImageSet(folder=u'E:/迅雷下载/faceProcess/att_faces', sampleCount=5): #加载图像集,随机选择sampleCount张图⽚⽤于训练trainData = []; testData = []; yTrain=[]; yTest = [];for k in range(40):folder2 = os.path.join(folder, 's%d' % (k+1))data = [cv2.imread(d.encode('gbk'),0) for d in glob.glob(os.path.join(folder2, '*.pgm'))]sample = random.sample(range(10), sampleCount)trainData.extend([data[i].ravel() for i in range(10) if i in sample])testData.extend([data[i].ravel() for i in range(10) if i not in sample])yTest.extend([k]* (10-sampleCount))yTrain.extend([k]* sampleCount)return np.array(trainData), np.array(yTrain), np.array(testData), np.array(yTest)def main():xTrain_, yTrain, xTest_, yTest = loadImageSet()num_train, num_test = xTrain_.shape[0], xTest_.shape[0]xTrain,data_mean,V = pca(xTrain_, 50)xTest = np.array((xTest_-np.tile(data_mean,(num_test,1))) * V) #得到测试脸在特征向量下的数据yPredict =[yTrain[np.sum((xTrain-np.tile(d,(num_train,1)))**2, 1).argmin()] for d in xTest]print u'欧式距离法识别率: %.2f%%'% ((yPredict == yTest).mean()*100)svm = cv2.SVM() #⽀持向量机⽅法svm.train(np.float32(xTrain), np.float32(yTrain), params = {'kernel_type':cv2.SVM_LINEAR})yPredict = [svm.predict(d) for d in np.float32(xTest)]#yPredict = svm.predict_all(xTest.astype(np.float64))print u'⽀持向量机识别率: %.2f%%' % ((yPredict == yTest).mean()*100)if __name__ =='__main__':main()。
PCA人脸识别算法详解

识别阶段
• 1测试样本 W Rm*n 向 X1... X p 空间投影后得到样本 W的特征矩阵 Yt 和主成分分量 Yji (1),...,Yji ( p) :
Yt [Yji (1),...,Yji p] WX1,...,WX p
第25页,共28页。
识别阶段
• 2根据测试样本投影特征矩阵与所有训练样本投 影特征矩阵之间的最小距离来判断测试样本所属 的类别。定义如下的距离度量准则:
主成分分析简介
• Principal Component Analysis(PCA) • 主成分分析(Principal Component Analysis,
简称PCA)是一种常用的基于变量协方差矩 阵对信息进行处理、压缩和抽提的有效方 法。
第1页,共28页。
基于PCA算法的人脸识别
• PCA方法由于其在降维和特征提取方面的 有效性,在人脸识别领域得到了广泛 的应用。
j
1,2,...,p
第23页,共28页。
训练阶段
• 5 训练样本 s ji ,i 1,2,...,N, j 1,2,...,K 向 X 1... X p 空间
投影得到: Yji [S ji Xi ,...,S ji X p ] [Yji (1),...,Yji ( p)] Rmp
第24页,共28页。
识别阶段
• 第一步:将待识别的人脸图像 与平均脸的差
值脸投影到特征脸空间,得到其特征向量表示:
wT
第13页,共28页。
识别阶段
• 第二步:定义阈值
1 max 2 i, j
i
j
,i, j 1,2,...,200
第14页,共28页。
识别阶段
• 第三步:采用欧式距离来计算 与每个人脸的距
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 PCA 与人脸识别及其理论基础问题描述[1]对于一幅图像可以看作一个由像素值组成的矩阵,也可以扩展开,看成一个矢量,如一 幅 N*N 象素的图像可以视为长度为 N 2 的矢量,这样就认为这幅图像是位于 N 2 维空间中的 一个点,这种图像的矢量表示就是原始的图像空间,但是这个空间仅是可以表示或者检测图 像的许多个空间中的一个。
不管子空间的具体形式如何,这种方法用于图像识别的基本思想 都是一样的,首先选择一个合适的子空间,图像将被投影到这个子空间上,然后利用对图像 的这种投影间的某种度量来确定图像间的相似度,最常见的就是各种距离度量。
K-L 变换[1]PCA 方法是由 Turk 和 Pentlad 提出来的,它的基础就是 Karhunen-Loeve 变换(简称 KL 变换),是一种常用的正交变换。
下面我们首先对 K-L 变换作一个简单介绍:假设 X 为 n 维的随机变量,X 可以用 n 个基向量的加权和来表示:X = ∑αφ式中: α是加权系数,φ是基向量,此式还可以用矩阵的形式表示:X = (φ ,φ ,",φ )(α ,α ,",α )= Φα取基向量为正交向量,即⎧1i = j则系数向量为:Φ Φ = ⎨ ⎩i ≠ j ⇒Φ Φ = I α = ΦX综上所述,K-L 展开式的系数可用下列步骤求出:步骤一 求随即向量 X 的自相关矩阵 R = E ⎡⎣ X X ⎤⎦ ,由于没有类别信息的样本集的 µ 均值向量,常常没有意义,所以也可以把数据的协方差矩阵 ∑ K_L 坐标系的产生矩阵,这里 µ 是总体均值向量。
= E ⎡⎣( x − µ )( x − µ )⎤⎦ 作为步骤二 求出自相关矩阵或协方差矩阵 R 的本征值 λ和本征向量 φ, Φ = (φ,φ,",φ)步骤三 展开式系数即为 α = ΦXK_L 变换的实质是建立了一个新的坐标系,将一个物体主轴沿特征矢量对齐的旋转 变换,这个变换解除了原有数据向量的各个分量之间相关性,从而有可能去掉那些带 有较少信息的坐标系以达到降低特征空间维数的目的。
⎨利用 PCA 进行人脸识别完整的 PCA 人脸识别的应用包括几个步骤:人脸图像预处理;读入人脸库,训练形成 特征子空间;把训练图像和测试图像投影到上一步骤中得到的子空间上;选择一定 的距离函数进行识别。
下面详细描述整个过程(源码见’’)。
1. 读入人脸库 归一化人脸库后,将库中的每人选择一定数量的图像构成训练集,其余构成测试集。
设归一化后的图像是 n*m,按列相连就构成 N=n*m 维矢量,可视为 N 维空间中的一个点,可 以通过 K-L 变换用一个低维子空间描述这个图像。
2. 计算 K- L 变换的生成矩阵 所有训练样本的协方差矩阵为(以下三个等价):⎧⎪1. ⎪C = (∑x i x ) / M − m i m⎪2. C = ( A i A ) / M (1)⎪⎡ ⎤ ⎪3. C ⎪⎩ = ⎢∑ ⎣( x − m )( x − m )⎥ ⎦ A = {φ1 ,φ2 , ...,φM } ,φi = x i − m x , m x 是平均人脸, M 训练人脸数,协方差矩阵 C A 是一个N*N 的矩阵, N 是 x i 的维数。
为了方便计算特征值和特征向量,一般选用第2个公式。
根据K - L 变换原理,我们所求 的新坐标系即由矩阵 A i A 的非零特征值所对应的特征向量组成。
直接求N*N 大小矩阵 C 的 特征值和正交归一特征向量是很困难的, 根据奇异值分解原理(见段落和),可以 通过求解 A i A 的特征值和特征向量来获得 A i A 的特征值和特征向量,。
在计算得到 C 的所有非零特征值 [λ, λ,", λ](从大到小排序,1 ≤ r < M )及其对应的 单位正交特征向量 [u , u ,", u ] 后,可以得到特征空间 U = [u , u ,", u ] ∈ℜ ,从而可以计算一张图片X 在特征空间上的投影系数(也可以理解为X 在空间U 中的坐标):3. 识别Y = U * X ∈ ℜ(2)利用公式(2),首先把所有训练图片进行投影,然后对于测试图片也进行同样的投影,采用判别函数对投影系数进行识别。
PCA 的理论基础投影[2]设 d 维样本 x , x , " , x ,以及一个 d 维基 w ,那么标量:y = wx是相当于 x 在基上的坐标值。
如果 w = 1 , y 就是把 x 向方向为 w 的直线进行投影的结果,可以从图 1 看到。
推广之,如果有一组基(m 个)组成的空间 W = [w , w ,", w ] ,那么可以得到 x 在空间 W 上的坐标为: Y = W x ∈ ℜ。
证明: wx =又∵ w ⋅ x ⋅ c os θx ⋅ c os θ = y , w =1⇒ wx = y图 1 投影图进一步,表达式 w = m + a e 表示 w 是一条通过点 m ,方向为 e 的直线。
PCA 的作用及其统计特性[3]采用 PCA 对原始数据的处理,通常有三个方面的作用—降维、相关性去除、概率估计。
下面分别进行介绍:ƒ 去除原始数据相关性从统计学上 讲, E {[ X − E ( X )][Y − E (Y )]} 称为随 机变量 X 与 Y 协方差,记 为Cov ( X , Y ) 。
令 ρ =,称为随机变量 X 与 Y 的相关系数。
ρ = 1 则 X 与Y 是相关的, ρ = 0 ,则 X 与 Y 是不相关的。
AA命题 1 对于矩阵 A 来说,如果 是一个对角阵,那么 A 中的向量是非相关的。
由 PCA 处理的人脸库数据的非相关性可以从两点进行说明。
(1) 基底的非相关性特征空间基 U = [u , u ,", u ] 是非相关的,即 U U= I 。
(2) 投影系数的非相关性由 SVD 可知 A = {φ1 ,φ2 ,...,φM } = U ΛV, 其中 φi = x i − m x , m x 是平均人脸。
根据公式(2)可以把 A 映射到特征空间上,得到: 关的,可由下面得到证明:B = U * A ,其中 B 是非相Y 的协方差矩阵为: C=1BB =1U AAU =1Λ(3)M M M由命题 1 可知,B 是非相关的。
ƒ 统计参数(均值及方差)均值即m--平均人脸。
x命题2 随机变量方差越大,包含的信息越多,当一个变量方差为 0 时,该变量为常数,不含任何信息。
用PCA 计算主分量,就是寻找一组向量,使得原始数据A ={φ1,φ2 ,...,φM} 在这组向量上的投影值的方差尽可能大。
最大方差对应的向量就是第一主成份,以后递推就是第二主成份,第三主成份……。
用 PCA 计算主分量就是求原始数据A ={φ1,φ2 ,...,φM}(其中φi= x i −m x )协方差矩阵的特征向量U= [u,u,",u],由公式(3)可知,P = u A = ( p, p,",p) 是 A 在u上的投影值,其中P 的方差就是u对应的特征值λ,可以理解为:命题3 所有原始数据在主分量u上的投影值方差为λ。
ƒ 降维如果在原始空间表示一幅 n*m 大小的图片 X,那么需要一个 N=n*m 维矢量,但是当用公式(2)把它映射到特征空间后,只需要一个 r*1 维的向量就可。
另外,由命题2 可知,可以根据方差的大小来判断特征向量的重要性。
由ORL 图片库的200 个人脸计算得到的特征值呈图2 分布,可知特征向量重要性呈指数下降,据此可以只选用前面几个重要的特征向量来构建特征空间。
通过计算,前 71 个特征值占了 %,因此 r 可以取 71 而非 200,从而达到进一步降维的作用。
图2 特征值的分布特征脸U = [u,u,",u]中的每一个单位向量都构成一个特征脸,如图3 所示。
由这些特征脸所张成的空间称为特征脸子空间,需要注意对于正交基的选择的不同考虑,对应较大特征值的特征向量(正交基)也称主分量,用于表示人脸的大体形状,而对应于较小特征值的特征向量则用于描述人脸的具体细节,或者从频域来看,主分量表示了人脸的低频部分,而此分量则描述了人脸的高频部分(源码见’’)。
1 2 10 50 70 average图3 特征脸,分别是第 1,2,10,50,70 分量,最后一张是平均脸。
图片重建要进行图片 X 的重建,首先对 X 投影到特征空间上,得到系数Y=U(X−m),然后选用一部分系数与特征向量进行原始图片的重建:X ' = m+U(1:t)*Y(1:t),其中1:t 表示取前 t 个元素。
(见’’)在图4 中,其中前两张图片来自训练样本,第 3 张来自测试样本,可以看到对于训练样本,PCA 系数可以对图片实现很好重建,而对于训练样本以外的图片重建效果很差。
Original15 50 100 150 199图4 人脸图像重建。
第列张图片是输入原始图,其它列图片是重建结果,数字表示 t 的数目。
奇异值分解(SVD)[1]设 A 是秩为 r 的 m*n(m>>n)维矩阵,则存在两个正交矩阵和一个对角阵:A = [a,a,",a] =UΛV其中U= [u,u,",u],V= [v,v,",v],Λ= diag(λ,λ,",λ) ,且U U= I ,V V= I ,λλ呈降序排列。
其中 λ 为 AA∈ℜ 和 A A ∈ ℜ 的非零特征值,u 和 v 分别是 AA 和 A A对应于 λ 的特征向量。
可得一个推论:U = AV Λ可以计算 AA 的特征值 λ 及相应的正交归一特征向量 v 后,可由推论知 AA 的正交归一特征向量u = 1Av注意,协方差矩阵 C = ( A i A ) / M 的特征值为: λ / M 。
利用小矩阵计算大矩阵特征向量高阶矩阵的特征向量可以转化为求低阶矩阵的特征向量:设:A 是秩为 r 的 m*n (m>>n )维矩阵, C= AA ∈ℜ,是一个矩阵,现在要求 C 的特征值及特 征向量,可 通过先求小 矩阵 AA ∈ ℜ的特征 向量 [v , v ,", v] 和特征值[λ, λ,", λ] ,两者之间有以下关系:A A ⋅ v = λ ⋅ v⎯⎯⎯→ AA ( A ⋅ v ) = λ ( A ⋅ v )显然, C = AA 的特征向量是 A ⋅ v (注意没有单位化), [λ , λ ,", λ] 亦为其特征值。
结论: 与 的方法计算协方差矩阵的特征向量,特征值的结果是一致的,只是要注意 中的特征值要除以 M , 中的特征向量要单位化。