基于pca的人脸识别

基于Matlab人脸识别(PCA算法) 摘要 随着科技的发展,人类社会的进步,传统身份识别由于容易遗失,容易被破解已不能起到身份识别作用。人们需要更加安全可靠的身份识别技术。而生物特征的独一无二,不易丢失和被复制的特性很好满足了身份识别的需要。同时随着计算机科学技术和生物医学的发展使得利用生物特征识别成为了可能。在生物特征识别领域,由于人脸识别的操作快速简单,结果直观,准确可靠,不需要人的配合等优点已成为人们关注的焦点。主成分分... 阅读详情

转自:http://www.cnblogs.com/liu-jun/archive/2013/03/20/2970132.html

 

以前对PCA算法有过一段时间的研究,但没整理成文章,最近项目又打算用到PCA算法,故趁热打铁整理下PCA算法的知识。本文观点旨在抛砖引玉,不是权威,更不能尽信,只是本人的一点体会。

主成分分析(PCA)是多元统计分析中用来分析数据的一种方法,它是用一种较少数 量的特征对样本进行描述以达到降低特征空间维数的方法,它的本质实际上是K-L变换。PCA方法最著名的应用应该是在人脸识别中特征提取及数据维,我们知 道输入200*200大小的人脸图像,单单提取它的灰度值作为原始特征,则这个原始特征将达到40000维,这给后面分类器的处理将带来极大的难度。著名 的人脸识别Eigenface算法就是采用PCA算法,用一个低维子空间描述人脸图像,同时用保存了识别所需要的信息。下面先介绍下PCA算法的本质K- L变换。

1、K-L变换(卡洛南-洛伊(Karhunen-Loeve)变换):最优正交变换  

  • 一种常用的特征提取方法;
  • 最小均方误差意义下的最优正交变换;
  • 在消除模式特征之间的相关性、突出差异性方面有最优的效果。

离散K-L变换:对向量x(可以想象成 M维=width*height 的人脸图像原始特征)用确定的完备正交归一向量系uj展开:

 

 

这个公式由来我想应该是任一n维欧式空间V均存在正交基,利用施密特正交化过程即可构建这个正交基。

现在我们希望用d个有限项来估计向量x,公式如下:

 

计算该估计的均方误差如下:

 

要使用均方误差最小,我们采用Langrange乘子法进行求解:

 

                                                           

 

因此,当满足上式时,

取得最小值。

 

 

即相关矩阵R的d个特征向量(对应d个特征值从大到小排列)为基向量来展开向量x时,其均方误差最小,为:

 

因此,K-L变换定义:当取矩阵R的d个最大特征值对应的特征向量来展开x时,其截断均方误差最小。这d个特征向量组成的正交坐标系称作x所在的D维空间的d维K-L变换坐标系, x在K-L坐标系上的展开系数向量y称作x的K-L变换。

 


总结下,K-L变换的方法:对相关矩阵R的特征值由大到小进行排队,

则均方误差最小的x近似于:

                                                              

矩阵形式:

 

上式两边乘以U的转置,得

                                             

 

向量y就是变换(降维)后的系数向量,在人脸识别Eigenface算法中就是用系数向量y代替原始特征向量x进行识别。


 

下面,我们来看看相关矩阵R到底是什么样子。

 

因此,我们可以看出相关矩阵R是一个实对称矩阵(或者严谨的讲叫正规矩阵),正规矩阵有什么特点呢??学过《矩阵分析》的朋友应该知道:

若矩阵R是一个实对称矩阵,则必定存在正交矩阵U,使得R相似于对角形矩阵,即:

 

 因此,我们可以得出这样一个结论:

                                                    

 

 降维后的系数向量y的相关矩阵是对角矩阵,即通过K-L变换消除原有向量x的各分量间的相关性,从而有可能去掉那些带有较少信息的分量以达到降低特征维数的目的。

 

2、主成分分析(PCA)

 

主成分分析(PCA)的原理就是将一个高维向量x,通过一个特殊的特征向量矩阵U,投影到一个低维的向量空间中,表征为一个低维向量y,并且仅仅损失了一些次要信息。也就是说,通过低维表征的向量和特征向量矩阵,可以基本重构出所对应的原始高维向量。

在人脸识别中,特征向量矩阵U称为特征脸(eigenface)空间,因此其中的特征向量ui进行量化后可以看出人脸轮廓,在下面的实验中可以看出。

以人脸识别为例,说明下PCA的应用。

