热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Matlab人脸识别技术

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

算法流程:

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

v2-fd406ed284b8a13e8ffe482fd6fea7af_b.jpg

图: 人脸识别系统框架图

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

下载:MATLAB平台人脸识别[合影识别,分割多个人脸,GUI界面].zip_matlab人脸识别-专业指导文档类资源-CSDN下载

算法介绍

基于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.计算人脸图像的生成矩阵

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

v2-cc68825b9e625d85dc1e2661a0a514d1_b.jpg

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

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

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

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

(1)奇异值分解原理

v2-dfa608da04c0d11a12271227391d4eb2_b.jpg

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

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

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

v2-96d1ebcb3c59006b4878181a9b0929ff_b.jpg

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

2.3 相似性测度

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

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

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

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

v2-576564963f8e478afb526c1eb4f8deba_b.jpg

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

三、 程序仿真及调试结果

3.1人脸库的生成

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

v2-3d1152862e4bb93f2e1f3ed1a61bcf79_b.jpg

图: 部分人脸图像截图

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

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

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

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

v2-257332e8c14258fbba4df93f7c86e94b_b.jpg

图: 特征值分布图

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

v2-6822dea31050488fc5dbd2f2627baff3_b.jpg



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


v2-14d2cbb2f8b6bf9d2aca6f73db581ba8_b.jpg



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

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


  1. GUI界面仿真

库外人脸判别


v2-75a2cff28f5e70cc1f6d458c6c534896_b.jpg



v2-49e8f3e5d9dc15c153f1b6d0c858d722_b.jpg



推荐阅读
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 本文详细介绍如何利用已搭建的LAMP(Linux、Apache、MySQL、PHP)环境,快速创建一个基于WordPress的内容管理系统(CMS)。WordPress是一款流行的开源博客平台,适用于个人或小型团队使用。 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 主调|大侠_重温C++ ... [详细]
  • 本文将详细介绍通过CAS(Central Authentication Service)实现单点登录的原理和步骤。CAS由耶鲁大学开发,旨在为多应用系统提供统一的身份认证服务。文中不仅涵盖了CAS的基本架构,还提供了具体的配置实例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 深入解析Spring Cloud微服务架构与分布式系统实战
    本文详细介绍了Spring Cloud在微服务架构和分布式系统中的应用,结合实际案例和最新技术,帮助读者全面掌握微服务的实现与优化。 ... [详细]
  • 本文详细介绍了如何使用 PHP 编程语言输出 99 乘法表,包括使用不同的循环结构如 do-while、for 循环等方法,并提供了具体的代码示例。 ... [详细]
  • 反向投影技术主要用于在大型输入图像中定位特定的小型模板图像。通过直方图对比,它能够识别出最匹配的区域或点,从而确定模板图像在输入图像中的位置。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • 本文详细解析了Java中hashCode()和equals()方法的实现原理及其在哈希表结构中的应用,探讨了两者之间的关系及其实现时需要注意的问题。 ... [详细]
  • 本文详细介绍了福昕软件公司开发的Foxit PDF SDK ActiveX控件(版本5.20),并提供了关于其在64位Windows 7系统和Visual Studio 2013环境下的使用方法。该控件文件名为FoxitPDFSDKActiveX520_Std_x64.ocx,适用于集成PDF功能到应用程序中。 ... [详细]
  • 本文档汇总了Python编程的基础与高级面试题目,涵盖语言特性、数据结构、算法以及Web开发等多个方面,旨在帮助开发者全面掌握Python核心知识。 ... [详细]
  • 解决vCenter vSphere HA初始化失败的问题
    本文探讨了在集群中遇到的所有vSphere HA主机状态显示‘无法正确安装或配置vSphere HA代理’错误的情况,并详细介绍了排查与解决步骤,包括检查HA初始化错误及安装HA代理的常见故障排除方法。 ... [详细]
  • 盈透证券提现指南
    本文详细介绍了如何通过盈透证券平台安全有效地进行资金提现,包括推荐使用的浏览器、登录流程、资金转账的具体步骤以及注意事项。 ... [详细]
  • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
author-avatar
浪漫族屋nr
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有