基于OpenCV人脸识别Eigenfaces(特征脸)算法、Fisherfaces算法、Local Binary, Patter Histogram(LBPH)算法认识

一、Eigenfaces(特征脸)算法

在如今的世界,人脸识别也变得越来越重要,应用越来越广泛,比如人脸识别可用于身份认证、摄影、支付、视频等领域。现在人脸识别一般采用三种经典算法:Eigenfaces、Fiserfaces、LBPH,首先我来总结一下对Eigenfaces算法的一些学习情况或者认识。
Eigenface是在人脸识别的计算机视觉问题中使用的一组特征向量的名称,Eigenfaces是基于PCA(主成分分析)的,所以学习Eigenfaces需要我们了解PCA的原理。
主成分分析是一种矩阵的压缩算法,在减少矩阵维数的同时尽可能的保留原矩阵的信息,简单来说就是将 n×m的矩阵转换成n×k的矩阵,仅保留矩阵中所存在的主要特性,从而可以大大节省空间和数据量。下面简单的介绍一下它的数学原理:

基于OpenCV人脸识别Eigenfaces(特征脸)算法、Fisherfaces算法、Local Binary, Patter Histogram(LBPH)算法认识_第1张图片
假设一个坐标是(3,2),我们都知道在二维中3表示横坐标,2表示纵坐标。而坐标(1,0)(0,1)则为一个基点,可以说对于任意的一个坐标点(x,y)都可以表示为:
在这里插入图片描述
这个式子中的最左前方的部分的每一个行向量则代表一个基向量。如果想要更换基向量,我们就需要进行投影,将矩阵进行变换,也就是说需要将数据降到更低的维度,变换后的维度取决于基的数量。
PCA的实现需要进行降维,也就是将矩阵进行变换,从更高的维度降到低的维度,然而PCA的降维离不开协方差矩阵。方差是描述一维数据样本本身相对于均值的偏离程度,是一种用来度量两个随机变量关系的统计量,从角度来说,其夹角越小,值越大,方向越相近,也就是越正相关。协方差矩阵度量除了是两个随机变量的关系外,还是维度与维度之间的关系,而非样本与样本之间的关系。
学习一种新的东西,尤其是知识,我们需要了解知识中的思想。我在了解和学习Eigenface算法时它的思想是图像识别首先要选择一个合适的子空间,将所有的图像集中到这个子空间中,然后在这个子空间中衡量相似性或者进行分类学习,再讲子空间变换到另一个空间中,这样的作用一是同一个类别的图像离得更近,二是不同的类别的图像会离得比较远;这样经过线性分类分开的图像在新空间就能容易分开。同时特征脸技术会寻找人脸图像分布的基本元素,即人脸图像样本集协方差矩阵的特征向量,以此来表征人脸图像。人脸图像的基本元素有很多,比如眼、面颊、唇等基本元素,这些特征向量在特征脸的图像空间中对应生成的子空间被称为子脸空间。
生成了子空间之后就要进行空间构造,那么如何进行空间构造呢?首先要寻找人脸的共性,其次是要寻找个体与共性的差异,还有就是要明白共性其实是空间,个体就是向量。利用协方差矩阵把目标集中所有人脸图像的特征值进行分解,得到对应的特征向量,这些特征向量就是“特征脸”。寻找特征向量的特性,将其进行线性组合。在以每一个特征子脸为基的空间,每个人脸就是一个点,这个点的坐标就是每一个人脸在每个特征基下的的投影坐标。
最后总结其算法过程:
1、 获得人脸图像数据,将每一个人脸图像矩阵按行串成一维,每个人脸就是一个向量;
2、 将M个人脸在对应维度上加起来,然后求平均得到“平均脸”;
3、 将每个图像都减去平均脸向量;
4、 计算协方差矩阵;
5、 运用Eigenfaces记性人脸识别;
最后进行算法实践;
1、 训练图像
2、 求出平均脸
3、 获得特征子脸
4、 进行图像重构
5、 寻找相似度高的人脸图像。

二、Fisherfaces算法