设有N个人脸训练样本,每个样本由其像素灰度值组成一个向量xi,则样本图像的像素点数即为xi的维数,M=width*height ,由向量构成的训练样本集为。

该样本集的平均向量为:

平均向量又叫平均脸。

 

样本集的协方差矩阵为:

 

求出协方差矩阵的特征向量ui和对应的特征值,这些特征向量组成的矩阵U就是人脸空间的正交基底,用它们的线性组合可以重构出样本中任意的人脸图像,(如果有朋友不太理解这句话的意思,请看下面的总结2。)并且图像信息集中在特征值大的特征向量中,即使丢弃特征值小的向量也不会影响图像质量。

将协方差矩阵的特征值按大到小排序:。由大于的对应的特征向量构成主成分,主成分构成的变换矩阵为:

                              

这样每一幅人脸图像都可以投影到构成的特征脸子空间中,U的维数为M×d。有了这样一个降维的子空间,任何一幅人脸图像都可以向其作投影,即并获得一组坐标系数,即低维向量y,维数d×1,为称为KL分解系数。这组系数表明了图像在子空间的位置,从而可以作为人脸识别的依据。


有朋友可能不太理解,第一部分讲K-L变换的时候,求的是相关矩阵的特征向量和特征值,这里怎么求的是协方差矩阵?

其实协方差矩阵也是:

,可以看出其实用代替x就成了相关矩阵R,相当于原始样本向量都减去个平均向量,实质上还是一样的,协方差矩阵也是实对称矩阵。


总结下:

1、在人脸识别过程中,对输入的一个测试样本x,求出它与平均脸的偏差,则在特征脸空间U的投影,可以表示为系数向量y:

                                    

U的维数为M×d,的维数为M×1,y的维数d×1。若M为200*200=40000维,取200个主成分,即200个特征向量,则最后投影的系数向量y维数降维200维。

2、根据1中的式子,可以得出:

                               

这里的x就是根据投影系数向量y重构出的人脸图像,丢失了部分图像信息,但不会影响图像质量。

 

 

3.PCA算法的实验部分(matlab)

  

复制代码

