【老生谈算法】基于主成分分析PCA的matlab人脸识别系统设计与算法原理(论文+程序源码)——人脸识别算法_基于pca的人脸识别系统的设计-程序员宅基地

技术标签: matlab精选项目源码  matlab  算法  图像处理  

基于主成分分析PCA的matlab人脸识别系统设计与算法原理(论文+程序源码)

大家好,今天给大家介绍基于主成分分析PCA的matlab人脸识别系统设计与算法原理(论文+程序源码)。
对于一幅图像可以看作一个由像素值组成的矩阵,也可以扩展开,看成一个矢量,如一幅N*N 象素的图像可以视为长度为N2 的矢量,这样就认为这幅图像是位于N2 维空间中的一个点,这种图像的矢量表示就是原始的图像空间,但是这个空间仅是可以表示或者检测图像的许多个空间中的一个。不管子空间的具体形式如何,这种方法用于图像识别的基本思想都是一样的,首先选择一个合适的子空间,图像将被投影到这个子空间上,然后利用对图像的这种投影间的某种度量来确定图像间的相似度,最常见的就是各种距离度量。因此,本项目采用PCA算法并利用GUI实现人脸识别。

文章目录:

1、项目简介

  1. 主成分分析也称主分量分析,旨在利用降维的思想,把多指标转化为少数几个综合指标。

  2. 在统计学中,主成分分析(principal components analysis,PCA)是一种简化数据集的技术。它是一个线性变换。这个变换把数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。主成分分析经常用减少数据集的维数,同时保持数据集的对方差贡献最大的特征.这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面.


2、难度指数

本项目难度:中等难度
适用场景:相关题目的毕业设计及相关领域的应用研究


3、运行环境:

环境配置:
本项目所使用的MATLAB版本为MATLAB 7.8.0(R2016a)
注:可适配绝大部分matlab版本
项目技术:
PCA+主成分分析法+图像处理技术+人脸识别算法等等


4、项目详解:

提示:以下为项目的详细介绍,项目源码及项目设计文档下载地址见文末。

4.1主成分分析法算法原理
主成分分析法是一种降维的统计方法,它借助于一个正交变换,将其分量相关的原随机向量转化成其分量不相关的新随机向量,这在代数上表现为将原随机向量的协方差阵变换成对角形阵,在几何上表现为将原坐标系变换成新的正交坐标系,使之指向样本点散布最开的p 个正交方向,然后对多维变量系统进行降维处理,使之能以一个较高的精度转换成低维变量系统,再通过构造适当的价值函数,进一步把低维系统转化成一维系统。

4.1.1主成分分析的基本思想
在实证问题研究中,为了全面、系统地分析问题,我们必须考虑众多影响因素。这些涉及的因素一般称为指标,在多元统计分析中也称为变量。因为每个变量都在不同程度上反映了所研究问题的某些信息,并且指标之间彼此有一定的相关性,因而所得的统计数据反映的信息在一定程度上有重叠。在用统计方法研究多变量问题时,变量太 多会增加计算量和增加分析问题的复杂性,人们希望在进行定量分析的过程中,涉及的变量较少,得到的信息量较多。主成分分析正是适应这一要求产生的,是解决这类题的理想工具。

同样,在科普效果评估的过程中也存在着这样的问题。科普效果是很难具体量化的。在实际评估工作中,我们常常会选用几个有代表性的综合指标,采用打分的方法来进行评估,故综合指标的选取是个重点和难点。如上所述,主成分分析法正是解决这一问题的理想工具。因为评估所涉及的众多变量之间既然有一定的相关性,就必然存在着起支配作用的因素。根据这一点,通过对原始变量相关矩阵内部结构 的关系研究,找出影响科普效果某一要素的几个综合指标,使综合指标为原来变量的线 性拟合。这样,综合指标不仅保留了原始变量的主要信息,且彼此间不相关,又比原始 变量具有某些更优越的性质,就使我们在研究复杂的科普效果评估问题时,容易抓住主 要矛盾。
  
