我正在使用opencv haar cascade进行面部检测。
我想知道我在程序中包含的haar级联的xml代码的解释。有人可以帮助我理解XML文件中显示的值,例如:weakcount
,maxcount
,threshold
,internal nodes
,leaf values
等。
我使用了haarcascade_frontalface_alt2.xml
文件。我已经进行过脸部检测。目前我正在计算检测到的面部数量。
答案 0 :(得分:3)
据我了解,一般来说你已经了解了haarcascade结构和OpenCV的实现。如果不是,请先查看OpenCV manual并阅读有关增强树级联的内容,例如Lienhart's paper。
现在关于xml结构本身。
<maxWeakCount>3</maxWeakCount>
此参数描述阶段的简单分类器(树)的数量。
<stageThreshold>3.5069230198860168e-01</stageThreshold>
是阶段门槛,i。即在阶段退出级联的门槛得分。在所有阶段,我们计算树木的最终得分,当最终得分小于阈值时,我们退出整个级联并将结果视为非对象。
<weakClassifiers>
在舞台上开始树参数。
<_>
<internalNodes>
0 1 0 4.3272329494357109e-03 -1 -2 1 1.3076160103082657e-02
</internalNodes>
<leafValues>
3.8381900638341904e-02 8.9652568101882935e-01 2.6293140649795532e-01
</leafValues>
</_>
这是树形描述。 internalNodes
参数包含以下内容:
0 1
或1 0
定义当前节点中应该去的叶索引。在第一种情况下,如果值低于阈值则向左移动,如果高于阈值则向右移动,在第二种情况下,如果值高于阈值,则向右移动。-1 -2 1 ...
参数列表 - 正如我从OpenCV源中看到的那样,它只是另一个带有叶索引的节点,但根据评估代码(也来自OpenCV源)忽略了负值。考虑级联评估代码:
do
{
CascadeClassifierImpl::Data::DTreeNode& node = cascadeNodes[root + idx];
double val = featureEvaluator(node.featureIdx);
idx = val < node.threshold ? node.left : node.right;
}
while( idx > 0 );
leafValues
包含左值(即左叶分数),右值(右叶分数)和树阈值。
<_>
<rects>
<_>
6 3 1 9 -1.</_>
<_>
6 6 1 3 3.</_></rects></_>
<_>
根据HAAR范例,它是功能描述本身。上一节中的特征索引描述了rects对的索引。