計算Haar特徵個數

2021-07-14 21:24:42 字數 1772 閱讀 9405

最早的haar特徵由papageorgiou c.等提出(《a general framework for object detection》),後來paul viola和michal jones提出利用積分影象法快速計算haar特徵的方法(《rapid object detection using a boosted cascade of ****** features》)。之後,rainer lienhart 和 jochen maydt用對角特徵對haar特徵庫進行了擴充套件(《an extended set of haar-like features for rapid object detection》)。opencv的haar分類器就是基於擴充套件後的特徵庫實現的。

haar特徵本身並不複雜,就是用圖中黑色矩形所有畫素值的和減去白色矩形所有畫素值的和。

其中,對於45°的rotated特徵(如1(c)和1(d)),w,h表示如下圖所示:

其計算公式為:

***中沒有說明,個人認為此處除了z,xy值也有變化:

首先有兩點要清楚:

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的比例!)

清楚這兩點,就很容易寫出計算特徵個數的**:

[cpp]view plain

copy

intgethaarcount(

intw,

inth,

intw,

inth)  

對於45°特徵,由於rainer lienhart定義的w,h與原矩陣含義不同(參見第一幅圖),即實際滑動的矩陣框為(h+w)*(w+h)。

所以只要用如下方式呼叫原函式:

可以看到和**用公式計算得到的值是一致的~

特徵個數雖然很大,但很有規律,不用程式用筆也很容易推出遞推公式。

如1(a)和1(b)特徵遞推為:(12^2)*(1+2+...+24)=43,200

具體參見此貼:re: [opencv] re: number of haar features

OpenCV 計算Haar特徵個數

最早的haar特徵由papageorgiou c.等提出 a general framework for object detection 後來paul viola和michal jones提出利用積分影象法快速計算haar特徵的方法 rapid object detection using a b...

1 Haar特徵的特點及計算

1.haar特徵 最早的haar特徵由papageorgiouc.等提出 a general framework for object detection 後來paulviola和michal jones提出利用積分影象法快速計算haar特徵的方法 rapid object detection us...

opencv筆記 8 Haar特徵

haar特徵由邊緣特徵 線性特徵 中心特徵和對角線特徵組合成特徵模板。特徵模板中有白色和黑色兩種矩形,模板的特徵值則為白色矩形畫素減去黑色矩形畫素之和。haar特徵反應了影象灰度變化的情況。對於圖中a,b,d這類特徵v sum 白 sum 黑 而對於c來說則v sum 白 2 sum 黑 積分圖就是...