基于PCA(主成分分析)的人脸识别

代码下载:基于PCA(主成分分析)的人脸识别

人脸识别是一个有监督学习过程,首先利用训练集构造一个人脸模型,然后将测试集与训练集进行匹配,找到与之对应的训练集头像。最容易的方式是直接利用欧式距离计算测试集的每一幅图像与训练集的每一幅图像的距离,然后选择距离最近的图像作为识别的结果。这种直接计算距离的方式直观,但是有一个非常大的缺陷—计算量太大。如果每幅图像大小为100*100,训练集大小1000,则识别测试集中的一幅图像就需要1000*100*100的计算量,当测试集很大时,识别速度非常缓慢。

解决上述问题的一个途径是对图像进行降维,通过只保留某些关键像素可以使识别速度大大提升。降维的一个方法即是PCA(主成分分析),在此我们介绍通过PCA进行人脸识别的步骤。

1 读取训练集图像数据

读取测试集目录下指定个数的图像,然后将其保存在一个二维数组中。如果图像个数为m,图像长宽为i、j,则我们创建一个二维数组A[m][i*j=n]用来保存图像数据。数组的每一行表示一个图像的所有像素信息,每一列表示一个随机变量,也即不同图像同一位置的像素信息,降维也即用更少的列来代表图像。

2 每列减去均值

将步骤一的每列减去该列的均值,这样每列的数据均值为0。在利用matlab的函数princomp执行PCA的过程中,princomp会首先将每一列减去该列均值,不用我们自己执行。

3 计算协方差矩阵

协方差矩阵表示不同随机变量之间的相互关系,图像中也即求任意两个像素之间的关系。如果两个随机变量的协方差为正或为负,表明两个变量之间具有相关性,如果为零表示两个变量不相关。通过计算协方差矩阵,我们就可以获得不同像素之间的关系。针对人脸识别,计算的协方差矩阵大小为n*n,其中n表示图像的像素点个数。

4 计算协方差矩阵的特征值和特征向量

由于协方差矩阵是实对称阵,所以可以求得其所有的特征值和特征向量,其共有n个特征值和特征向量。

5 选择主成分

所谓主成分即是具有最大特征值的特征向量,所以我们需要将特征向量按照特征值由大到小排序,然后根据精度要求选择不同数量的特征向量,例如我们选择了前p个特征向量,通常p远小于n(在我们的人脸识别实验中,为了达到95%的精度,p只有72,而n为120*140=17040)。

6 将训练集进行降维

此步骤将原始的训练集进行降维变换,原始的图像数据是m*n的矩阵,只包含主成分的特征向量构成一个n*p的矩阵(每一列都是一个特征向量)。将两个矩阵相乘,我们即可获得降维之后的图像矩阵m*p,这个矩阵远小于原始的图像数据。

7 将测试集进行降维

同步骤6相似,读取所有的测试集图像,然后对其也进行降维操作。如果测试集有M幅图像,则降维后的矩阵为M*p。

8 人脸识别

       该步骤为人脸识别的最后一步,用来对测试集进行识别,并计算识别准确率。该步骤有一个限制,测试集中的头像必须包含在训练集中,否则得出的结果将没有意义(这也就是代码一开始要求训练集大于测试集的目的)。识别的方法和最初的图像匹配方法类似:将测试集中的每一幅降维图像与降维的训练集进行匹配,然后将其分类到距离最小的训练集头像中,如果两个头像表示一个人,表示识别成功,否则表示识别失败。与原始的匹配相比,由于对图像进行了降维,所以匹配速度大大提升,在我们的实验中速度提升了200以上(120*142/72)。

如果想了解PCA的原理,请参考:PCA的数学原理

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

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

相关文章

从BMW Vision iNEXT 看宝马如何进军自动驾驶

安全很重要,空间也要很大,砍掉大量物理按键,内饰材料要环保,还要提供自动和主动两套驾驶方案。这些描述仅是BMW Vision iNEXT(下称Vision iNEXT)概念车的设计之冰山一角。 一款概念车当然无法完全代表未来…

CSS浮动(二)---Float

重新认识float 2.1. 误解和“误用” 既然提到“误用”,各位看官就此想想,自己平日是怎么使用float的?另外,既然“误用”加了引号,就说明这样的使用并不是真正的误用,而是误打误撞使用之后,带…

Hadoop0.20.2版本在Ubuntu下安装和配置

1、安装JDK   (1)下载安装JDK:确保计算机联网之后命令行输入下面命令安装JDK   sudo apt-get install sun-java6-jdk   (2)配置计算机Java环境:打开/etc/profile,在文件最后输入下面内容 …

云原生生态周报 Vol. 2

业界要闻 Kubernetes External Secrets 近日,世界上最大的域名托管公司 Godaddy公司,正式宣布并详细解读了其开源的K8s外部 Secrets 管理项目: Kubernetes External Secrets,简称KES。这个项目定义了ExternalSecrets API&#xff…

centos 7新机使用前操作

关闭防火墙 systemctl stop firewalld(停服务) systemctl status firewalld(看状态) systemctl disable firewalld.service (永久关闭) selinux getenforce(查状态) vi /etc/selinux…