上述想法可进一步概述为:设某科普效果评估要素涉及个指标,这指标构 成的维随机向量为。对作正交变换,令,其中为正交阵,的各分量是不相关的,使得的各分量在某个评估要素中的作用容易解释,这就使得我们有可能从主分量中选择主要成分,削除对这一要素影响微弱的部分,通过 对主分量的重点分析,达到对原始变量进行分析的目的。的各分量是原始变量线性组合,不同的分量表示原始变量之间不同的影响关系。由于这些基本关系很可能与特定的作用过程相联系,主成分分析使我们能从错综复杂的科普评估要素的众多指标中,找出一些主要成分,以便有效地利用大量统计数据,进行科普效果评估分析,使我们在研究科普效果评估问题中,可能得到深层次的一些启发,把科普效果评估研究引向深入。
  
例如,在对科普产品开发和利用这一要素的评估中,涉及科普创作人数百万人、科 普作品发行量百万人、科普产业化(科普示范基地数百万人)等多项指标。经过主成分分析计算,最后确定个或个主成分作为综合评价科普产品利用和开发的综合指标,变量数减少,并达到一定的可信度,就容易进行科普效果的评估。
 
4.1.2主成分分析的主要作用
概括起来说,主成分分析主要由以下几个方面的作用。

(1)主成分分析能降低所研究的数据空间的维数。即用研究维的空间代替维的空间,而低维的空间代替高维的空间所损失的信息很少。即使只有一个主成分,这个成分仍是使用全部变量(个)得到的。例如要计算的均值也得使用全部的均值。在所选的前个主成分中,如果某个的系数都近似于零,就可以把这个删除,这也是一种删除多余变量的方法。 有时可通过因子负荷的结论,弄清变量间的某些关系。
  
(2)主成分分析法是多维数据的一种图形表示方法。我们知道,当维数大于时便不能画出几何图形,多元统计研究的问题大都多于个变量。要把研究的问题用图形表示出来,就要使变量少于个,也就是维数小于。这样,就要经过主成分分析,选取前两个主成分或其中某两个主成分,画出样本在二维平面上的分布情况,由图形可直观地看出各样本在主分量中的地位,进而还可以对样本进行分类处理,可以由图形发现远离大多数样本点的离群点。由主成分分析法构造回归模型,即把各主成分作为新的自变量代替原来自变量作回归分析。
  
(3)用主成分分析筛选回归变量。回归变量的选择有着重大的实际意义,为了使模型本身易于作结构分析、控制和预报,最好从原始变量所构成的子集合中选择最佳变量,构成最佳变量子集合。用主成分分析筛选变量,可以用较少的计算量来选择变量,获得选择最佳变量子集合的效果。

4.1.2主成分分析法的计算步骤
1、原始指标数据的标准化采集p 维随机向量x = (x1,X2,…,Xp)T)n 个样品xi = (xi1,xi2,…,xip)T ,i=1,2,…,n,
  n>p,构造样本阵,对样本阵元进行如下标准化变换:
在这里插入图片描述
其中
在这里插入图片描述
得标准化阵Z。

2、对标准化阵Z 求相关系数矩阵
在这里插入图片描述
其中,
在这里插入图片描述
3、解样本相关矩阵R 的特征方程得p 个特征根,确定主成分 ,按在这里插入图片描述
确定m 值,使信息的利用率达85%以上,对每个λj, j=1,2,…,m, 解方程组Rb = λjb得单位特征向量 。

4、将标准化后的指标变量转换为主成分
在这里插入图片描述
U1称为第一主成分,U2 称为第二主成分,…,Up 称为第p 主成分。

5 、对m 个主成分进行综合评价
  对m 个主成分进行加权求和,即得最终评价值,权数为每个主成分的方差贡献率。

