1  PCA主成分分析

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

1.1  样本图像预处理

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

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

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

处理后效果如图1:

图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:10FaceData(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,并储存在一个矩阵中。所得样本矩阵可表示为:

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

计算协方差矩阵:

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

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

至此PCA过程完成。

2.2.2 PCA代码应用

经过上文的PCA算法分析我们可以基本得到其运算流程。以m条n维数据为例,即将原始数据按列组成n行m列矩阵X,将X的每一行进行零均值化,即减去这一行的均值,求出协方差矩阵 。求出协方差矩阵的特征值及对应的特征向量,将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P,Y=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之后的图像映射到坐标之间的几何距离作为评判与哪一个人脸最近的标准 。其中黑色圆点为待识别图像坐标,红色圆点为匹配图像坐标,可见其两点的距离最近。

参考文献

  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

基于Matlab的人脸识别设计(PCA)相关推荐

  1. 基于matlab的人脸五官边缘检测方法,基于MATLAB的人脸识别系统的设计

    基于MATLAB的人脸识别系统的设计(论文12000字,外文翻译,参考程序) 摘要:本文基于MATLAB平台设计了一款简单的人脸识别系统,通过USB摄像头来采集图像,经过肤色方法进行人脸检测与定位,然 ...

  2. 人脸识别系统 matlab,基于MATLAB的人脸识别系统的设计

    基于MATLAB的人脸识别系统的设计(论文12000字,外文翻译,参考程序) 摘要:本文基于MATLAB平台设计了一款简单的人脸识别系统,通过USB摄像头来采集图像,经过肤色方法进行人脸检测与定位,然 ...

  3. 基于Matlab的人脸识别登录系统

    基于Matlab的人脸识别登录系统 摘 要:人脸识别系统以人脸识别技术为核心,是一项新兴的生物识别技术,是当今比较热门的一项安全认证技术.它涉及人脸图像采集.人脸定位.人脸识别预处理.身份确认以及身份 ...

  4. 基于matlab人脸识别论文,毕业论文--基于MATLAB的人脸识别系统设计

    毕业论文--基于MATLAB的人脸识别系统设计 毕毕 业业 设设 计计 论论 文文 题 目 基于 MATLAB 的人脸识别系统设计 学 院 电气与信息工程学院 专 业 自动化 I 摘要 人脸识别是模式 ...

  5. 基于matlab的人脸识别算法

    基于matlab的人脸识别算法 1. 主成分的数目的选取 前已指出,设有p个随机变量,便有p个主成分.由于总方差不增不减,C1,C2等前几个综合变量的方差较大,而Cp,Cp-1等后几个综合变量的方差较 ...

  6. 基于MATLAB的人脸识别系统

    基于MATLAB的人脸识别系统 一.课题背景 自70年代以来.随着人工智能技术的兴起.以及人类视觉研究的进展.人们逐渐对人脸图像的机器识别投入很大的热情,并形成了一个人脸图像识别研究领域,.这一领域除 ...

  7. 基于MATLAB的人脸识别算法的研究

    基于MATLAB的人脸识别算法的研究 作者:lee神 现如今机器视觉越来越盛行,从智能交通系统的车辆识别,车牌识别到交通标牌的识别:从智能手机的人脸识别的性别识别:如今无人驾驶汽车更是应用了大量的机器 ...

  8. 基于MATLAB的人脸识别系统GUI

    基于MATLAB的人脸识别系统GUI,可以识别出不同表情的人脸 演示视频:[基于matlab人脸识别系统-哔哩哔哩] https://b23.tv/Pj8j0Uu 运行截图: 源码获取+卫星:DX52 ...

  9. 基于MATLAB的人脸识别系统[创新元素,界面GUI]

    第一章 绪论 本章提出了本文的研究背景及应用前景.首先阐述了人脸图像识别意义:然后介绍了人脸图像识别研究中存在的问题:接着介绍了自动人脸识别系统的一般框架构成:最后简要地介绍了本文的主要工作和章节结构 ...

  10. 基于MATLAB的人脸识别系统(包含传统/深度学习方法)

    基于MATLAB GUI的人脸识别系统(包含传统/深度学习方法) 人脸检测与识别作为计算机视觉研究的核心内容之一,是一个不断发展的领域,并且还是模式识别.机器学习和数据挖掘等相关学科交叉研究的热点,已 ...

最新文章

  1. 通过正则表达式验证日期
  2. 前后端分离之JWT用户认证
  3. 关于pagehelper分页
  4. java中list()和listfile()
  5. 机器人建模中移动关节如何建立坐标系_机器人标准DH建模法
  6. 是做生意还是做事业,这是一个问题。
  7. 线上python课程一般多少钱-参加Python培训机构要花多少钱
  8. 【Session】多服务器节点间session共享
  9. 微信 公众号 网页授权登录(静默授权)
  10. 直观理解 梯度(gradient)
  11. 全球及中国SxS(遥控潜水器)行业商业模式分析及投资风险预测2022年版
  12. 后盾网div+css,css定位(后盾网)
  13. 计算机的供电方式,电脑主板电源供电方式
  14. Android检测手机是否安装app
  15. python 成长笔记 序章
  16. [转]SIFT,SURF,ORB,FAST 特征提取算法比较
  17. Sylvester结式法求解多项式方程
  18. 以前学过编程,那么去学python改怎么副业赚点小钱?
  19. libev学习系列之二:libev下载
  20. 用户名和计算机名命名规范

热门文章

  1. 计算机专业有必要考软考吗,软考初级程序员有用吗_有必要考吗_上学吧
  2. 快递鸟接口国内常用快递公司编码表
  3. Python查找中国城市、省份
  4. 网络编程资源大集合(包含前端、java、linux、安卓、github开源项目、开发工具等)
  5. LXM音频处理软件 使用说明书
  6. DirectX修复工具出现0xc000007b错误——分析与解决
  7. php zip扩展文件,php使用ZipArchive扩展实现文件的zip压缩与zip解压
  8. dism /online /get-packages与dism /image:e:\ /get-packages
  9. Java输出杨辉三角形
  10. 汽车汽配行业供应链协同管理系统一体化管理,SCM供应链提升企业竞争力