最早的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 黑 積分圖就是...