基于Matlab的人脸识别设计(PCA)

这篇具有很好参考价值的文章主要介绍了基于Matlab的人脸识别设计(PCA)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1  PCA主成分分析

图像预处理是人脸识别的重要组成部分。由于图像采集环境不同,输入测试图像常常存在一些问题,如不同程度的噪声和图像对比度不足。再者,获取距离和焦距大小之类的外部因素也使得面部信息在整个图像中具有不确定的大小和位置。为了确保收集的面部图像的质量,必须在识别之前预处理测试图像。所以下文将会对本次设计中的图像预处理过程进行介绍。

1.1  样本图像预处理

样本图像的选择与处理是实现人脸识别的基础,故在选择样本图像时要进行人为的干预。首先样本图像要保证人物特征的明显与背景单一,才能使尽可能多的与人脸相关的关键被保留下来。其次是图像的分辨率和宽高比。在进行之后的图像处理时,相同的分辨率可以便于程序对图像进行更高效的运算。而相同的宽高比将会使样本图像的变量刚好的控制在图像本事,使本次课程设计更具有说明性。

确定好样本图像后,需要对图像进行灰度处理。因为拍摄环境、光圈、样本图像人物的身体状况不同,会产生不同色彩的人脸信息,这些色彩的不同会影响对图像人脸本身的特征识别。同时传统的彩色RGB图像数据量过大,所以处理彩色图像时其运算会时间过高。灰度处理代码如下:

pic1 = rgb2gray(imread('1.jpg'));

处理后效果如图1:

基于Matlab的人脸识别设计(PCA)

图1 灰度转换对比图

图像数据量和图像的大小有着直接的关系,即使是将图像像素缩至150*180后(PS:此处为小弟手动更改的像素),也会出现数据量过大导致运行缓慢的现象。所以需要对灰度处理后的的图形进行缩小。具体代码如下:

namud = 0.5;  

pic1 = rgb2gray(imread('1.jpg'));

pic1 = imresize(pic1,namud);  

在完成了样本图像外观上的所有操作后,则需要对其转化后的数据进行储存,为方便后续操作,可将所有的样本图像以多个矩阵的方式储存在一个细胞体结构中,并计算得到某一个图像的矩阵行列大小(m、n),从而将一个细胞体中的所有行为m、列为n的矩阵,转化成大小为n*m的列矩阵,这样方便后续的PCA算法运算。上述过程的代码如下:

[m,n] = size(pic1);

pic_all = {pic1,pic2,pic3,pic4,pic5,pic6,pic7,pic8,pic9,pic10};

for i=1:10

FaceData(i,:) = reshape(pic_all{i},1,m*n);

end

为了节省存储空间,Matlab为图像提供了特殊的数据类型uint8(8位无符号整数),以此方式存储的图像称作8位图像。当使用函数imread()时,其会把灰度图像存入一个8位矩阵,当为RGB图像时,就存入8位RGB矩阵中。因此,Matlab读入图像的数据是uint8,而Matlab中数值一般采用double型(64位)存储和运算。所以要先将图像转为double格式的才能运算,即将uint8(0-255范围类型)准换为double(0-1范围类型)。其代码如下:

FaceData = double(FaceData)/255; 

至此对样本图像的预处理全部结束,接下来则需要对其进行运算得到其图像特征,从而进行与测试人脸的图像识别。

1.2  测试图像预处理

测试图像即需要进行人脸识别与数据库中进行比对的图像,但在处理之前因为后续使用的PCA的算法,故需要进行对测试图像进行像素的转换,并保存转换后的图像,其代码如下:

[filename,pathname]=uigetfile('*','choose a picture');

path=[pathname,filename];

Origimg=imread(path);

img=imresize(Origimg,[180 150]);

path='E:\Matlab_face';

filename = 'test.jpg';

newpath=fullfile(path,filename);

imwrite(img,newpath,'jpg');

对测试图像的预处理与对样本图像的预处理一致。其代码如下:

pic = rgb2gray(img2find);   

pic = imresize(pic,namud);

[m2,n2] = size(pic);

