LBPH人脸识别
LBPH
基本原理是将像素点A的值与其最临近的8个像素点的值逐个比较:
- 如何A大于其临近点的像素值,则得到0
- 如何A小于其临近点的像素值,则得到1
最后,将所得到的8个0
或1
连起来。得到一个8位的二进制序列。将该二进制序列转换为十进制作为A的LBP值。
这里举个例子:
对图像逐个像素进行处理,就会得到LBP特征图像。这个特征图像的直方图被称为LBPH,或称为LBP直方图。
为了得到不同尺度下的纹理结构,还可以用圆形领域将计算扩大到任意大小的领域内。圆形领域用(P,R)表示。P表示参与的像素点个数,R表示邻域的半径。
人脸的整体灰度由于收到光线的作用,经常会发生变化,但是人脸各部分的相对灰度会基本保持一致。LBP的主要思想是以当前点与其领域像素的相对关系作为处理结果,因此在图像灰度整体发生变化时(单调变化),从LBP算法中提取的特征值能保持不变。
人脸识别流程
使用OpenCV中进行人脸识别时,LBPH会在图像中构建不重叠区域,在每个区域内构建灰度直方图特征,最后拼接构成人脸图像的整体特征,进而进行对比识别。具体流程如下:
先使用LBP提取图片特征,获取灰度图像的LBP;
将图像划分为不重叠区域,在OpenCV中默认为8行8列64个区域;
在每个区域内构建灰度直方图,OpenCV中默认采用灰度不变LBP;
将整张图像的灰度直方图特征按照一定的顺序进行拼接,构建整体特征;
将待识别人脸和人脸底库的特征进行相似性计算,相似度最高的即为同一个人。
从流程上看整个过程十分直观,实现效率也很高。虽然采用的是灰度图像,但不受光线、亮度等影响,而且可以减少人脸位置、大小等问题所造成的偏差,有较强的鲁棒性。
Demo
1 | faces, ids = getlable(path) # 获取图像数组和id标签数组和姓名 |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.