基于Matlab 人脸识别技术

news2024/10/24 12:29:35

Matlab 人脸识别技术

算法流程:

本系统运用PCA算法来实现人脸特征提取,然后通过计算欧式距离来判别待识别测试人脸,本个系统框架图如下:

图: 人脸识别系统框架图

整个系统的流程是这样的,首先通过图像采集建立人脸库,这个人脸库里的人脸图像必须是格式及像素统一的,然后针对库里的人脸进行人脸训练,利用PCA进行人脸特征提取,获取特征矩阵向量组,将测试人脸投缘到特征子空间中,运用欧氏距离,在人脸库里查找相应的人脸图像,并输出。

算法介绍

基于PCA算法的人脸特征提取

2.1PCA的基本原理

PCA中文全称主成分分析 法(Principal Component Analysis)[6]。掌握事物间主要区别的,运用统计学的分析方法,它可以是复杂的问题得到简化,找到物质之间的本质区别,用事物的主要影响因素来解决问题。计算主成分的主要目的是用来降维,也就把将高维空间数据降到低维空间中去。这种线性变化经常被用到数据的压缩和分析中。它就是以K-L变换为基础,运用它的正交变换可以降低数据的运算量。

在这个系统中,库内人脸读入后被变成为灰度数值图像,把这些数值矩阵按行或者按列排练构成一个原始图像空间,运用K-L变换有效的提取人脸图像的特征,这是为下面的小空间模式匹配奠定基础,这个原始图像空间是维数较高的矩阵,通过K-L变换后获得一组新的正交基。分析比较人脸训练样本中的一些统计特征,保留主要的特征向量,减少向量矩阵的维数,获得了维数较小的人脸空间。在参与训练的人脸样本中,一种是不一样人脸组成的总体散分布矩阵,另一种是同个人脸的不同表情的平均图片或者说是类间散布矩阵。第一种的运用对人脸图像的背景光线的要求很高,后者可以很好的避免光线带来的的干扰,且有减少计算量的作用。选择的正交基的原则是取大去小,所谓的大、小就是特征值的的大小,特征值的数值反应一个人脸的基本特征轮廓,在主要成分分析中就是以它主要能量特征值对应的向量来做基底,用这个方法可以很好的进行人脸重构,重构的人脸必须是参与算法的人脸图像,否则实现重建的效果较差。

通过降维后,就可以获得特征空间,将待识别人脸图像进行旋转变换,可以有效的降低维数[9]。也就是用特征空间的向量的线性代数运算来表示。这样就可以把人脸识别这个过程转换成m维空间坐标系数分类问题,至于如何分类可以采用简单的距离进行判断。

2.2 基于PCA的特征提取

PCA人脸识别特征提取有几个过程:人脸图像获取和处理;构造人脸库并且训练形成特征子空间;提取特征值和特征向量。下面对整个PCA提取特征过程中的步骤做一个详细的描述。

  1. 人脸图像获取和处理,构造人脸库

通过拍照的方式,在背景设定的环境下,拍取人脸图像,然后对人脸样本采取前期的处理,其中包括人脸图像格式的变换,是否需要灰度处理等等。这些都要根据算法需求来对图像进行前期的预处理。PCA算法运用的统计学原理中的K-L变换的原理,对图像背景要求一致,而对光线的要求也一般,前期只要保证图像像素和格式一致就可以。最后保存图像,建立人脸库。

2.训练人脸库

人脸图像获取后,要放进人脸库,把人脸库统一配置后,选取每个人若干图片参与训练,变成训练矩阵。假定格式统一的人脸图像的像素为n*m,采取变换转化为一维矩阵,然后按行相连构成N=m*n维数的的矢量,每个人脸图像都可以视为N维空间中的一点,运用K-L变换可以将这个图像转换到底维的空间当中去,这样描述更加具体。

3.计算人脸图像的生成矩阵

采用训练后的人脸图像构成样本集,产生协方差矩阵可以用以下几种方法求出来(三种等价):

协方差矩阵 是一个大小为N*N的合成矩阵(其中N表示 的维数),A 表示每个人脸灰度图像减去平均人脸图像后按列构成的的矩阵, 是平均人脸图像,M表示人脸库内参与训练的人脸数。

鉴于公式的复杂性,一般选择第二个公式来计算人脸特征值和特征向量。

4.提取特征值和特征向量

在我们获得协方差矩阵后,需要求出其特征值和特征向量,由于PCA的理论基础是K-L变换,而我们所求的K-L变换的新坐标系是由N*N维的矩阵 的特征值和特征量组成,直接求 的这两个参数难度高计算量非常大,下面介绍两种方法:

(1)奇异值分解原理

前几个值比较大他们包涵了矩阵的A的大部分信息,U的列向量(左奇异向量)是 的特征向量,V的列向量(右奇异向量)是 的特征向量[11]。

(2)小矩阵计算大矩阵特征向量原理

在求高维矩阵特征向量时,可以用统计学的方法,将它变换为求转化为求低维矩阵的特征向量:

注意:以上两种求解协方差矩阵的特征值和特征向量的方法,结果是一致的[12]。