4.2 PCA算法的功能实现
4.2.1人脸空间的建立
假设一幅人脸图像包含N个像素点,它可以用一个N维向量Γ表示。这样,训练样本库就可以用Γi(i=1,…,M)表示。 协方差矩阵C的正交特征向量就是组成人脸空间的基向量,即特征脸。
将特征值由大到小排列:λ1≥λ2≥…≥λr,其对应的特征向量为μk。这样每一幅人脸图像都可以投影到由u1,u2,…,ur张成的子空间中。因此,每一幅人脸图像对应于子空间中的一点。同样,子空间的任意一点也对应于一幅图像。

4.2.2特征向量的选取
虽然协方差矩阵Ω最多有对应于非零特征值的k(k远小于M)个特征向量,但是通常情况下,k仍然很大,而事实上,根据应用的要求,并非所有的特征向量都有需要保留,而特征空间投影的计算速度是直接与创建子空间所用的特征向量的数目相关,若考虑到计算时间的因素,可以适当的减去一些信息量少的特征向量,而且,去掉这些特征向量之后不一定不利于分类结果,有的情况下反而能够提高识别性能。

4.2.3人脸识别
有了这样一个由"特征脸"张成的降维子空间,任何一幅人脸图像都可以向其投影得到一组坐标系数,这组系数表明了该图像在子空间中的位置,从而可以作为人脸识别的依据。换句话说,任何一幅人脸图像都可以表示为这组"特征脸"的线性组合,其加权系数即是K-L变换的展开系数,也可以称为该图像的代数特征。因此,在获得特征脸之后,就可以对每一类别的典型样本进行投影,由此得到每个人脸的投影特征从而构成人脸特征向量,作为下一步识别匹配的搜索空间。
输入图像及其在人脸空间上的投影(重构图像),人脸图像在人脸空间中的投影变化不明显而非人脸图像的投影变化明显。因此,检测一幅图像中是否存在人脸的基本思想是,计算该图像中任意位置处的局部图像与人脸空间之间的距离ε。其中,ε是局部图像是否为人脸的度量。因此,计算给定图像任意一点上的ε,就可以得到一映射图ε(x,y)。

4.3 实验及结果分析
实验在两个图库上测试,一个是自建人脸库,该库包含10个不同人物,每人有5张不同表情和姿态下的图片,总共50幅。另一个是ORL人脸库,该库包含40个不同人物,每人有10张图片,共400幅。用训练样本进行测试,识别率为100%。而随着训练样本的增加,识别率会有所提升,由于标准人脸库在采集时考虑了多种因素,人脸图像比较标准,所以识别率较自建的人脸库识别率高,另外因为自建人连库的图片太少,即训练样本太少,也会对结果产生影响,效果不是很好。进行直方图均衡化比灰度归一化的识别率高,预处理对识别的效果起着至关重要的作用。而此次实验的预处理还比较粗糙,PCA也只是起到了简单的特征脸降维的作用,要有更好的效果,还必须寻找更好的特征表达,使得可以尽量消除光照、表情、遮掩和姿势的影响。

在这里插入图片描述
图2 训练样本在坐标系下的投影矩阵

下图为测试流程截图:
在这里插入图片描述
图3 用户使用界面
在这里插入图片描述
图4 选择图片
在这里插入图片描述图5 图片选择后
在这里插入图片描述
图6 查找后

4.4 总结
本项目采用了Matlab中的GUI(图形用户界面)为主要表现形式,GUI比单纯的M文件会有更强的应用、测试及表现效果,从使用的角度考虑,为库中的每个人取了一个名字,最终查找到时会在标题处显示其名字,下方显示库中与测试图片最接近的库图片。因为是利用了标准人脸库,并且识别的人数不是很多,所以最终的结果还是非常不错的,识别率可达100%。

4.5部分程序源码

