Algorithm 理解OpenCV LBP实现
我需要一些基于LBP的人脸检测方面的帮助,这就是我写这篇文章的原因 我有以下与OpenCV上实现的人脸检测相关的问题:Algorithm 理解OpenCV LBP实现,algorithm,opencv,face-detection,lbph-algorithm,Algorithm,Opencv,Face Detection,Lbph Algorithm,我需要一些基于LBP的人脸检测方面的帮助,这就是我写这篇文章的原因 我有以下与OpenCV上实现的人脸检测相关的问题: 在lbpCascade_frontial_face.xml(来自opencv)中:什么是 内部节点、叶值、树、特征等?我知道他们被利用了 在算法中。但我不明白每一个的意思 是的。例如,为什么我们采用特定的功能而不是 对于特定的阶段,还有其他的吗?我们如何决定哪种功能/ 要选择的节点 LBP_frontial_face_classifier.xml中的特征值是什么?我 知道它们是
3.
-0.75
0 -1 3 -67130709 -21569 -1426120013 -1275125205 -21585
-16385 587145899 -24005
-0.65 0.88
0 -1 0 -163512766 -769593758 -10027009 -262145 -514457854
-193593353 -524289 -1
-0.77 0.72
0 -1 2 -363936790 -893203669 -1337948010 -136907894
1088782736 -134217726 -741544961 -1590337
-0.71 0.68
稍晚些时候
<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></_>
0 0 3 5
0 0 4 2
0 0 6 3
0 1 4 3
0 1 3 3
让我们先看看阶段的标签:
- 阶段的
是阶段中弱分类器的数量,在注释中称为maxWeakCount
,我称之为LBP功能。- 在本例中,阶段0中LBP特征的数量为
3
- 在本例中,阶段0中LBP特征的数量为
是特征权重的总和,至少是阶段通过的权重。stageThreshold
- 在此示例中,阶段阈值为
-0.75
- 在此示例中,阶段阈值为
是由11个整数组成的数组。前两个对于LBP级联没有意义。第三个是XML文件末尾internalNodes
的
表的索引(一个
描述了特征的几何结构)。最后8个值是8个32位值,它们共同构成了我在前面的回答中提到的256位LUT。这个LUT是通过训练过程计算的,我自己也不完全了解。- 在此示例中,阶段的第一个特征引用矩形
,该矩形由四个整数3
描述0 1 4 3
- 在此示例中,阶段的第一个特征引用矩形
是与特征相关联的两个权重(通过/失败)。根据特征评估期间从leafValues
中选择的位,这两个权重中的一个将添加到总数中。此总数与阶段的内部节点
进行比较。然后,boolstagepassed=(sum>=stageThreshold-EPS)代码>,其中
为1e-5,确定阶段是否通过或失败。权重也由训练过程确定。EPS
- 在此示例中,第一个特征的失败权重为
,通过权重为-0.65
0.88
- 在此示例中,第一个特征的失败权重为
标记。它由一组
标记组成,这些标记包含4个描述特征几何结构的整数。给定一个处理窗口(在您的示例中为24x24),前两个整数描述其在处理窗口内的x
和y
整数像素偏移,接下来两个整数描述待评估LBP特征所需的9个子矩形中的一个子矩形的宽度和高度
因此,本质上,位于处理窗口内的标签ft.x ft.y ft.width ft.height
检查pW.x
xpW.height
是否在pW.x
xpW.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(代码)的索引,选择单个位。如果该位为1,则特征与面不一致;如果为0,则与面一致。然后返回适当的权重(
),并将其与所有其他功能的权重相加,以生成整个阶段的总和。然后将其与
进行比较,以确定该阶段是通过还是失败
如果还有什么我解释得不够清楚的话,我可以澄清。@warmspringfinds您的观点是正确的:负值只表示MSB已设置。我可能已经走了