ubuntu10.04+hadoop0.20.2平台配置(完全分布式模式)

配置环境及有关工具:ubuntu10.04 、hadoop0.20.2 、 jdk1.6.0_29 我们的机器有三台,一台当作namenode、两台当作datanode: namenode:IP:192.168.0.25、机器名:kiddenzj (这里的机器名要注意:机…

成佛、远不止渡沧海

地之及东南,有一海,称为“沧海”。沧海对面,就是仙家佛地。凡是能渡过沧海到达彼岸的人,就能立地成佛,修成正果。 于是,许许多多的人千里迢迢赶来,或乘帆船,或乘木筏,纷纷…

软件架构演进

传统架构到分布式架构详解 软件架构演进软件架构的发展经历了从单体架构、垂直架构、SOA架构到微服务架构的过程,博客里写到了这四种架构的特点以及优缺点分析,个人学习之用,仅供参考! 1.1.1 单体架构 特点:1、所有的…

hadoop0.20.0第一个例子

这是Hadoop学习全程记录第2篇,在这篇里我将介绍一下如何在Eclipse下写第一个MapReduce程序。 新说明一下我的开发环境: 操作系统:在windows下使用wubi安装了ubuntu 10.10 hadoop版本:hadoop-0.20.2.tar.gz Eclipse版本&…

IDEA 修改JavaWeb的访问路径

问题描述 对于我这个刚刚使用IDEA不久的新手来说,能够正常运行就不错了,不过到了后面,可能会觉得IDEA给你分配的默认访问路径很不顺手,比如访问的时候需要通过: http://localhost:8080/web_war_exploded/ 来访问,对于web_w…

防撞库基本要求

专用安全要求 口令要求 设计要求说明 要求 是否满足 密码长度至少 8位字符,密码复杂性要求至少包含以下4种类别中的2种:大写字母、小写字母、数字、特殊符号 必选 满足 系统应具备对口令强度检测的能力,并对用户进行提示(尽量不要…

odoo10 继承(扩展)、模块数据

一:继承 在不改变底层对象的时候添加新的功能——这是通过继承机制来实现的,作为在现有对象之上的修改层,这些修改可以发生在所有级别:模型,视图和业务逻辑。不是直接修改现有模块,而是创建一个新模块以添加…

做一个vue的todolist列表

<template><div id"app"><input type"text" v-model"todo" ref"ip"/><button click"add()">新增</button><br/><br/><hr/><ul><li v-for"(item,key) in li…

hadoop+hive-0.10.0完全分布式安装方法

hadoophive-0.10.0完全分布式安装方法 1、jdk版本&#xff1a;jdk-7u60-linux-x64.tar.gz http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk7-downloads-1880260.html 2、hive版本&#xff1a;hive-0.10.0.tar.gz https://archive.apache.org/dist/hive/hive-0…

关于gitgithub的操作

先马克&#xff0c;回头细看&#xff0c;然后整理一下 https://linux.cn/article-4292-1.html转载于:https://www.cnblogs.com/mengjie1001/p/10076530.html

一种解决 MacBook 里的 App Store 无法登录的问题

刚刚买回来的 2018 款带有 touchbar 的 MacBook Pro 15 inc 在用 App Store 安装 app 时一直无法登录成功&#xff08;网络链接都是好的&#xff09;&#xff0c;导致软件都无法更新&#xff0c;折腾了挺一会的。 后来发现是要退出设置里的 iCloud 登录&#xff0c;然后重新登录…

第二次冲刺

1、今日各个成员的问题 组员问题张晋誌对mui的API看得不是很懂&#xff0c;无法顺利的使用袁庆杰基础不牢,编写困难周建峰eclipse没法创建web项目&#xff0c;按照网上的方法&#xff0c;check for updates 和 install new software 之后也没用许家烨给单一功能知道如何实现但项…

牌类游戏使用微服务重构笔记(八): 游戏网关服务器

网关服务器 所谓网关&#xff0c;其实就是维持玩家客户端的连接&#xff0c;将玩家发的游戏请求转发到具体后端服务的服务器&#xff0c;具有以下几个功能点&#xff1a; 长期运行&#xff0c;必须具有较高的稳定性和性能对外开放&#xff0c;即客户端需要知道网关的IP和端口&a…

配置独立于系统的PYTHON环境

配置独立于系统的PYTHON环境 python 当前用户包 一种解决方案是在利用本机的python环境的基础上&#xff0c;将python的包安装在当前user的.local文件夹下 一共有两种方式来实现pip的时候安装到当前user 设置pip配置文件 pip.conf 一种是在~/.pip文件夹下的pip配置文件pip.conf…

好程序员技术教程分享JavaScript运动框架

好程序员技术教程分享JavaScript运动框架&#xff0c;有需要的朋友可以参考下。 JavaScript的运动&#xff0c;即让某元素的某些属性由一个值变到另一个值的过程。如让div的width属性由200px变到400px&#xff0c;opacity属性由0.3变到1.0&#xff0c;就是一个运动过程。 实现运…