opencv中人脸识别算法的基本原理(一)

使用opencv中自带的三种人脸识别算法进行实验后,特意去了解学习了一下其基本原理,在这里记录下。

opencv人脸识别

关于如何使用opencv实现人脸识别的过程可以参考:
http://blog.csdn.net/wanghz999/article/details/78773643、
http://blog.csdn.net/wanghz999/article/details/78776240
这两篇博客。这里不再赘述。opencv支持3种人脸识别的算法,分别是:

  1. Eigen Faces
  2. Fisher Faces
  3. Local Binary Pattern Histograms(局部二值模式直方图)

本文对三种算法的基本原理进行介绍。

Eigenfaces的原理

Eigenfaces就是特征脸的意思,是一种从主成分分析(Principal Component Analysis,PCA)中导出的人脸识别和描述技术。特征脸方法的主要思路就是将输入的人脸图像看作一个个矩阵,通过在人脸空间中一组正交向量,并选择最重要的正交向量,作为“主成分”来描述原来的人脸空间。为了更好地理解特征脸方法,需要先了解PCA的主要过程。

PCA主要过程

在很多应用中,需要对大量数据进行分析计算并寻找其内在的规律,但是数据量巨大造成了问题分析的复杂性,因此我们需要一些合理的方法来减少分析的数据和变量同时尽量不破坏数据之间的关联性。于是这就有了主成分分析方法,PCA作用:

  • 数据降维。减少变量个数;确保变量独立;提供一个合理的框架解释。
  • 去除噪声,发现数据背后的固有模式。

PCA的主要过程:

  1. 特征中心化:将每一维的数据(矩阵A)都减去该维的均值,使得变换后(矩阵B)每一维均值为0;
  2. 计算变换后矩阵B的协方差矩阵C;
  3. 计算协方差矩阵C的特征值和特征向量;
  4. 选取大的特征值对应的特征向量作为”主成分”,并构成新的数据集;

特征脸方法

特征脸方法就是将PCA方法应用到人脸识别中,将人脸图像看成是原始数据集,使用PCA方法对其进行处理和降维,得到“主成分”——即特征脸,然后每个人脸都可以用特征脸的组合进行表示。这种方法的核心思路是认为同一类事物必然存在相同特性(主成分),通过将同一目标(人脸图像)的特性寻在出来,就可以用来区分不同的事物了。人脸识别嘛,就是一个分类的问题,将不同的人脸区分开来。特征脸方法的过程(先计算特征脸,然后识别人脸):

  1. 将训练集中的N个人脸拉成一列(reshape(1,1)),然后组合在一起形成一个大矩阵A。若人脸图像大小为m * m,则矩阵A的维度是m * m * N;
  2. 将N个人脸在对应的维度求平均,得到一个“平均脸”;
  3. 将矩阵A中N个图像都减去“平均脸”,得到新矩阵B;
  4. 计算B的协方差矩阵;
  5. 计算协方差矩阵的特征值和特征向量(特征脸);
  6. 将训练集图像和测试集图像都投影到特征向量空间中,再使用聚类方法(最近邻或k近邻等)得到里测试集中的每个图像最近的图像,进行分类即可。

在opencv中void EigenFaceRecognizer::train();就是对训练集进行处理最终得到特征向量和阈值的过程,其中的阈值用于后面对测试图像的识别。int EigenFaceRecognizer:: predict(InputArray src) const;是对测试图像进行识别。

特征脸识别的局限性

要让系统准确识别需要保证人脸图像满足:

  1. 待识别图像中人脸尺寸接近特征脸中人脸的尺寸;
  2. 待识别人脸图像必须为正面人脸图像。

若不满足此条件,识别错误率很高。从PCA方法的过程可以看出,特征脸识别的方法是以每张人脸的一个维度(可以看出是矩阵的一列)为单位进行处理的,求得的特征向量(特征脸)中包含训练集每个纬度的绝大部分信息。但是若测试集中人脸尺寸不同,那么与特征脸中维度的也就没法对应起来。

Fisherfaces

在将Fisherfaces之前需要对线性判别进行一定的说明。

Fisher线性判别分析(linear discriminant analysis,LDA)

线性判别分析是由Fisher提出的线性判别方法,可以用来处理两类的线性判别问题。两类的线性判别问题可以看做所有的样本投影到一个方向(或者说是一个维度空间中),然后再这个空间中确定一个分类的阈值。过这个阈值点且与投影方向垂直的超平面就是分类面。判别思路是选择投影方向,使得投影后两类相隔尽可能远,类内又尽可能聚集(类间方差最大,类内方差最小)。
它的过程分为:

  1. 确定最优的投影方向:
  2. 在这个方向上确定分类阈值;

Fisherfaces方法

Fisherfaces方法结合了PCA和LDA的优点,其具体过程如下:

  1. PCA降维:对原始样本进行PCA处理,获取PCA处理之后的新样本;
  2. LDA特征提取:对降维后的样本使用Fisher线性判别方法,确定一个最优的投影方向,构造一个一维的特征空间(这就被称为Fisherfaces),将多维的人脸图像投影到Fisherfaces特征空间,利用类内样本数据形成一组特征向量,这组特征向量就代表了人脸的特征。

