2011-05-10

人脸检测分类器haarcasade_frontalface_alt_xml文件中数据含义

opencv中提供的人脸识别分类器xml文件,看了Paul Viola和Rainer Lienhart的论文才大致明白。

<size>20 20</size>
<stages>
<_>
...
<!--trees-->
<_>
   <!-- tree 0 -->
   <_>
       <!-- root node -->
       <feature>
          <rects>
             <_>2 7 14 4 -1.</_>
             <_>2 9 14 2 2.</_>
          </rects>
          <tilted>0</tilted>
        </feature>
        <threshold>3.7895569112151861e-003</threshold>
        <left_val>-0.9294580221176148</left_val>
        <right_val>0.6411985158920288</right_val>
    </_>
</_>
...
</trees>
<stage_threshold>-1.3442519903182983</stage_threshold>
...

size为分类器长宽,这里为20X20

xml文件中主要单元为tree节点,其中:

feature代表一个矩形特征;

rects表示矩形特征中矩形个数,2个或者3个,跟特征类型有关;

2 7 14 4 -1和2 9 14 2 2五元组中前2个数代表矩形的左上角顶点坐标(x,y),中间2个为矩形的长宽(w,h),最后一个权重a,跟矩形面积成反比,且特征中黑白区域此值是反号的。计算特征像素总数时即用这个矩阵的像素和乘以权重,加上另一个矩阵的像素和乘以权重;

tilted为0或者1,0代表正矩形,1代表旋转45度矩形;

threshold为弱分类器的阀值,
left_val为左值,
right_val为右值,
stage_threshold为强分类器阀值。
当弱分类器求出的特征值小于阈值时,左值为弱分类器结果,当大于阈值时,右值为弱分类器的结果,然后一个强分类器里面若干个弱分类器的结果之和如果大于强分类器的阈值,则强分类器输出为1,否则输出为0。

附论文(豆丁docin.com可以找到):
Paul Viola:Robust Real-time Object Detection
Rainer Lienhart:An Extended Set of Haar-like Features for Rapid Object Detection

说点啥吧