Lun*_*iam 7 algorithm opencv face-detection lbph-algorithm
我需要一些基于LBP的人脸检测的帮助,这就是我写这个的原因.
我在OpenCV上实现了与面部检测相关的以下问题:
LBP_frontal_face_classifier.xml中的功能值是什么?我知道它们是4个整数的向量.但是我该如何使用这个功能呢?我认为第0阶段访问第一个功能但访问不在此模式中.这个功能的访问模式是什么?
文献中的所有论文仅提供高级概述.它们的描述主要包括邻域像素的LBP计算.但是这个LBP值如何用于分类器中的那些元素?
我读了一些文章,文章.但没有一个清楚地描述基于LBP的人脸检测是如何工作的或详细的算法.如果有人想要自己开发一个人脸检测程序,他应该遵循的步骤是什么 - 没有文件描述.
如果可以,请帮助我.我会很感激.
Iwi*_*ist 15
我引用了你自己过去的答案,这些答案略微触及了这个主题,但没有解释XML级联格式.
让我们看一个假的,为了清晰的例子,只有一个阶段和三个功能的级联.
<!-- stage 0 -->
<_>
<maxWeakCount>3</maxWeakCount>
<stageThreshold>-0.75</stageThreshold>
<weakClassifiers>
<!-- tree 0 -->
<_>
<internalNodes>
0 -1 3 -67130709 -21569 -1426120013 -1275125205 -21585
-16385 587145899 -24005</internalNodes>
<leafValues>
-0.65 0.88</leafValues></_>
<!-- tree 1 -->
<_>
<internalNodes>
0 -1 0 -163512766 -769593758 -10027009 -262145 -514457854
-193593353 -524289 -1</internalNodes>
<leafValues>
-0.77 0.72</leafValues></_>
<!-- tree 2 -->
<_>
<internalNodes>
0 -1 2 -363936790 -893203669 -1337948010 -136907894
1088782736 -134217726 -741544961 -1590337</internalNodes>
<leafValues>
-0.71 0.68</leafValues></_></weakClassifiers></_>
Run Code Online (Sandbox Code Playgroud)
稍后......
<features>
<_>
<rect>
0 0 3 5</rect></_>
<_>
<rect>
0 0 4 2</rect></_>
<_>
<rect>
0 0 6 3</rect></_>
<_>
<rect>
0 1 4 3</rect></_>
<_>
<rect>
0 1 3 3</rect></_>
Run Code Online (Sandbox Code Playgroud)
...
让我们先来看一个阶段的标签:
maxWeakCount
一个阶段是在阶段弱分类,什么是所谓的评论的数量<!-- tree -->
,我叫LBP特征是什么.
3
.stageThreshold
就是特征的权重必须至少为要传递的阶段加起来.
-0.75
.转到描述LBP功能的标签:
internalNodes
是一个由11个整数组成的数组.对于LBP级联,前两个是没有意义的.第三个是XML文件末尾<features>
的<rect>
s 表索引(A <rect>
描述了特征的几何).最后8个值是8个32位值,这些值一起构成我在前面的答案中提到的256位LUT.这个LUT是由训练过程计算出来的,我自己并不完全了解.
3
,由四个整数描述 0 1 4 3
.leafValues
是两个权重(通过/失败)与特征相关联.根据从internalNodes
特征评估期间选择的位,将这两个权重中的一个添加到总计中.这个总数与舞台相比较<stageThreshold>
.然后,bool stagePassed = (sum >= stageThreshold - EPS);
在EPS
1e-5的哪个位置,确定舞台是通过还是失败.权重也由训练过程确定.
-0.65
,并且通过权重是 0.88
.最后,<feature>
标签.它由一组<rect>
标签组成,这些标签包含4个描述特征几何的整数.给定的处理窗口(24×24在你的情况下),第一两个整数描述其x
与y
整数像素的偏移的处理窗内,且接下来的两个整数描述了宽度和高度一个子矩形的的是,需要用于LBP特征9的待评估.
实质上,然后,<rect> ft.x ft.y ft.width ft.height </rect>
位于处理窗口pW.width
x 内的标签x pW.height
检查面部是否存在于pW.x
x处pW.y
对应于......
然后,为了评估LBP,足以在点处读取积分图像p[0..15]
并用于p[BR]+p[TL]-p[TR]-p[BL]
计算九个子矩形的积分.将中心子矩形R4与其他八个子矩形进行比较,顺时针从R0开始,产生一个8位LBP(这些位被打包[msb 01258763 lsb]).
然后将该8位LBP用作特征的(2 ^ 8 = 256)位LUT(the <internalNodes>
)的索引,选择单个位.如果该位为1,则该特征与面部不一致; 如果为0,则与面部一致.<leafNode>
然后返回适当的权重()并添加所有其他特征的权重以产生总体阶段总和.然后将其<stageThreshold>
进行比较以确定阶段是通过还是失败.
如果还有别的东西,我说得不够清楚,我可以澄清一下.