% training
clear;  
clc;  
train_path='.\TrainDatabase\';
% phi存储样本,每一列对应一个样本
phi=zeros(64*64,20);  
for i=1:20  
path=strcat(train_path,num2str(i),'.jpg');  
Image=imread(path);
Image = rgb2gray(Image);%彩色图像转为灰度图像
Image=imresize(Image,[64,64]); %样本归一到同一个尺寸 
phi(:,i)=double(reshape(Image,1,[])');  
end;  

  
mean_phi=mean(phi,2);  %计算机平均脸
mean_face=reshape(mean_phi,64,64);  
Image_mean=mat2gray(mean_face);  
imwrite(Image_mean,'meanface.jpg','jpg');

Train_Number = size( phi , 2 );
%样本归一化,使每一维特征的期望为0,因为不同维度的取值范围差异很大,为方便处理,我们使其取值在同一个范围
A = [];
for i = 1 : Train_Number
    temp = double( phi(:,i)) - mean_phi;
    A = [ A temp ];
end
% C = A*A' 是A的协方差矩阵,然而C的维度太高,直接使用C计算特征值与特征向量太耗时
% L= C' ,L的特征值与C的特征值相同 , 而C的特征向量可以通过L的特征向量得到,因此这里使用L
L = A'*A;
[V D] = eig ( L );

L_eig_vec = [];
grad = sum( D ,2 ); %D为对角矩阵,每个元素为相应的特征值,为方便后续处理,这里将特征值放到一个列向量
[ sortGrad , index ] = sort( grad ,'descend' );%排序
i = 1;
temp = 0.0;
sumValue = sum( grad );
%取能量值占所有特征值99%的前K的特征向量
while( temp/sumValue <= 0.99 && i <= 20 )
    L_eig_vec = [ L_eig_vec V(:,index(i)) ];
    temp = temp+sortGrad(i);
    i = i+1;
end

UL = A * L_eig_vec;%协方差矩阵C的特征向量,也称特征脸,每一维为一个特征脸。 UL也是转换矩阵,即通过UL将样本转化到低维空间,对样本进行降维

for i=1: size( UL , 2 )  
Eigenface=reshape(UL(:,i),[64,64]);  
figure(i);  
imshow(mat2gray(Eigenface));  
end  



复制代码

复制代码

%使用测试样本进行测试
clc;
test_path='.\TestDatabase\';
error=zeros([1 10]);


for i=1:10
    path=strcat(test_path,num2str(i),'.jpg');
    Image=imread(path);
    Image = rgb2gray( Image );
    Image=double(imresize(Image,[64,64]));
    phi_test=zeros(64*64,1);
    phi_test(:,1)=double(reshape(Image,1,[])');
    
    X_test=phi_test-mean_phi;
    Y_test=UL'*X_test;%将测试样本映射到新空间
    %样本重建
    X_test_re=UL*Y_test;
    Face_re=X_test_re+mean_phi;

    %%display figure
    Face_re_2=reshape(Face_re(:,1),[64,64]);
    figure(i);
    subplot( 1 , 2 , 1);
    imshow(mat2gray(Image));
    title('Original');
    subplot( 1 , 2 , 2 );
    imshow(mat2gray(Face_re_2));
    title('Reconstruct');
  
end

复制代码

PCA+SVM人脸识别 PCA+SVM人脸识别 PCA介绍 主成分分析(Principal Component Analysis, 简称PCA)是常用的一种降维方法. 算法步骤: 输入: 样本集 D={x1,x2,...,xm}D={x1,x2,...,xm}D=\{x_1, x_2, ..., x_m\}, 低维空间维数 d′d′d' 过程: 对所有样本进行中心化: xi←xi−1m∑mi=1xix... 阅读详情

相关推荐

PCA算法在人脸识别中的应用

1、PCA介绍 主成分分析(PCA)是多元统计分析同用来分析数据的一种方法。通过正交变换将一组可能存在相关性的变量转换为一组线性不想关的向量,转换后的这组变量叫做主成分。而这个转换的过程中,可以丢弃很多相关的成分或者对描述这个物体不重要的成分。从而达到对原始数据降维,提取重要特征的目的。 其方法主要是通过对协方差矩阵进行特征分解,以得出数据的主成分(即特征向量)与它们的权值(即特征值)。PCA是最简单的以特征量分析多元统计分布的方法。其结果可以理解为对原数据中的方差做出解释:哪一个方向上的数据值对方差的影响

我本傲骄的博客 2645

基于PCA方法的人脸识别(Python)

目录 1.PCA简介 2.照片要求 3.创建训练人脸库的特征脸空间 3.1:创建所有训练样本组成的 M×N 矩阵 3.2:计算训练样本的平均值矩阵 3.3:去除平均值,得到规格化后的训练样本矩阵 3.4:计算协方差矩阵 3.5:计算协方差矩阵的特征值和特征向量 3.6:将特征值排序 3.7:保留前K个最大的特征值对应的特征向量 3.8:获得训练样本的特征脸空间 3.9:计算训练样本在特征脸空间的投影 4.人脸识...

qq_51938362的博客 2万+

PCA原理及人脸识别matlab实现

一、PCA:降维,和因子分析的区别 二、基于PCA的人脸识别(matlab实现) 还是得先训练:基于庞大的样本库,例如现实中人脸拍照(银行、车站),都是数据采集,可以用来建立人脸库。 使用PCA得到每个人的脸特征脸,对于新人脸,判断特征投影与哪个样本最近。 三、网站的图片识别是如何做的? ...

qq_39967296的博客 5344

基于PCA的人脸识别

基于PCA的人脸识别(MATLAB实现)

fish_dream 3万+

PCA人脸识别

PCA人脸识别-通俗易懂的理解 2017年12月19日 星期二 | Deran Pan | panderan@163.com 1. 简介 PCA,即主成分分析。简单来说就是通过坐标系变换将位于原坐标系中的原数据变为在新坐标系下对应的新数据。通常这种变化伴随着数据维度的大幅降低,但是数据信息的损失较小。即减少不同维度之间的相关系,去除信息冗余,提取主成分的意思。 对于人脸图片识别来说,图

panderan的博客 2645

基于PCA的人脸识别_Matlab实现(个人研读之后的一些总结)

以下是我在查阅相关文献之后的一些个人的总结,望大神们指正。基于PCA的人脸识别PCA简介这是百度百科的解析: “对于一个训练集,100个对象模板,特征是10维,那么它可以建立一个100*10的矩阵,作为样本。求这个样本的协方差矩阵,得到一个10*10的协方差矩阵,然后求出这个协方差矩阵的特征值和特征向量,应该有10个特征值和特征向量,我们根据特征值的大小,取前四个特征值所对应的特征向量,构成一个1

peterchan88的专栏 1万+

基于主成分分析PCA的人脸识别

目录 主成分分析PCA 基于PCA的人脸识别算法 matlab代码 主成分分析PCA 主成分分析(Principal Component Analysis,简称PCA)是最常用的一种降维方法。 PCA的主要目的是找到一个超平面(直线的高维推广)对所有样本数据进行表达,让样本点到这个超平面的距离足够近(最近重构性),以及让样本点在这个超平面上的投影能尽可能地分开(最大可分性),目的是在用低维的数据量表达高维的数据量的同时尽可能地保留原数据的特征。 PCA的主要思想是将n维特征映射到k维的空.

笔记 4811

基于PCA 人脸识别/人脸识别算法/人脸检测程序源码MATLAB ELM+PCA人脸识别 PCA人脸识别matlab代码 基于PCA算法的人脸识别

1、基于PCA的人脸识别代码 2、MATLAB ELM+PCA人脸识别 2、基于PCA的人脸识别(matlab)(采用PCA算法进行人脸识别,通过抽取人脸的主要成 分,构成特征脸空间,识别时将测试图像投影到此空间,得到一组投影系数,通过与训 练样本库中的人脸图像比较进行识别选择最佳匹配人脸) 3、OpenCV的PCA人脸识别 4、PCA+GUI的人脸识别程序matlab 5、PCA人脸识别matlab代码(包括测试,集归) 6、PCA-SVM人脸识别代码(采用PCA进行人脸特征脸的提取,基于osu-svm进

m0_68308718的博客 3259

基于PCA的人脸识别的Matlab实现代码

基于PCA的人脸识别算法 --Matlab   Face recognition Based on PCA

hesays的专栏 6万+

使用PCA进行人脸识别的项目实战

简介:PCA(主成分分析)是用于数据降维的统计方法,在人脸识别领域,它通过提取面部图像的关键特征来简化识别过程。本文介绍了PCA的原理和步骤,以及如何结合OpenCV库和C语言实现PCA人脸识别系统。此外,文章还讨论了PCA方法在人脸识别中的优缺点,并提出了可能的改进方案。

weixin_36277197的博客 868

基于PCA算法的人脸识别(包含人脸库)

MATLAB编程的以PCA算法为基础的人脸识别,包含人脸库,经典的算法。

基于PCA和LDA的人脸识别

一、系统设计 1.1研究背景及意义 随着信息技术的不断发展,人们对方便快捷的身份验证和识别系统的要求不断提高。人脸识别技术因具有直接、友好、快捷、方便、易为用户所接受等特点,成为了身份验证的最理想依据,也早已成为了模式识别领域研究的热点。众多科研人员通过多年潜心研究,也做出了许多的成果,但是在实际应用中,现有的人脸识别产品大多因识别率不高、稳定性差等缺点无法满足实际需要。 针对这一现状,本文...

qq_38006135的博客 7184

PCA人脸识别.rar

使用主成分分析(PCA)实现人脸识别,并对两种分组方式的结果进行呈现。(MATLAB实现)

PCA人脸识别详解——初学者必看

做人脸识别快3年了,从本科大三到现在研一,看了很多别人的博客,一直忙于学习和研究,今天第一次写个博客,关于“PCA人脸识别的”,打算今后把关于人脸识别的经典方法都在我的博客里面介绍一遍,有机会的话,把我自己做人脸识别方法也介绍给大家,目前主要研究压缩感知,稀疏表示相关的理论,对基于稀疏表示的人脸识别也有一段时间的研究。希望这篇博客对各位人脸识别研究的初学者提供一些帮助。下面开始介绍我的人脸识别研究...

weixin_44716262的博客 1万+

从“氛围编程“到“智能体工程“:AI编程范式的认知跃迁与工程实践

摘要: 2026年,ClaudeCode负责人鲍里斯·切尔尼提出用“智能体工程”(Agent Engineering)替代流行的“氛围编程”(Vibe Coding),认为后者过于主观,无法体现AI编程的系统化与工程化本质。智能体工程强调记忆系统、工具编排、任务分解、可观测性等核心技术,将AI编程从“玄学辅助”升级为可度量、可规模化的工程学科。本文通过对比术语差异、构建知识体系,并结合代码实例(如带记忆系统的代码生成Agent和可观测性系统),展示了智能体工程的实际应用。行业案例(如ClaudeCode的并

yyq916的博客 1061

threejs开发可视化数字城市效果

theme: condensed-night-purple 灵感图 现在随着城市的发展,越来越多的智慧摄像头,都被互联网公司布到城市的各个角落,举一个例子,一个大楼上上下下都被布置了智能摄像头,用于监控火势,人员进出,工装工牌佩戴等监控,这时候为了美化项目,大公司都会将城市的区域作为对象,进行3d可视化交互,接下来的内容,就是基于以上元素,开发的一款城市数据可视化的demo,包含楼宇特...

weixin_41770018的博客 1580

模式识别实验之PCA人脸识别

模式识别实验之PCA人脸识别(matlab实现)一、实验目的二、实验原理三、实验步骤四、matlab编程过程详解1、PCA人脸识别的基本流程2、读入ROL库数据3、PCA特征提取 一、实验目的 1.通过实验加深对于PCA人脸识别过程的理解。 2.通过编程进一步提高对图像、特征向量等概念的理解。 二、实验原理 PCA方法实现人脸识别,PCA的思想在这里就不详细论述了。 三、实验步骤 1.人脸识别图像...

qq_36757757的博客 1万+

win10 离线安装.Net Framework3.5

起因,安装软件比如3dmax2014等需要.Net Framework3.5支撑,那么需要安装低版本的.Net Framework3.5 闲话少说。 1.下载 NetFx3.cab 链接: https://pan.baidu.com/s/124to7F3BOy4yAlY61OjbDg 提取码: kixu 2.将NetFx3.cab 放入 系统盘的windows目录下(示例 C:\Wi...

m0_37615458的博客 7724

基于PCA和SVM的人脸识别以及MATLAB实现

一.什么是人脸识别?      人脸识别技术,就是以计算机为辅助手段,从静态或动态图像中识别人脸。      本问题中的人脸识别,是给定一幅人物图,利用人脸数据库 来与之进行匹配,判断其是否属于此数据库。若是,给出她所属的类别。 二. 为什么选择人脸作为识别特征来识别? 因为人脸和指纹一样,具有唯一性,可以用来鉴别一个人的身份。         也就是说,我们想要识别一个东西,要

gogo小Sa的专栏 7080

汇率波动率建模实战:从GARCH到EGARCH的金融时间序列分析

在金融时间序列分析中,波动率建模是量化市场风险的核心技术。其基本原理在于捕捉金融资产收益率序列中存在的波动聚集、尖峰厚尾等典型特征。通过建立条件异方差模型,如GARCH及其扩展模型,可以动态估计和预测未来波动率,这对于资产定价、风险管理和投资决策具有重要价值。在金融工程领域,该技术广泛应用于外汇、股票和衍生品市场。本文以汇率波动率建模为具体场景,详细阐述了如何使用Python中的arch库,从数据预处理、模型选型(包括GARCH、EGARCH等)、参数估计到样本外预测评估的全流程实践,并深入探讨了模型在应对

weixin_32629853的博客 374

基于的公司考勤系统(程序+开题报告)(开题报告+源码)

我们将研究和设计系统的架构和功能模块,包括员工信息管理模块、部门信息管理模块、考勤信息记录模块、工资信息计算模块、请假信息处理模块、奖惩信息管理模块、公告信息发布模块、上班打卡模块以及加班申请模块等。目的: 本项目旨在设计并实现一个基于的公司考勤系统,通过该系统,可以实现对员工、部门信息、考勤信息、工资信息、请假信息、奖惩信息、公告信息、上班打卡、加班申请等功能的统一管理。基于的公司考勤系统的设计与实现,旨在通过自动化技术提高考勤管理的效率和准确性,为企业管理提供有力的数据支持。最终成品以下面运行环境。

迟限程序设计 997

pca人脸识别python_[机器学习] 用PCA进行人脸识别

本文会带你详细的分析PCA人脸识别的代码PCA在人脸识别中有重要的应用,如果想详细了解PCA的原理,可以看我的这篇文章:任妍Carol:[机器学习] 人脸识别的重要方法——PCA​zhuanlan.zhihu.com人脸识别的原代码来自于Sklearn,可以通过这个链接访问:Faces recognition example using eigenfaces and SVMs​scikit-lea...

weixin_39533361的博客 870

认知网络分析实战:用Python复现课堂对话研究(含LSA代码)

本文通过Python实战,详细演示了如何运用认知网络分析(ENA)和滞后序列分析(LSA)两种方法,对课堂对话数据进行深度挖掘。文章提供了从数据清洗、行为编码到网络构建、序列统计及可视化的完整代码流程,帮助教育研究者和数据分析师量化分析对话中的认知结构与动态互动模式,从而获得超越文本表面的研究洞见。

weixin_28559803的博客 155
上一篇: PCA的数学原理
下一篇: 阿里云使用笔记(一):从零开始配置阿里云GPU服务器训练深度学习模型
HFKuAng
博客等级 码龄11年 70粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值