pic = reshape(pic,1,m2*n2);

pic = double(pic)/255;

2 PCA主成分分析

PCA(Principal Component Analysis,主成分分析)是一种常用的数据分析方法。它是一种对数据进行分析的技术,最重要的应用是对原有数据进行简化。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。这种方法可以有效的找出数据中最“主要”的元素和结构,去除噪音和冗余,将原有的复杂数据降维,揭示隐藏在复杂数据背后的简单结构。它的优点是简单,而且无参数限制,可以方便的应用与各个场合。

2.1 PCA算法分析

表1 PCA算法分析所涉及的变量说明

变量名称

变量说明

m

样本图像个数

Cell

样本图像矩阵

avg

均值

n

样本矩阵中最大列数

Z

减去均值后的样本矩阵

C

协方差矩阵

Y

降维后的图像矩阵

T

表转置

V

协方差矩阵的特征值

D

协方差矩阵特征值对应的特征向量

将每一张样本图像转换为大小为n(1*75*90)的列向量Xm,并储存在一个矩阵中。所得样本矩阵可表示为:

基于Matlab的人脸识别设计(PCA)

基于Matlab的人脸识别设计(PCA)

样本矩阵的每一进行零均值化求样本矩阵中每列的均值,并转化为行向量,再转化为行为m列为n的矩阵即得到均值向量(Avg),使细胞体向量中与均值向量相减,即完成对样本矩阵的零均值化

基于Matlab的人脸识别设计(PCA)

基于Matlab的人脸识别设计(PCA)

基于Matlab的人脸识别设计(PCA)

基于Matlab的人脸识别设计(PCA)

计算协方差矩阵:

基于Matlab的人脸识别设计(PCA)

求出协方差矩阵的特征值V及对应的特征向量D将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P

基于Matlab的人脸识别设计(PCA)

将样本数据与矩阵P相乘,即得到降维到k维后的数据

基于Matlab的人脸识别设计(PCA)

至此PCA过程完成。

2.2.2 PCA代码应用

经过上文的PCA算法分析我们可以基本得到其运算流程。以m条n维数据为例,即将原始数据按列组成n行m列矩阵X将X的每一行进行零均值化,即减去这一行的均值求出协方差矩阵 求出协方差矩阵的特征值及对应的特征向量将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵PY=PX即为降维到k维后的数据其具体代码如下:

function Cell_all = PCA(img,k)  

[m,n] = size(img);

img_mean = mean(img);

img_mean_all = repmat(img_mean,m,1);

Z = img - img_mean_all;

T = Z'*Z/m;    

[V,D] = eigs(T,k);

img_new = img*V*D;  

Cell_all = {img_new,V,D};

通过以上代码即可实现对样本人脸图片的降维与数据处理。同时因为处理测试人脸图像使用的也为PCA故其代码与上面类似即:

pic_done = pic*V*D ;

3 判别图像间的相似性

3.1最小距离法

在样本人脸照片完成了预处理和PCA运算后,即将所有的样本人脸数据都存储在一个人脸库中。再将测试人脸照片完成预处理与PCA运算后,得到其运算后的数据。之后便确定图像间的相似性,即判断测试图像与样本图像之间的关系,并找到测试图像对应的样本图像,从而实现人脸识别功能。在这里选用最小距离法来判定图像间的相似性,从而实现人脸识别,具体代码如下

for i=1:m1  

    face(i) = norm(img_all(i,:)-pic_done);  

end  

FaceFind = find(face == min(face));  

在这里我们把PCA之后的图像映射到坐标之间的几何距离作为评判与哪一个人脸最近的标准 。其中黑色圆点为待识别图像坐标,红色圆点为匹配图像坐标,可见其两点的距离最近。

基于Matlab的人脸识别设计(PCA)

参考文献

  1. 左腾. 人脸识别技术综述[J]. 软件导刊, 2017 182-185.
  2. GatsbyNewton. PCA算法详解PCA算法详解_GatsbyNewton-CSDN博客_pca算法. CSDN,2015
  3. 王文庆.人脸识别原理与实践[M].北京:中国工信出版社,2018.3:27-40
  4. 周品.Matlab图像处理与图形应用界面[M].北京:清华大学出版社,2013:397-435