在opencv中void FisherFaceRecognizer::train();就是对训练集进行处理最终得到特征向量和阈值的过程,其中的阈值用于后面对测试图像的识别。int FisherFaceRecognizer:: predict(InputArray src) const;是对测试图像进行识别。

opencv中人脸识别算法的基本原理相关推荐

  1. 【OpenCV图像处理入门学习教程六】基于Python的网络爬虫与OpenCV扩展库中的人脸识别算法比较

    OpenCV图像处理入门学习教程系列,上一篇第五篇:基于背景差分法的视频目标运动侦测 一.网络爬虫简介(Python3) 网络爬虫,大家应该不陌生了.接下来援引一些Jack-Cui在专栏<Pyt ...

  2. 人脸识别算法二:Fisherface(LDA)

    LDA线性判别分析 也称FLD(Fisher线性判别)是一种有监督的学习方法(supervised learning).目的:是从高维空间中提取出最优判别力的低维特征,这些特征使同一类别的样本尽可能的 ...

  3. python人脸识别opencv_python中使用Opencv进行人脸识别

    上一节讲到人脸检测,现在讲一下人脸识别.具体是通过程序采集图像并进行训练,并且基于这些训练的图像对人脸进行动态识别. 人脸识别前所需要的人脸库可以通过两种方式获得:1.自己从视频获取图像 2.从人脸数 ...

  4. 使用OpenCV进行人脸识别的三种算法(官方网翻译)

    怎样使用OpenCV进行人脸识别 本文大部分来自OpenCV官网上的Face Reconition with OpenCV这节内容(http://docs.opencv.org/modules/con ...

  5. 人脸识别算法_格灵深瞳在人脸识别算法测试(FRVT)中斩获全球第一

    1月6日,美国国家标准与技术研究院(NIST)公布了最新的人脸识别算法测试(FRVT)成果,格灵深瞳再次刷新纪录:在7项测试子任务中,获得2项第一.3项第二,综合排名世界第一的成绩. 过去几个月,很多 ...

  6. python视频图片识别算法_python利用Opencv进行人脸识别(视频流+图片)

    首先:需要在在自己本地安装opencv具体步骤可以问度娘 如果从事于开发中的话建议用第三方的人脸识别(推荐阿里) 1.视频流中进行人脸识别 # -*- coding: utf-8 -*- import ...

  7. 简析美颜sdk中的人脸识别算法

    我们可能在网上听说过人脸检测.人脸识别等算法,那么这些常用于美颜sdk的算法之间,到底有没有联系?答案是"有的". 一般来说,可以将人脸识别算法分为基础层算法与应用层算法.而开头提 ...

  8. OpenCV+python 人脸识别

    首先给大家推荐一本书:机器学习算法原理与编程实践 本文内容全部转载于书中,相当于一个读书笔记了吧 绪论 1992年麻省理工学院通过实验对比了基于结构特征的方法与基于模版匹配的方法,发现模版匹配的方法要 ...

  9. 人脸识别算法初次了解

    人脸识别算法初次了解 这是转载别人的帖子,认为好,大家一块学习http://www.cnblogs.com/guoyiqi/archive/2011/07/28/2129300.html 前言 在写此 ...

最新文章

  1. 清华计算机本硕博连读!中国籍袁昱博士当选2022年IEEE标准协会候任主席
  2. mysql中修改表的默认编码和表中字段的编码
  3. 未来流媒体工作流的核心技术
  4. linux系统脚本安装失败,ubuntu16.04下vim安装失败的原因分析及解决方案
  5. jQuery formValidator 表单校验插件4.1.1高仿网易邮箱注册页面(已发演示链接)
  6. 记一次修改redis需要外部访问
  7. sql 的 DATE_FORMATE()函数
  8. Android Drawable之getIntrinsicWidth()和getIntrinsicHeight()
  9. 44.mysqlbinlog
  10. 分布式数据库系统原理(第三版)pdf
  11. 企业信息安全整体架构
  12. 实测 ? 2019 史上最全 28个国外国内免费虚拟手机号平台
  13. 安装pyltp遇到的问题
  14. centos查询 硬盘序列号查询_CentOS/Linux 查看硬件配置CPU内存磁盘
  15. 英语高考听力测试软件,高考英语听力训练app
  16. SAP 和 ERP 区别
  17. SPSS实战:单因素方差分析(ANOVA)
  18. 可视化常见绘图(四)柱状图
  19. 【RPA之家BluePrism手把手教程】BluePrism下载与安装
  20. H.264的两个概念:DC系数和AC系数

热门文章

  1. IFR报告称新冠疫情后的恢复对“机器人技术”的需求很高
  2. python中列表的基本操作
  3. python换发型_神经网络P图神器:摘墨镜,戴美瞳,加首饰,换发型【TensorFlow实现】...
  4. STM32F767 资料汇总
  5. HSSFWorkbook导出Excel数据换行和设置行高
  6. u盘无法识别怎么办?看完不愁数据恢复
  7. 2022年乡村医生考试练习题及答案
  8. 01语言基础-系统模块和文件操作20220428
  9. VUE 前端中如何进行组件化开发?
  10. Maven配置 settings.xml 配置阿里云镜像