2.3 相似性测度

人脸样本在用PCA算法获取人脸特征后,转换为特征空间内的一点。所以样本之间的区分性可以运用角度或者距离的计算来比较实现。常见的匹配的算法有夹角余弦、街区距离、和欧式距离等等,下面具体的描述下欧式距离这个测度。

欧式距离的定义:欧式距离(Eudidean distance)是一个普遍使用的距离定义,它说明某种物质在多维空间的真实距离。欧式距离看作是衡量物质的相似程度的依据,两个点的距离差越小就越一样。

假如x,y是两幅维数一样的图像,它们的维数都是是M*N,则它在一个设定空间的表示如下:

式中 为图像x,y的第(k,1)个像素点。则图像间的欧式距离可表示如下为:

根据上述式子,一副M*N的图像可以看作M*N维欧式空间中的一个点,而图像的坐标用图像的一个像素的灰度值表示。

三、 程序仿真及调试结果

3.1人脸库的生成

人脸库的建立可以运用目前现有的ORL人脸数据库、JAZZ人脸数据库等,这些人脸库内的人脸都是按某个标准建立,所以在设计人脸之前,必须针对需要,来选择。或者你也可以自己构造人脸数据库,库内人脸可以采用拍照等方式来获取。不过要进行一些前期处理,以满足系统要求。本系统是收集互联网上的图像获取图像,然后实现格式以及大小一致

图: 部分人脸图像截图

上图就是部分人脸库内人脸图像截图。这个人脸库分为测试人脸库和训练人类库,在训练人脸库内的所有人脸数目有二十张,十个人的,一个人有两张图像,不同的表情。在测试人脸库内有10张人脸,这10张人脸是在训练库内挑选的10个人脸表情。每张人脸图像的大小为180*200,格式为JPG。因为本系统针对的图像格式要求必须为JPG格式的图像。我把这20张图片的命名,用数字1-20来代替,以便后面在识别阶段,可以读出对应的数字,类似人的名字

3.2特征提取和人脸重建的仿真分析

(1) 根据PCA算法的获取人脸库特征值分布图

特征提取首先把库内待训练的人脸图像,读入matlab转换成灰度图像,进而将人脸图像按行排列,构成协方差矩阵,这个协方差矩阵里面,每一行都代表一个人脸,所以求这个协方差矩阵的特征值和特征向量,也就是求每个人脸的特征,每个特征值对应的特征向量,构成了特征向量子空间,下图中曲线的就是库内所有人脸图像进行特征提取获得特征值后,按特征值大小排列,由图可以看出,每张人脸图像对应特征值大小的区别性很大,只要提取数值较高的特征值对应的特征向量来组成特征子空间即可,大大的减少了特征矩阵的向量的数量,这样可以降低计算量,提高特征提取的运算速率。也为后面的人脸识别系统运行提高速度。

图: 特征值分布图

3.3 模板匹配及识别的仿真分析

图:4-7人脸匹配效果1

图:4-8人脸匹配效果2

对比图4-6和图4-7这两幅图像,可以看出本系统可以很好的匹配库内人脸,这匹配过程是先测试人脸投影到特征子空间中,这 样便可以 让这张图像成为多维空间中的一点,通过计算其与每个人脸图像的欧式距离,然后对比找出最小欧式距离的人脸,这样就可以匹配到相应的人脸图像。

  1. GUI界面仿真

库外人脸判别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2222385.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

给哔哩哔哩bilibili电脑版做个手机遥控器

前言 bilibili电脑版可以在电脑屏幕上观看bilibili视频。然而,电脑版的bilibili不能通过手机控制视频翻页和调节音量,这意味着观看视频时需要一直坐在电脑旁边。那么,有没有办法制作一个手机遥控器来控制bilibili电脑版呢? 首先…

基于SpringBoot+Vue+uniapp的时间管理小程序的详细设计和实现(源码+lw+部署文档+讲解等)

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不…

【文件加密系统】华企盾DSC服务程序启动失败解决办法

问题原因: 1.sa账户密码错误导致连接数据数据库失败无法启动DSC服务 解决方法: 用windows身份验证进入数据库更改sa用户密码:安全性>登录名>sa>右键属性>更改密码 ※如果显示请输入秘钥更改,使用更改完密码的sa账户登…

从0开始深度学习(16)——暂退法(Dropout)

上一章的过拟合是由于数据不足导致的,但如果我们有比特征多得多的样本,深度神经网络也有可能过拟合 1 扰动的稳健性 经典泛化理论认为,为了缩小训练和测试性能之间的差距,应该以简单的模型为目标,即模型以较小的维度的…

机器学习与神经网络:科技的星辰大海

前提 近日,2024年诺贝尔物理学奖颁发给了机器学习与神经网络领域的研究者,这是历史上首次出现这样的情况。这项奖项原本只授予对自然现象和物质的物理学研究作出重大贡献的科学家,如今却将全球范围内对机器学习和神经网络的研究和开发作为了一…

RSocket vs WebSocket:Spring Boot 3.3 中的两大实时通信利器