%% PCA人脸识别
global im;%使用全局变量
imgdata=[];%训练图像矩阵
for i=1:10
  for j=1:5
    a=imread(strcat('C:\Users\dell\Desktop\ORL\s',num2str(i),'\',num2str(j),'.bmp'));
    b=a(1:112*92); % b是行矢量 1×N,其中N=10304
    b=double(b);
    imgdata=[imgdata; b]; % imgdata 是一个M * N 矩阵,imgdata中每一行数据一张图片,M=50
  end;
end;
imgdata=imgdata'; %每一列为一张图片
imgmean=mean(imgdata,2); % 平均图片,N维列向量
for i=1:50 
  minus(:,i) = imgdata(:,i)-imgmean; % minus是一个N*M矩阵,是训练图和平均图之间的差值
end;

covx=minus'* minus; % M * M 阶协方差矩阵
[COEFF, latent,explained] = pcacov(covx'); %PCA,用协方差矩阵的转置来计算以减小计算量

% 选择构成95%的能量的特征值
i=1;
proportion=0;
while(proportion < 95)
  proportion=proportion+explained(i);
  i=i+1;
end;
p=i-1;

% 训练得到特征脸坐标系
i=1;
while (i<=p && latent(i)>0)
  base(:,i) = latent(i)^(-1/2)*minus * COEFF(:,i); % base是N×p阶矩阵,用来进行投影,除以latent(i)^(1/2)是对人脸图像的标准化
  i = i + 1;
end

% 将训练样本对坐标系上进行投影,得到一个 p*M 阶矩阵为参考
reference = base'*minus;

%% 测试过程——在测试图片文件夹中选择图片,进行查找测试

a=im;
b=a(1:10304);
b=double(b);
b=b';

object = base'*(b-imgmean);
distance=100000;

%最小距离法,寻找和待识别图片最为接近的训练图片
for k=1:50 
   temp= norm(object - reference(:,k));
   if (distance > temp)
     which = k;
     distance = temp;
   end;
end;

%找出距离最近的图片所在的位置
num1 = ceil(which/5);%第num1个文件夹
num2 = mod(which,5);%第num2个图片文件
if (num2 == 0)
    num2 = 5;
end;
I=imread(strcat('C:\Users\dell\Desktop\Face\s',num2str(num1),'\',num2str(num2),'.bmp'));%读取该图片
axes( handles.axes2);%使用第2个axes



5、源码下载:

本项目及一些精选的matlab人脸识别项目源码如下,有需要的朋友可以点击进行下载

序号 matlab人脸识别项目(点击下载)
1 (本项目源码) 基于Matlab主成分分析(PCA)算法的人脸识别系统源码+项目设计文档_人脸识别_主成分分析_PCA_matlab
2 ORL人脸数据库_人脸识别_ORL_matlab
2 Matlab人脸识别_人脸识别_人脸检测_matlab
2 LDA线性辨别分析的人脸识别算法_采用KNN分类_LDA_matlab
2 LBP特征提取用于人脸识别_含训练样本和测试样本_LBP_人脸识别_matlab
2 LBP算法实现的人脸识别(有图像窗口文件)(有人脸库)_人脸识别_OPENCV_C++
2 BP神经网络人脸识别_带论文_人脸识别_matlab
2 人脸识别_pca_svm_matlab
2 基于训练卷积神经网络的人脸识别设计_matlab
2 基于肤色和模板匹配的人脸检测VC程序_人脸识别_OPENCV_C++
2 光照归一化算法人脸识别_归一化算法_人脸识别_matlab
2 matlab实现从照片中提取人脸的程序源码
2 SVM人脸识别_含SVM工具箱_SVM_matlab
2 LDA+PCA人脸识别matlab程序_人脸识别_matlab
2 PCA经典人脸识别和PCA+SVM人脸识别方法_matlab
2 PCA+BP神经网络的人脸识别程序_matlab
2 PCA+BP神经网络的人脸识别程序_matlab
2 MATLAB的LVQ创建神经网络模型人脸朝向识别_LVQ_matlab
2 LBP特征提取的人脸识别检测算法_LBP_人脸识别_matlab
2 LBP算法实现人脸识别_LBP_人脸识别_matlab
2 LBP_算子特征提取_人脸识别_matlab
2 Gabor小波+LBP特征提取+PCA+LPP降维_人脸识别_matlab
2 DLDA算法人脸识别_DLDA_matlab
2 DBN算法进行人脸识别_DBN_matlab
2 BP神经网络人脸朝向识别_BP神经网络_包含数据集_matlab
2 BP神经网络的预测与人脸识别_测试通过_人脸识别_matlab
2 Adaboost训练器_人脸识别_matlab
2 Adaboost人脸识别改进版(有GUI,推荐)_matlab
2 性别特征和年龄特征提取_人脸识别_matlab
2 性别识别_人脸特征神经网络判别_人脸识别_包含训练数据集和测试数据集_matlab
2 小波算法人脸识别的实现_小波算法_人脸识别_matlab
2 稀疏表示人脸识别核心问题L1范数源代码_稀疏表示_人脸识别_L1范数_matlab
2 稀疏标识人脸实时识别(含英文论文)_稀疏标识_人脸识别_人脸实时识别_matlab
2 基于肤色人脸识别代码_肤色检测_人脸识别_matlab
2 基于肤色模型对一副图片的多个人脸进行人脸识别_肤色模型_多人脸识别_matlab
2 基于肤色检测再用Adaboost人脸检测_肤色检测_Adaboost_人脸检测_matlab
2 费舍尔线性判别人脸识别系统(有GUI,推荐,需要先训练,执行faceCore.m)_matlab
2 虹膜识别程序_matlab_人脸识别
2 LVQ神经网络的预测_人脸识别_LVQ_matlab
2 遗传算法优化支持向量机参数的人脸识别程序_SVM_matlab_人脸识别
2 图像处理_人脸的视频帧系列图像_灰度积分投影技术的眼睛定位方法_perclos计数_计算眨眼率_疲劳检测_matlab源码
2 通过MATLAB对一幅多个人物的图像进行人脸轮廓的提取识别。效果不错,譬如毕业照这样的照片能有很好的结果
2 用于人脸识别的NMF分解程序_非负矩阵分解_matlab源码
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_53407570/article/details/124765185

智能推荐

Sublime Text 关闭自动更新 | Mac_mac sublime text 取消更新提示-程序员宅基地

文章浏览阅读3.1k次。1. 打开配置文件Mac 如下图2. 在文件内部添加这段文字,就可以了:"update_check":false _mac sublime text 取消更新提示

Linux系统下DNS配置指南_linux 服务器修改网络dns-程序员宅基地

文章浏览阅读548次,点赞10次,收藏6次。Linux系统下DNS配置指南_linux 服务器修改网络dns

Springboot/java/node/python/php基于springboot+vue手机售后管理系统【2024年毕设】-程序员宅基地

文章浏览阅读779次,点赞19次,收藏24次。springboot微信小程序的小疾病问诊服务系统的设计与实现。springboot基于spring的物业管理系统的设计与实现。springboot基于Java的高校学生请假系统。ssm基于Android的购物商场APP设计与实现。springboot基于微信小程序的智慧校园系统。ssm基于Android的英语词典的设计与开发。ssm基于SSM+Vue的学生实践管理平台开发。ssm基于android的企业员工考勤系统。ssm基于web的暗香小店系统的设计与实现。ssm基于Web的高等学校公费医疗管理系统。

css中hover属性的使用技巧_css hover的用法-程序员宅基地

文章浏览阅读2.3w次,点赞15次,收藏63次。hover属性用不同的书写方式,来改变不同关系的元素样式。元素:hover 表示聚焦后改变自己元素:hover 元素 表示聚焦后改变其子元素元素:hover + 元素 表示聚焦后改变其指定的“亲兄弟”(条件是该兄弟元素与其相邻)元素元素:hover ~ 元素 表示聚焦后改变其指定的兄弟元素,两个元素相不相邻都行。示例:.first:hover {color: white;}/* 聚焦我改变自己 */.three:hover .three-son {font-size: 20px._css hover的用法

coursera-斯坦福-机器学习-吴恩达-第8周笔记-无监督学习_pca反向压缩-程序员宅基地

文章浏览阅读6k次,点赞3次,收藏15次。coursera-斯坦福-机器学习-吴恩达-第8周笔记-无监督学习coursera-斯坦福-机器学习-吴恩达-第8周笔记-无监督学习1聚类算法clutering1聚类算法简介2K-means21kmeans的目标函数22随机初始化23选择类别数3考试quiz维数约减 dimensionality reduction1数据压缩2数据可视化3维度约简-主成分分析法PCA1 PCA_pca反向压缩

vim插件安装及常用技巧_bxbx.vim-程序员宅基地

文章浏览阅读5.2k次。一、插件安装Vundle是vim的一个插件管理器, 同时它本身也是vim的一个插件。插件管理器用于方便、快速的安装、删除、Vim更新插件。mkdir -p ~/.vim/bundlegit clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim管理器安装完成后,vim ~/.vimrc命令创建.vimrc文件syntax on" tab宽度和缩进同样设置为4set tabstop=4set softta_bxbx.vim

随便推点

基于Wemos D1 Mini Pro开发板的天气显示器_arduino wemos d1 mini-程序员宅基地

文章浏览阅读226次,点赞2次,收藏3次。本项目设计了一款可以触摸控制的天气显示器。主要由Wemos D1 Mini Pro和TFT显示屏组成,利用Wemos D1 Mini Pro作为设备的主控芯片,发出Wi-Fi信号并接收相应指令,通过调用API将接收到的信息传输到TFT显示屏,TFT显示屏将接收到的信息显示出来。该天气显示器实现对所在地区当前的时间与日期;当日的天气信息,如温度、压力、湿度、降雨量;七天的未来预测等功能的显示。设计采用Wemos D1 Mini Pro,利用API将实时获取的天气信息,通过TFT显示屏显示出来。_arduino wemos d1 mini

Android 双屏异显(兼容android8)_android service 检测是否双屏-程序员宅基地

文章浏览阅读653次。public void initDiffDisplay() { try { DisplayManager displayManager = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE); Display[] presentationDisplays = displayManager.getDisplays(); if (presentationDi._android service 检测是否双屏

【全开源】JAVA婚恋相亲红娘牵线系统源码支持微信小程序+微信公众号+H5+APP-程序员宅基地

文章浏览阅读530次,点赞23次,收藏10次。springboot+mybatisplus+mysql 用户端 uniapp(vue语法)管理后台 vue+elementUi。后台服务 springboot+mybatisplus+mysql。一、我们技术使用JAVA后台服务 前后端分离。管理后台 vue+elementUi。用户端 uniapp(vue语法)适配小程序+H5+公众号。私信客服获取演示地址。私信客服获取演示地址。

6.python输入整数年份,判断对应整数年份是否为闰年并输出结果_判断闰年的python程序直接输入一个代表年份的正整数-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏5次。# -*- coding: UTF-8 -*-year = int(input("输入一个年份:"))if year % 100 == 0: if year % 400 == 0: print('%d年是闰年' % year) else: print('%d年不是闰年' % year)else: if year % 4 == 0: print('%d年是闰年' % year) else: print('%d_判断闰年的python程序直接输入一个代表年份的正整数

【图像去噪】偏微分方程PDE图像去噪(含SNR)【含Matlab源码 1890期】_pdnet 深度学习 偏微分方程 去噪-程序员宅基地

文章浏览阅读987次,点赞20次,收藏19次。偏微分方程PDE图像去噪(含SNR)完整的代码,方可运行;可提供运行操作视频!适合小白!_pdnet 深度学习 偏微分方程 去噪

Ubuntu18.04安装教程(很详细)_ubuntu18安装-程序员宅基地

文章浏览阅读6.6w次,点赞128次,收藏962次。Ubuntu18.0详尽版安装教程下载Ubuntu18.04下载VMware Workstation安装虚拟机下载Ubuntu18.04官方网站:http://old-releases.ubuntu.com/releases/18.04.4/?_ga=2.44113060.1243545826.1617173008-2055924693.1608557140下载VMware Workstation这个在网上有很多教程下载,这里我就不写了,我用的版本是14 pro。如下图:安装虚拟机1、打开_ubuntu18安装

推荐文章

热门文章

相关标签