热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:图像识别基于ORL数据库的PCA人脸识别系统matlab源码

篇首语:本文由编程笔记#小编为大家整理,主要介绍了图像识别基于ORL数据库的PCA人脸识别系统matlab源码相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了图像识别基于ORL数据库的PCA人脸识别系统matlab源码相关的知识,希望对你有一定的参考价值。






1. PCA人脸识别操作流程

    在平时的研究中,我总结的PCA人脸识别的主要流程如下图所示:

                                

                                                    图 1 PCA人脸识别流程图

      通过上图的PCA人脸识别流程可以看出,PCA方法可以总结为以下几个阶段:训练样本、特征提取、构造特征空间、投影计算。

 

 

2. PCA人脸识别方法原理介绍

       Karhunen-Loeve(K-L)变换或主要分量分析(Principal Component Analysis,PCA)是普遍使用的一种技术,这种技术的主要作用是将续信号转换为一组不相关的表示系数。主要分量分析(PCA)形成了K-L变换的基础,主要用于数据的紧凑表示。在数据挖掘的应用中,它主要应用于简化大维数的数据集合,减少特征空间维数,可以用较小的存储代价和计算复杂度获得较高的准确性。

    PCA方法通过消除数据的相关性,找到一个空间,使得各个类别的数据在该空间上能够很好地分离。如下图所示:

                                              

                                                  图 2 PCA降维和分类示意图

在图2中,有一些离散的二维分布点,其中五角星表示一类集合,小圆圈表示另一类集合,假设这两个类别可以用特征X和特征Y进行描述,由图可知,在X轴和Y轴上这两个类别的投影是重叠的,表明这些点的两个特征X和Y没有表现出突出的识别性。但是两个类的投影在Z轴上区分度较大,显示出很好的识别性。PCA就是这样的一个工具,它可以产生非常好的降维效果,这种方法也可以用在图像处理的其他的一些研究中,如图像压缩、分类以及特征选择等。

    接下来详细介绍一下PCA的理论原理:

    通过对主成分分析方法做了简单的说明以后,接下来,我们来具体分析一下K-L变换的原理。

    假设在图像集合f(m,n)中,每张图像可以用堆叠的方式表示成一个维列向量:

 

                                     (1)

其表示方法为:从图像矩阵的第一列开始取,依次取到最后一列,每一列首尾相连,构成一个维列向量。将每一幅人脸图像表示

列向量以后,然后依次将每一个图像列向量转置成行向量,构成一个人脸样本矩阵,该样本矩阵即图像集合:

                                                     (2)

由式(2)可知样本矩阵有L行,其中每一行的数据就代表一张人脸样本图像,L表示训练样本的总个数。  

训练样本的协方差矩阵为:

                                                                                     (3)

式中mf是所有训练样本的平均值向量,也即是所有样本的平均脸。(3)式中的[Cf]阵为阶实对称方阵,则其一定存在个相互正交的属于各个特征值的特征向量,即有:

                                                                            (4)

将上述特征值进行降序排列,并取每个特征值对应的特征向量构成一个正交矩阵,也即是一个维的正交空间。按照文献中的说明,此处的矩阵[Cf]的维数很大,求解其特征值和特征向量比较复杂,这个时候需要对(3)式进行变形,简化求解,其变形结果如下:

                                                                         (5)

此时,对(5)式中的矩阵进行特征值和特征向量的求解,将求解出的特征向量和特征值经过SVD奇异值分解,得到原训练样本的特征向量,这样就可以构造出最终的人脸投影空间。

                                                             (6)

其中vi就是(5)中协方差矩阵的特征向量,p是特征向量的个数。将特征向量转化为矩阵,矩阵就可以表示图像,也即是所谓的特征脸,如下:

                        

                                              图 3 PCA特征脸

到这里为止,我们就找到了PCA人脸识别需要的投影特征空间了:

                  (7)

接下来就可以通过K-L变换式进行投影计算了,得出各个样本在空间Wpca上的投影特征了:

                                                                                                  (8)

其中[A]就是空间Wpca,其实(8)式中不用(f-mf)也行,直接换成f就可以,即表示将原人脸样本在空间Wpca上进行投影,将投影后的特征系数存在矩阵g中,如果没有记错的话,g中每一行表示一个人脸样本的特征系数(或者每一列表示一个人脸样本的特征稀疏,这个与个人的计算方法有关,主要是看矩阵的转置或者不转置)。

    到这里PCA人脸识别的主要步骤已经介绍完了,剩下的就是识别过程了,这个比较容易理解,首先将训练样本在空间[A]上进行投影,得到投影样本的特征系数,然后将测试样本也在空间[A]上进行投影,得到每个测试杨样本的投影特征系数,此时,只需将测试某个样本的特征系数与训练样本投影特征系数进行欧式距离度量,看要测试的那个样本与训练集中哪个样本的欧式距离最近,就可以将该测试样本归为与之距离最近那个样本的类别。比如:训练样本a1属于S1类(S1类中包含很多样本,a1只是其中的一个样本),如果测试样本b1和a1的距离最近,那么就将b1归为S1类。如此下来,对所有的样本进行分类,就可以得到PCA人脸识别率了。



