人脸识别之LBPH

来源:互联网 发布:工商银行网络银行 编辑:程序博客网 时间:2024/05/01 01:04

       LBPH(Local Binary PatternsHistograms)局部二进制编码直方图,建立在LBPH基础之上的人脸识别法基本思想如下:首先以每个像素为中心,判断与周围像素灰度值大小关系,对其进行二进制编码,从而获得整幅图像的LBP编码图像;再将LBP图像分为个区域,获取每个区域的LBP编码直方图,继而得到整幅图像的LBP编码直方图,通过比较不同人脸图像LBP编码直方图达到人脸识别的目的,其优点是不会受到光照、缩放、旋转和平移的影响。Opencv自带的LBPH人脸识别算法原理如下:

1.  加载数据

用vector<Mat>imgs和vector<int> labels分别存储各图像数据和图像对应的标签;

注:如果图像对应标签相同证明是同一个人;

2.   训练模型

2.1  初始化参数

(1)  初始化采样半径(radius=1),邻域大小(neighbors=8),宽度方向和高度方向格子数(gridx=8, gridy=8,),直方图距离阈值(threshold = DBL_MAX)。

(2) 利用 labels初始化模型标签数组 _labels

2.2  LBP编码

计算各图像LBP编码图像LBPi ,大小为 ,各像素值计算方法如下:

(1)   依次计算所有像素坐标第n邻域对应像素偏移坐标


(2)   双线性差值计算所有像素坐标(x,y)第n邻域的灰度值以及编码值


(3)   计算所有像素的LBP编码值


2.3  计算直方图

LBPi图像对应直方图矩阵HISTi宽度为,高度为

(1)  计算每个格子的宽度和高度:


(2)  按照行序统计每个格子内直方图各值的高度,并依次将结果存储在HISTi的每一行;并对直方图高度归一化,即所有直方图高度除以w_grad*h_grad。以行为主序将HISTi转换为为1行列的向量矩阵。

 (3) 将所有人脸训练图像直方图矩阵HISTi插入到成员变量_histograms,其中_histograms的行数为,列数为N。

3.  更新模型

      首先设置更新模型图像数据和图像对应标签数据;更新模型算法和训练模型算法一致,唯一的区别是在训练模型之前不需要将_labels_histograms清零。

4.   预测

       按照3中方法计算待识别人脸图片直方图矩阵HISTq,计算HISTq和训练模型中各图像_histogramsi直方图之间的距离,记录距离最dis_min 的直方图图像对应标签label_min,如果dis_min<threshold,则该人脸图片对应标签为label_min,否则返回-1。计算两直方图之间距离方法(opencv函数compareHist)如下:


       其中,分别为训练模型第i个直方图值为j的直方图高度和待匹配图像值为j的直方图高度;len为直方图最大值。
0 0