PS:1.极其建议大家阅读 PCA算法详解_GatsbyNewton-CSDN博客_pca算法PCAPCA(Principal Component Analysis,主成分分析)是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。网上关于PCA的文章有很多,但是大多数只描述了PCA的分析过程,而没有讲述其中的原理。这篇文章的目的是介绍PCA的基本数学原理,帮助读者了解PCA的工作机制是什么。当然我https://blog.csdn.net/u010376788/article/details/46957957

        2.本文的人脸识别率不高,但是应对一般的课程设计还是可以,毕竟不会有人真的一张一张的数你的照片匹配率。

        3.其他函数知识点:

matlab中 rgb2gray() 函数 具体实现_corilei的博客-CSDN博客_rgb2gray函数            简介    rgb2gray是matlab内部一种处理图像的函数,通过消除图像色调和饱和度信息同时保留亮度实现将将RGB图像或彩色图转换为灰度图像,即灰度化处理的功能,调用这个功能的格式是I = rgb2gray(RGB),意思是将真彩色图像RGB转换为灰度强度图像I 。        调用格式I = rgb2gray(RGB)newmap= rgb2gray(map)函数...https://blog.csdn.net/corilei/article/details/80559448matlab的imread_深藏功与名-CSDN博客_imread函数 matlabimread(matlab)                                            函数语法 A = imread(filename, fmt)[X, map] = imread(...)[...] = imread(filename)[...] = imread(URL,...)[...] = imread(https://blog.csdn.net/langb2014/article/details/48465795Matlab中cell数组的使用_ljh0302的专栏-CSDN博客_matlab读取cell数组转载地址:http://www.matlabsky.com/forum.php?mod=viewthread&tid=21089从celll使用说起在读取文件的时候,cell数组(各种翻译都有,元胞数组,单元数组...直接无视)是MATLAB的宠儿,基本都会出现,长期使用发现频率比struct高不少~无论是Import Data还是使用textscan之类获取数据,从长期使用高级语言的角度https://blog.csdn.net/ljh0302/article/details/50819018MATLAB的reshape函数_xtingjie的博客-CSDN博客_reshape函数matlab用法一作用是将4*6的A,变成6*4的B,数据排列规则:对A逐列扫描,对B逐列填充,也就是先处理完第一列,在处理第二列,再第三列。。。用法二 A是4*6的,C是2*3*4的,都有24个元素,变换前后的矩阵元素个数一样总结reshape函数总是将原矩阵A,重组为新矩阵B,这里A、B元素个数需相同。重组的规则如下: 总是先处理低维的,再处理高维的,比如要把4*6的A变为6*4的B,就要先扫描A的第一https://blog.csdn.net/xtingjie/article/details/70991097matlab图像uint8和double的关系,除以255乘以255_三眼二郎-CSDN博客_matlab uint8和doublematlab默认图像的储存和读取方式为uint8但是为了计算和表达方便matlab针对uint8和double都有相应操作有时我们会疑惑一会iMG = double(img);imshow(uint8(IMG)*25)一会imshow(IMG)imwrite同样有如此操作为什么呢??????????我们在使用时可以分成两个体系在用uint8时,matlab默认图像为[0,2...https://blog.csdn.net/a6333230/article/details/96474738matlab中repmat函数的用法_恰同学少年的博客-CSDN博客_repmat函数matlabB = repmat(A,m,n)B = repmat(A,[m n])B = repmat(A,[m n p...])这是一个处理大矩阵且内容有重复时使用,其功能是以A的内容堆叠在(MxN)的矩阵B中,B矩阵的大小由MxN及A矩阵的内容决定,如果A是一个3x4x5的矩阵,有B = repmat(A,2,3)则最后的矩阵是6x12x5例如:>>B=repmat( [1https://blog.csdn.net/majinlei121/article/details/50762997图像处理中uint8和double的问题_大丈夫-CSDN博客_uint8和double为了节省存储空间,matlab为图像提供了特殊的数据类型uint8(8位无符号整数),以此方式存储的图像称作8位图像。imread把灰度图像存入一个8位矩阵,当为RGB图像时,就存入8位RGB矩阵中。因此,matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算。所以要先将图像转为double格式的才能运算,I2=im2double(I1)https://blog.csdn.net/yjl9122/article/details/50937966文章来源地址https://www.toymoban.com/news/detail-443896.html

