首先,只是基于对算法的主要是想的介绍和理解,对于涉及到的PCA以及直方图比较提到的方法等等可以自己再去深入研究。

其次,只是用作笔记记录。

参考了CSDN博客:https://blog.csdn.net/smartempire/article/details/23377385

https://blog.csdn.net/wanghz999/article/details/78817265

 

Eigenfaces的原理:
Eigenfaces就是特征脸的意思,是一种从主成分分析(Principal Component Analysis,PCA)中导出的人脸识别和描述技术。特征脸方法的主要思路就是将输入的人脸图像看作一个个矩阵,通过在人脸空间中一组正交向量,并选择最重要的正交向量,作为“主成分”来描述原来的人脸空间。
PCA:
在很多应用中,需要对大量数据进行分析计算并寻找其内在的规律,但是数据量巨大造成了问题分析的复杂性,因此我们需要一些合理的方法来减少分析的数据和变量同时尽量不破坏数据之间的关联性。于是这就有了主成分分析方法,
PCA作用:

数据降维。减少变量个数;
确保变量独立;提供一个合理的框架解释。

去除噪声,发现数据背后的固有模式。

PCA的主要过程:


特征中心化:将每一维的数据(矩阵A)都减去该维的均值,使得变换后(矩阵B)每一维均值为0;
计算变换后矩阵B的协方差矩阵C;

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

选取大的特征值对应的特征向量作为”主成分”,并构成新的数据集;
特征脸方法

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

将训练集中的N个人脸拉成一列(reshape(1,1)),然后组合在一起形成一个大矩阵A。若人脸图像大小为m * m,则矩阵A的维度是m * m * N;
将N个人脸在对应的维度求平均,得到一个“平均脸”;
将矩阵A中N个图像都减去“平均脸”,得到新矩阵B;
计算B的协方差矩阵;
计算协方差矩阵的特征值和特征向量(特征脸);
将训练集图像和测试集图像都投影到特征向量空间中,再使用聚类方法(最近邻或k近邻等)得到里测试集中的每个图像最近的图像,进行分类即可。或者通过计算测试图片和已知图片的欧氏距离与自己设定的阈值进行比较,如果均大于阈值则不符合,否则符合某一张图片。
特征脸识别的局限性

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

待识别图像中人脸尺寸接近特征脸中人脸的尺寸;
待识别人脸图像必须为正面人脸图像。
若不满足此条件,识别错误率很高。从PCA方法的过程可以看出,特征脸识别的方法是以每张人脸的一个维度(可以看出是矩阵的一列)为单位进行处理的,求得的特征向量(特征脸)中包含训练集每个纬度的绝大部分信息。但是若测试集中人脸尺寸不同,那么与特征脸中维度的也就没法对应起来。
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
FisherFace算法:
Fisher线性判别分析(linear discriminant analysis,LDA)
两类的线性判别问题可以看做所有的样本投影到一个方向(或者说是一个维度空间中),然后再这个空间中确定一个分类的阈值。过这个阈值点且与投影方向垂直的超平面就是分类面。判别思路是选择投影方向,使得投影后两类相隔尽可能远,类内又尽可能聚集(类间方差最大,类内方差最小)。

 


它的过程分为:

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

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


PCA降维:对原始样本进行PCA处理,获取PCA处理之后的新样本;

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

<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
LBP算法:
最初的LBP是定义在像素3x3邻域内的,以邻域中心像素为阈值,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为1,否则为0。这样,3x3邻域内的8个点经比较可产生8位二进制数(通常转换为十进制数即LBP码,共256种),即得到该邻域中心像素点的LBP值,并用这个值来反映该区域的纹理信息

 


改进的LBP:
圆形LBP算子:

 


Xp=Xc+Rcos(2πp/p)
Yp=Yc-Rsin(2πp/p)
Xc,Yc为领域中心点,Xp,Yp为某个采样点,通过上式可以计算出任意个采样点的坐标,计算得到的坐标未必是整数值,可以通过双线性插值来得到该采样点的像素值
LBP等价模式:
一个LBP算子可以产生不同的二进制模式,对于半径为R的圆形区域内含有P个采样点的LBP算子将会产生2^P种模式。很显然,随着邻域集内采样点数的增加,二进制模式的种类是急剧增加的。例如:5×5邻域内20个采样点,有220=1,048,576种二进制模式。如此多的二值模式无论对于纹理的提取还是对于纹理的识别、分类及信息的存取都是不利的。同时,过多的模式种类对于纹理的表达是不利的。例如,将LBP算子用于纹理分类或人脸识别时,常采用LBP模式的统计直方图来表达图像的信息,而较多的模式种类将使得数据量过大,且直方图过于稀疏。因此,需要对原始的LBP模式进行降维,使得数据量减少的情况下能最好的代表图像的信息。
为了解决二进制模式过多的问题,提高统计性,Ojala提出了采用一种“等价模式”(Uniform Pattern)来对LBP算子的模式种类进行降维。Ojala等认为,在实际图像中,绝大多数LBP模式最多只包含两次从1到0或从0到1的跳变。因此,Ojala将“等价模式”定义为:当某个LBP所对应的循环二进制数从0到1或从1到0最多有两次跳变时,该LBP所对应的二进制就称为一个等价模式类。如00000000(0次跳变),00000111(只含一次从0到1的跳变),10001111(先由1跳到0,再由0跳到1,共两次跳变)都是等价模式类。除等价模式类以外的模式都归为另一类,称为混合模式类,例如10010111(共四次跳变)。将许多类减少成为P(P-1)+2种

LBP对光照有明显的鲁棒性

不是直接用计算得到的LBP值之后进行人脸识别,而是将一张人脸照片分为若干子区域,并在子区域内根据LBP值统计其直方图,以直方图作为其判别特征,可以避免一定范围内图像没有完全对准的情况,同时也对LBP做了降维处理

对于得到的直方图特征,有多种方法可以判别其相似性,假设已知人脸的直方图为Mi,待匹配人脸的直方图为Si,那么通过:
(1)直方图交叉核方法
(2)卡方统计方法