(学习笔记三)——人脸识别

本文介绍了人脸识别技术,重点讲解了主成分分析(PCA)在人脸识别中的应用。PCA用于压缩图像数据并创建特征脸,从而实现人脸识别。文章通过OpenCV库详细阐述了PCA的原理,包括如何计算特征值和特征向量,以及如何使用cvCalcEigenObjects和cvEigenDecomposite函数进行图像投影。通过学习,读者能够理解人脸识别的基本流程,并具备实现人脸识别程序的能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

人脸识别要牵涉到一些数学计算和一些算法的理解,虽然这些算法和计算opencv已经帮我们完成,但我们还是要对其有一定的了解,才能进行人脸识别的实践,毕竟基础不牢,上层建筑也不稳。
要理解如何进行人脸识别,首先一定要理解主成分分析算法,即PCA,使用这种算法的原因是因为,一般图像数据量太大,而且其中的大部分数据点对我们进行人脸识别没有太大的帮助,因此为了减少数据量,采用了主成分分析法将数据进行压缩(算法中称为投影),然后用压缩后的图像进行图像识别的进一步应用。PCA的原理在前面的一篇文章中已经讲到过,大家可以参考: PCA原理。肯能看完这个文章,大家开始对PCA有一定的理解,但总还是感觉有点模糊,因为那篇文章我只是转载,并没有进行太多自己的想法的标注,因此有些混乱,那么大家可以再继续读下面这篇文章:
PCA原理详解
在前面的PCA原理介绍中曾提到了两个函数,cvCalcPCA,cvProjectPCA。我在实际使用中参考了另外一篇文章,用的是另外两个函数,这个后面会讲到。这个不用太纠结,前面的文章可以只当学习原理的参考,等原理懂了之后看后面将要介绍的两个函数也会很简单。其中,有一点要说明,cvCalcPCA是新的PCA处理函数,而后面将要讲到的cvCalcEigenObjects是老的PCA处理函数。
经过上面的的两片文章相信大家应该对PCA的原理有所了解,下面开始讲怎样实现用PCA算法进行人脸识别。这个可以参考这篇文章:
http://www.cognotics.com/opencv/servo_2007_series/part_5/index.html
这篇是英文文章,希望大家多读英文文章,因为我们在学习过程中如果遇到国内教材较少的情况,一般都是要参考国外的文章的,并且擅长阅读英文文章也为我们打开了通往另外一个更为博大的知识库的大门。读完这篇文章一定可以自己做出人脸识别程序的,因为这篇文章介绍的已经十分详细。
但是,在这里我还是将上面那篇文章的原理介绍一下。我下面的叙述主要是针对在一个图像库中找出我们给定的图像最接近的图像,以人脸图像为例也就是说数据库中肯定是包含我所给出的这个人的人脸,虽然数据库中的图片跟我给出的图片不是同一张图片,但必须是同一个人。
首先假如我有代号为1,2,3三个训练人的人脸图像,人脸大小调整为一致,例如文章中为92*112,在我们的分析中是以一个像素点作为一维,因此每个图像可以认为是一个1*10304的行向量,这样三个训练人的人脸图像就组成了一个3*10304的矩阵。(注意,实际中每个图像还是存在92*112的iplimage结构中,这里只是为了讲解方便而进行的假象)。根据这个矩阵,就可以计算出相应的协方差矩阵,大小为10304*10304(这个大小我并没有考究,我觉得应该是这个大小,因为可以解释通上面那篇英文文章),接着再求出这个10304*10304的矩阵的特征值和特征向量,并取前nEigens个(这个个数由我们自己确定,文章中是取nEigens为训练人个数-1)特征值(注意由于前面特征值已经是由大到小排好顺序的,因此这几个就是最大的几个)对应的特征向量组成10304*nEigens大小投影矩阵(注意这里发生了转置,有opencv函数内部完成),即所谓的特征脸(因为每一列的规模就是一张人脸图像的规模),也即子空间。然后再将每个大小为1*10304的训练人脸图像矩阵乘以这个投影矩阵,就可以得到每个图像在主成分子空间的投影,大小为1*nEigens,并用这个投影矩阵进行后续的分析。可见,经过投影后图像数据量大大减小。上面的计算投影矩阵的过程由cvCalcEigenObjects完成,而投影则由cvEigenDecomposite函数完成,具体实现见英文文章。为了方便理解这两个函数可以参见: PCA的两个主要函数,这个空间内有两篇介绍这两个函数的文章。
同样,当给出测试图像时,先将测试人脸缩放为与训练人脸相同的大小,即92*112,然后用前面的特征矩阵将其投影到子空间
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值