到了这里,关于基于Matlab的人脸识别设计(PCA)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【机器学习】主成分分析(PCA)算法及Matlab实现

    【问题引入】 在许多领域的研究与应用中,往往需要对反映事物的多个变量进行大量的观测,收集大量数据以便进行分析寻找规律。多变量大样本无疑会为研究和应用提供了丰富的信息,但也在一定程度上增加了数据采集的工作量,更重要的是在多数情况下,许多变量之间可

    2024年02月04日
    浏览(52)
  • 聊聊基于Alink库的主成分分析(PCA)

    主成分分析(Principal Component Analysis,PCA)是一种常用的数据降维和特征提取技术,用于将高维数据转换为低维的特征空间。其目标是通过线性变换将原始特征转化为一组新的互相无关的变量,这些新变量称为主成分,它们按照方差递减的顺序排列,以保留尽可能多的原始数据

    2024年02月08日
    浏览(35)
  • 多元回归预测 | Matlab主成分分析PCA降维,BP神经网络回归预测。PCA-BP回归预测模型

    效果一览 文章概述 多元回归预测 | Matlab主成分分析PCA降维,BP神经网络回归预测。PCA-BP回归预测模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码

    2024年02月13日
    浏览(50)
  • 机器学习之基于PCA的人脸识别

    目录 PCA人脸数据降维 matlab代码实现  思路分析  PCA人脸重构 matlab代码实现  思路分析  PCA人脸可视化 matlab代码实现  思路分析:  PCA人脸识别 matlab代码实现  思路分析  这段代码是一个简单的PCA(主成分分析)算法实现,用于对图像数据进行降维处理。下面是对代码进行

    2024年02月11日
    浏览(41)
  • 数据分析案例-基于PCA主成分分析法对葡萄酒数据进行分析

    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 1.项目背景 2.项目简介 2.1分析目标 2.2数据集介绍 2.3技术工具 3.算法理论 4.实验过程

    2024年02月03日
    浏览(45)
  • AI:132-基于深度学习的涉案人脸图像识别与敲诈勒索嫌疑分析

    🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲

    2024年02月22日
    浏览(40)
  • 机器学习:基于PCA对人脸识别数据降维并建立KNN模型检验

    作者:i阿极 作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍 📜📜📜如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!💪 大家好,我

    2024年02月01日
    浏览(41)
  • PCA分析(主成分分析)--结果解读

    主成分分析( PCA )是一个很好的工具,可以用来降低特征空间的维数。 PCA 的显著优点是它能产生不相关的特征,并能提高模型的性能。 PCA 用于减少用于训练模型的特征维度数量,它通过从多个特征构造所谓的主成分( PC )来实现这一点。 PC 的构造方式使得 PC1 方向在最大

    2024年02月03日
    浏览(37)
  • PCA主成分分析

    目前图像特征的提取主要有两种方法:传统图像特征提取方法 和 深度学习方法。 传统的特征提取方法:基于图像本身的特征进行提取(PCA); 深度学习方法:基于样本自动训练出区分图像的特征分类器; 特征选择(feature selection)和特征提取(Feature extraction)都属于 降维

    2024年02月08日
    浏览(54)
  • 主成分分析(PCA)详解

    主成分分析(PCA)是一种比较基础的数据降维方法,也是多元统计中的重要部分,在数据分析、机器学习等方面具有广泛应用。主成分分析目的是用较少的变量来代替原来较多的变量,并可以反映原来多个变量的大部分信息。 对于一个含有n个数据,变量的个数为p的一个样本,

    2024年01月17日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包