%测试数据:40人,每人10张照片。每人取前train_num张照片作为训练集,后(10-train_num)张照片作为测试集。
clear all;
clc;
train_num=5;

%计算特征脸并创建特征空间
imdata=zeros(112*92,40*train_num);
for i=1:40
for j=1:train_num
addr=strcat('Dum2str(j),'.bmp');
a=imread(addr);%从地址中读入图像
b=a(1:112*92); %把图像a矩阵按列顺序转为行向量b
imdata(:,train_num*(i-1)+j)=b'; %把b的转置矩阵存放到imdata矩阵的第ph*(i-1)+j列
end
end
[neednum,average_face, immin, newVT] = newVT(imdata);
OutputClass = Recognition('\\FaceRecognitionPCA\\faces\\s29\\6.bmp',neednum,average_face, immin,newVT)

完整代码或者仿真咨询添加QQ1575304183




推荐阅读
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • 探讨 jBPM 数据库表结构设计的精要与实践
    探讨 jBPM 数据库表结构设计的精要与实践 ... [详细]
  • 表面缺陷检测数据集综述及GitHub开源项目推荐
    本文综述了表面缺陷检测领域的数据集,并推荐了多个GitHub上的开源项目。通过对现有文献和数据集的系统整理,为研究人员提供了全面的资源参考,有助于推动该领域的发展和技术进步。 ... [详细]
  • 第三届人工智能、网络与信息技术国际学术会议(AINIT 2022)
    20223rdInternationalSeminaronArtificialIntelligence,NetworkingandInformationTechnology第三届 ... [详细]
  • 最近版上有不少人在讨论图像处理的就业方向,似乎大部分都持悲观的态度。我想结合我今年找工作的经验谈谈我的看法。就我看来,个人觉得图像处理的就业还是不错的。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 在 Ubuntu 中遇到 Samba 服务器故障时,尝试卸载并重新安装 Samba 发现配置文件未重新生成。本文介绍了解决该问题的方法。 ... [详细]
  • 在《数字图像处理及应用(MATLAB)第4章》中,详细探讨了“逢七必过”游戏规则的实现方法,并结合数字图像处理技术进行了深入分析。本章通过丰富的实例和代码示例,展示了如何利用MATLAB实现这一游戏规则,并介绍了数字图像处理的基本原理和技术应用。内容涵盖了图像增强、滤波、边缘检测等多个方面,为读者提供了全面的技术支持和实践指导。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 本文详细介绍了在Linux系统上编译安装MySQL 5.5源码的步骤。首先,通过Yum安装必要的依赖软件包,如GCC、GCC-C++等,确保编译环境的完备。接着,下载并解压MySQL 5.5的源码包,配置编译选项,进行编译和安装。最后,完成安装后,进行基本的配置和启动测试,确保MySQL服务正常运行。 ... [详细]
  • 探索聚类分析中的K-Means与DBSCAN算法及其应用
    聚类分析是一种用于解决样本或特征分类问题的统计分析方法,也是数据挖掘领域的重要算法之一。本文主要探讨了K-Means和DBSCAN两种聚类算法的原理及其应用场景。K-Means算法通过迭代优化簇中心来实现数据点的划分,适用于球形分布的数据集;而DBSCAN算法则基于密度进行聚类,能够有效识别任意形状的簇,并且对噪声数据具有较好的鲁棒性。通过对这两种算法的对比分析,本文旨在为实际应用中选择合适的聚类方法提供参考。 ... [详细]
  • Python与R语言在功能和应用场景上各有优势。尽管R语言在统计分析和数据可视化方面具有更强的专业性,但Python作为一种通用编程语言,适用于更广泛的领域,包括Web开发、自动化脚本和机器学习等。对于初学者而言,Python的学习曲线更为平缓,上手更加容易。此外,Python拥有庞大的社区支持和丰富的第三方库,使其在实际应用中更具灵活性和扩展性。 ... [详细]
  • 吴裕雄数据挖掘实战案例(13):GBDT模型的深入应用与解析
    #导入第三方包importpandasaspdimportmatplotlib.pyplotasplt#读入数据defaultpd.read_excel(r&# ... [详细]
  • 联邦学习: 联邦场景下的时空数据挖掘
    不论你望得多远,仍然有无限的空间在外边,不论你数多久,仍然有无限的时间数不清。——惠特曼《自己之歌》1.导引时空数据挖掘做为智慧城市的重要组成部分,和我们的日常生活息息相关。如我 ... [详细]
author-avatar
熙8778_565
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有