首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

【OpenCV】计算Haar特点个数

2012-11-26 
【OpenCV】计算Haar特征个数最早的Haar特征由Papageorgiou C.等提出(《A general framework for object detec

【OpenCV】计算Haar特征个数

最早的Haar特征由Papageorgiou C.等提出(《A general framework for object detection》),后来Paul Viola和Michal Jones提出利用积分图像法快速计算Haar特征的方法(《Rapid object detection using a boosted cascade of simple features》)。之后,Rainer Lienhart 和 Jochen Maydt用对角特征对Haar特征库进行了扩展(《An extended set of Haar-like features for rapid object detection》)。OpenCV的Haar分类器就是基于扩展后的特征库实现的。


Haar特征/矩形特征

Haar特征本身并不复杂,就是用图中黑色矩形所有像素值的和减去白色矩形所有像素值的和。

【OpenCV】计算Haar特点个数

看过Rainer Lienhart文章的人知道,Rainer Lienhart在文章中给出了计算特定图像面积内Haar特征个数公式。小女才拙,到最后也没推出那个公式来,还望看明白的大牛留言指教~


Haar特征个数计算

 

Rainer Lienhart计算Haar特征个数的公式:

【OpenCV】计算Haar特点个数

其中,【OpenCV】计算Haar特点个数为图片大小,【OpenCV】计算Haar特点个数为矩形特征大小,【OpenCV】计算Haar特点个数表示矩形特征在水平和垂直方向的能放大的最大比例系数。

对于45°的rotated特征(如1(c)和1(d)),w,h表示如下图所示:

【OpenCV】计算Haar特点个数

其计算公式为:

【OpenCV】计算Haar特点个数

*论文中没有说明,个人认为此处除了Z,XY值也有变化:【OpenCV】计算Haar特点个数


下面是我理解的计算过程~首先有两点要清楚:

1、对于某特定大小的特征,在窗口内滑动计算。
      也就是如图1(a)特征大小为2*1,对于24*24的图像。水平可滑动23步,垂直滑动24步,所以共有23*24个特征。

2、对于一个特征,特征本身沿水平、竖直方向分别缩放。
      还看特征1(a),特征大小为2*1,则延水平方向可放大为:4*1,6*1,8*1,…,24*1;竖直方向可放大为:2*1,2*2,2*3,…,2*24。即每个特征有XY种放大方式。(!放大的矩形特征并限制保持2:1的比例!)


清楚这两点,就很容易写出计算特征个数的代码:



可以看到和论文用公式计算得到的值是一致的~

【OpenCV】计算Haar特点个数


另一种递推计算方法:

特征个数虽然很大,但很有规律,不用程序用笔也很容易推出递推公式。

如1(a)和1(b)特征递推为:(12^2)*(1+2+...+24)=43,200

具体参见此贴:Re: [OpenCV] Re: Number of haar features


(转载请注明作者和出处:http://blog.csdn.net/xiaowei_cqu 未经允许请勿用于商业用途)




1楼jia20003前天 21:52
很好的文章,计算特征以后呢,识别/匹配用nint X=W/w; int Y=H/h; 是不是W, H是图像的宽与高,w, h是特征的最小宽与高,X, Y计算出来的是放缩倍数。然后循环计算n每个等份的Harr特征//?
Re: xiaowei_cqu前天 22:45
回复jia20003不是循环计算,用积分图像法,明天写~

热点排行