RSocket vs WebSocket:Spring Boot 3.3 中的两大实时通信利器 随着现代互联网应用的不断发展,实时通信已经成为许多应用程序不可或缺的功能。无论是社交网络、在线游戏还是数据监控系统,实时通信都能提供快速、无缝的信息交换。而实现实时通…

“主升筹码”,底部建仓信号+主升加仓位置,不错过任何行情

使用技巧 指标分为主图和副图 其中,主图主升筹码信号较多,副图的信号较少。这里,我说一个选股思路,就是底部主升筹码共振进场,上升过程中主图信号当作加仓信号。 选股,提供一个主升筹码共振选股&#xff0…

Redis 5.0 安装配置(Windows)

Redis 5.0之后支持Redis Stream等功能 下载地址:Releases tporadowski/redis GitHub 点击运行redis-server.exe 此外:Redis 6.0及以后版本目前都没有Windows版

【越狱插件】内网穿透 frpc、frps插件

内网穿透、frp、frpc、frps https://zhaoboy9692.github.io/repo 越狱源 https://zhaoboy9692.github.io/repo 苦于在ios越狱下没有frp穿透使用 特地开发了的越狱插件 基于最新frp0.48编译 ios14.6测试没问题 有问题及时反馈

ubuntu中使用cmake编译报错No CMAKE_CXX_COMPILER could be found.的解决方法

ubuntu中使用cmake编译报错No CMAKE_CXX_COMPILER could be found.的解决方法 No CMAKE_CXX_COMPILER could be found.Could NOT find CUDA (missing: CUDA_NVCC_EXECUTABLE CUDA_CUDART_LIBRARY)Could not find a package configuration file provided by "OpenCV" …

【SQL|大数据|数据清洗|过滤】where条件中 “ != “ 和 “ NOT IN() ” 对NULL的处理

对数据进行清洗过滤的时候,NULL往往是一个很特殊的存在,对NULL值的存在通常有以下三种方式 1、保留NULL 2、过滤掉NULL 3、将NULL替换为其他符合业务需求的默认常量 下面是一些常用处理NULL的方式: 如下图所示数据源: car_vin&…

android openGL ES详解——缓冲区VBO/VAO/EBO/FBO

目录 一、缓冲区对象概念 二、分类 三、顶点缓冲区对象VBO 1、概念 2、为什么使用VBO 3、如何使用VBO 生成缓冲区对象 绑定缓冲区对象 输入缓冲区数据 更新缓冲区中的数据 删除缓冲区 4、VBO应用 四、顶点数组对象VAO 1、概念 2、为什么使用VAO 3、如何使用VAO…

ai修复照片工具哪个好?在线将模糊图像变清晰就用它

最近想尝试学习一下复古照片的拍摄风格,一波翻箱倒柜的操作翻出了以前家里拍的照片,却发现有些照片出现了氧化褪色,看不清原本图像的情况。 想看清晰一点的照片却找不到原本的底片,没办法再次冲洗新的相纸出来,该怎么…

Generative AI project lifecycle 生成式人工智能项目的全生命周期

这篇文章,你将学习到开发和部署一个由LLM驱动的应用程序所需的技术。在你将了解一个生成式AI项目的全生命周期,这可以帮助指导你完成这项工作。这个框架映射出了从概念到发布所需的任务。这里有一个整体生命周期的图表。我们将逐个阶段地讨论它。 在任何…

一文说明MySQL索引

最近研究了一下关于MySQL索引方面的面试题,以及可能拓展的问题,与大家分享 索引 在MySQL中,常见的索引类型包括以下几种: 普通索引(INDEX) :这是最基本的索引类型,可以包含一个或多…

基于springboot+vue实现的助学兼职系统(源码+L文+ppt)4-092

基于springbootvue实现的助学兼职系统(源码L文ppt)4-092 第4章 系统设计 4.1 总体功能设计 一般学生、招聘公司和管理者都需要登录才能进入助学兼职系统,使用者登录时会在后台判断使用的权限类型,包括一般使用者和管理者,一般使…

探索 Python 中的 XML 转换利器:xml2dict

文章目录 **探索 Python 中的 XML 转换利器:xml2dict**一、背景介绍二、xml2dict 是什么?三、如何安装 xml2dict?四、基本用法五、实际应用场景六、常见问题及解决方案七、总结 探索 Python 中的 XML 转换利器:xml2dict 一、背景…

构建智能暖箱监控系统:基于C#和WPF的完整指南

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

鸿蒙前端-1. 层叠效果

代码Stack({alignContent:Alignment.Center}){ Item1() Item2() Item3()} 默认是居中对齐,后面的Item的优先级比前面的要高。 特点:代码简洁&…

stm32实现esp8266连接到TCP服务器(二)

1.2 连接到TCP Server 1.2.1 使用网络助手,设立TCP服务器 ​ 编辑 1.2.2 连接服务器 ATCIPSTART"TCP","192.168.1.18",8080 //指令,注意双引号逗号都要半角(英文)输入 CONNECT //结果:成功 OK //结果:成功 …