我需要基于LBP的面部检测方面的帮助,这就是为什么我要编写此内容。
我有以下与在OpenCV上实现的人脸检测有关的问题:
LBP_frontal_face_classifier.xml中的特征值是什么?我知道它们是4个整数的向量。但是我应该如何使用此功能?我以为第0阶段可以访问第一个功能,但是访问权限不在这种模式下。此功能的访问方式是什么?
文献中的所有论文仅给出了较高的概述。他们的描述主要包括根据邻域像素进行的LBP计算。但是如何将LBP值用于分类器中的那些元素?
积分图像如何帮助计算像素的LBP值?我知道如何使用HAAR。我需要了解LBP。
我读了一些论文。但是没有人清楚描述基于LBP的人脸检测的工作原理或算法细节。如果某人想自己开发面部检测程序,应该遵循哪些步骤-没有文档对此进行描述。
如果可以的话,请帮助我。我将感激不尽。
我请您参考我过去的答案,该答案略微涉及到该主题,但是没有解释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></_>
稍后……
<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></_>
…
让我们首先来看一个阶段的标签:
maxWeakCount
<!-- tree -->
3
stageThreshold
-0.75
转到描述LBP功能的标签:
internalNodes
<features>
<rect>
0 1 4 3
leafValues
<stageThreshold>
bool stagePassed = (sum >= stageThreshold - EPS);
EPS
-0.65
0.88
最后是<feature>标签。它由<rect>标签数组组成,其中包含4个描述要素几何的整数。给定一个处理窗口(在您的情况下为24x24),前两个整数描述其在处理窗口内的 偏移量x和y整数像素 偏移量, 后两个整数描述LBP功能所需的9个子矩形中一个子矩形的 宽度 和 高度 。待评估。
<feature>
x
y
在本质上,然后,标签<rect> ft.x ft.y ft.width ft.height </rect>位于一个处理窗口内pW.widthX pW.height检查面是否存在于pW.xX pW.y对应于…
<rect> ft.x ft.y ft.width ft.height </rect>
pW.width
pW.height
pW.x
pW.y
为了评估LBP,就足以读取点处的积分图像p[0..15]并用于p[BR]+p[TL]-p[TR]-p[BL]计算九个子矩形的积分。比较 中心子 矩形R4和其他八个子矩形,从R0开始顺时针旋转,以产生8位LBP(这些位打包[msb 01258763 lsb])。
p[0..15]
p[BR]+p[TL]-p[TR]-p[BL]
然后,将此8位LBP用作功能的(2 ^ 8 = 256)位LUT(<internalNodes>)的索引,选择一个位。如果该位为1,则特征与面部不一致;否则,该特征与面部不一致。如果为0,则与脸部一致。<leafNode>然后返回适当的权重()并与所有其他特征的权重相加,以产生总体阶段总和。然后将其<stageThreshold>进行比较以确定阶段是通过还是失败。
<internalNodes>
<leafNode>
如果还有其他问题,我还不能解释清楚。