人脸识别之LBPH
2015-02-10 15:43
127 查看
LBPH(Local Binary PatternsHistograms)局部二进制编码直方图,建立在LBPH基础之上的人脸识别法基本思想如下:首先以每个像素为中心,判断与周围像素灰度值大小关系,对其进行二进制编码,从而获得整幅图像的LBP编码图像;再将LBP图像分为
![](https://img-blog.csdn.net/20150210155943477?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjU4ODUwNjM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
个区域,获取每个区域的LBP编码直方图,继而得到整幅图像的LBP编码直方图,通过比较不同人脸图像LBP编码直方图达到人脸识别的目的,其优点是不会受到光照、缩放、旋转和平移的影响。Opencv自带的LBPH人脸识别算法原理如下:
注:如果图像对应标签相同证明是同一个人;
(2) 利用 labels初始化模型标签数组 _labels。
![](https://img-blog.csdn.net/20150210155056714?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjU4ODUwNjM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
,各像素值计算方法如下:
(1) 依次计算所有像素坐标第n邻域对应像素偏移坐标
![](https://img-blog.csdn.net/20150210155316674?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjU4ODUwNjM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20150210155348732?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjU4ODUwNjM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
(2) 双线性差值计算所有像素坐标(x,y)第n邻域的灰度值
![](https://img-blog.csdn.net/20150210155454237?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjU4ODUwNjM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
以及编码值
![](https://img-blog.csdn.net/20150210155534956?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjU4ODUwNjM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
:
![](https://img-blog.csdn.net/20150210155628963?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjU4ODUwNjM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
(3) 计算所有像素的LBP编码值
![](https://img-blog.csdn.net/20150210155723467?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjU4ODUwNjM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20150210155844231?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjU4ODUwNjM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
,高度为
![](https://img-blog.csdn.net/20150210160007673?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjU4ODUwNjM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
(1) 计算每个格子的宽度和高度:
![](https://img-blog.csdn.net/20150210160209197?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjU4ODUwNjM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
(2) 按照行序统计每个格子内直方图各值的高度,并依次将结果存储在HISTi的每一行;并对直方图高度归一化,即所有直方图高度除以w_grad*h_grad。以行为主序将HISTi转换为为1行
![](https://img-blog.csdn.net/20150210160452173?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjU4ODUwNjM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
列的向量矩阵。
(3) 将所有人脸训练图像直方图矩阵HISTi插入到成员变量_histograms,其中_histograms的行数为
![](https://img-blog.csdn.net/20150210160642231?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjU4ODUwNjM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
,列数为N。
![](https://img-blog.csdn.net/20150210161135637?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjU4ODUwNjM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
其中,
![](https://img-blog.csdn.net/20150210161242636?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjU4ODUwNjM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
分别为训练模型第i个直方图值为j的直方图高度和待匹配图像值为j的直方图高度;len为直方图最大值。
个区域,获取每个区域的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为直方图最大值。
相关文章推荐
- 【计算机视觉】OpenCV人脸识别facerec源码分析2——LBPH概述
- 人脸识别经典算法二:LBP方法
- 人脸识别之人脸检测(十五)--改进版VJ人脸检测(LBP特征,VISAPP2017)
- 人脸识别经典算法二:LBP方法
- 人脸识别经典算法二:LBP方法
- LBP算法(人脸识别特征提取)
- 人脸识别---LBP特征与高维LBP特征
- 人脸识别(七)--LBP特征原理及实现
- openCV+ASM+LBP+Gabor实现人脸识别(GT人脸库)
- OpenCV人脸识别LBPH算法源码分析
- LBPH+Adaboost人脸检测、识别
- OpenCV人脸识别facerec源码分析2――LBPH概述
- openCV+ASM+LBP+Gabor实现人脸识别(GT人脸库)
- 基于LBP和PCA的人脸性别识别方法
- 人脸识别经典算法二:LBP方法
- 【计算机视觉】OpenCV人脸识别facerec源码分析2——LBPH概述
- 【计算机视觉】OpenCV人脸识别facerec源码分析2——LBPH概述
- 【OpenCV人脸识别入门教程之四】LBP人脸识别
- 基于 OpenCV 的 LBP + SVM 人脸识别
- LBP人脸识别的python实现