Fisher线性判别应用于人脸识别就是fisherfaces。Fisher线性判别是模式识别的经典算法。线性判别分析的基本思想是将高维的模式样本投影到低维最佳矢量空间,以达到抽取重要分类信息和压缩特征空间维度的效果,投影后保证模式样本在新的子空间有最大的类间距离、最小的类内距离,即模式在该空间中有最佳的可分离性。理论和特征脸里用到的Eigenfaces有相似之处,都是对原有数据进行整体降维映射到低维空间的方法,fisherfaces和Eigenfaces都是从数据整体入手而不同于LBP提取局部纹理特征。
对降维后的样本使用Fisher线性判别方法,确定一个最优的投影方向,构造一个一维的体征空间,将多维的人脸图像投影到 fisherfaces特征空间,利用类内样本数据形成一组特征向量,这组特征向量就代表了人脸的特征。
Fisherfaces算法的主要思想是依据Fisher线性判别准则,在一个线性空间中寻找一个向量,把原始向量投影上去能够达到区分不同类的效果,就是类内和类间比值最小。
Fisherfaces的基本原理是,代替计算训练集中每个图像的特征向量和特征值,它只计算每一个人的一个特征向量和特征值,因此在前面的5个人,每人20个人脸的例子中,Eigenfaces算法将使用100特征人脸和特征值,然而Fisherfaces算法将使用仅5个特征人脸和特征值。
Fisherfaces算法都是先计算人脸均值即所有训练图像的人脸均值。所以人脸均值的算法公式为:u=1/n[X1n+X2n+X3n……+X8n];每个人脸均值的算法公式为:u1=1/2[X1n+X2n],u2=1/2[X3n+X4n],u3=1/2[X5n+X6n], u3=1/2[X7n+X8n]。
Fisherfaces是 基于这个一个概念:图像可以近似地表示为一个特征向量(特殊的人脸图像)和特征值(混合比例)。因此当使用人脸识别算法, Fisherfaces将特征矢量作为特征人脸是很普通的。对于Fisherfaces人脸,对每一个附加的人我们仅有一个特征值,因此如果有三个人,每个人有4张人脸,我们仅得到一个带有2个特征值的行矢量。
Fisherfaces算法和Eigenfaces算法有相同的地方,也有不相同的地方。相同:两者均可以对数据进行降维;两者在降维时均使用了矩阵特征分解的思想。不同:Fisherfaces是有监督的降维方法,而是Eigenfaces无监督的降维方法;Fisherfaces除了可以用于降维,还可以用于分类。
最后总结其算法过程:
1、 获得人脸图像数据,然后求出人脸的均值。
2、 观察各个人脸的特征值。
3、 进行人脸鉴定,观察人脸特征,判断是否是个人。
4、 最后进行人脸识别。

三、Local Binary, Patter Histogram(LBPH)算法

LBPH核心是LBP,LBP是一种用来描述图像局部纹理特征的算子,它反映内容是每个像素与周围像素的关系。LBPH,Local Binary Patterns Histograms,即LBP特征的统计直方图,LBPH将LBP特征与图像的空间信息结合在一起。LBPH的维度: 采样点为8个,如果用的是原始的LBP或Extended LBP特征,其LBP特征值的模式为256种,则一幅图像的LBP特征向量维度为:64256=16384维,而如果使用的UniformPatternLBP特征,其LBP值的模式为59种,其特征向量维度为:6459=3776维,可以看出,使用等价模式特征,其特征向量的维度大大减少,这意味着使用机器学习方法进行学习的时间将大大减少,而性能上没有受到很大影响。
原始的LBP算子定义为在33的窗口内,以窗口中心像素为阈值,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于或等于中心像素值,则该像素点的位置被标记为1,否则为0。这样,33邻域内的8个点经比较可产生8位二进制数(通常转换为十进制数即LBP码,共256种),即得到该窗口中心像素点的LBP值,并用这个值来反映该区域的纹理特征。
LBPH局部二进制编码直方图,建立在LBPH基础上的人脸识别法基本思想如下:首先以每个像素为中心,判断与周围像素灰度值大小关系,对其进行二进制编码,从而获得整幅图像的LBP编码图像;再将LBP图像分为个区域,获取每个区域的LBP编码直方图,继而得到整幅图像的LBP编码直方图,通过比较不同人脸图像LBP编码直方图达到人脸识别的目的,其优点是不会受到光照、缩放、旋转和平移的影响。
LBPH 的算法流程
1.LBP特征提取:根据上述的均匀LBP算子处理原始图像;
2.LBP特征匹配(计算直方图):将图像分为若干个的子区域,并在子区域内根据LBP值统计其直方图,以直方图作为其判别特征。
通过比较LDA和PCA这两种算法发现,LDA是有监督的降维方法,可选择分类性能最好的投影方向,而PCA是无监督的降维方法,可选择样本点投影具有最大方差的方向. LBPH算法“人”如其名,采用的识别方法是局部特征提取的方法,这是与前两种方法的最大区别。

你可能感兴趣的:(OpenCV学习)