最早的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的比例!)
清楚這兩點,就很容易寫出計算特徵個數的**:
int gethaarcount(int w,int h,int w,int h)
對於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
計算Haar特徵個數
最早的haar特徵由papageorgiou c.等提出 a general framework for object detection 後來paul viola和michal jones提出利用積分影象法快速計算haar特徵的方法 rapid object detection using a b...
opencv筆記 8 Haar特徵
haar特徵由邊緣特徵 線性特徵 中心特徵和對角線特徵組合成特徵模板。特徵模板中有白色和黑色兩種矩形,模板的特徵值則為白色矩形畫素減去黑色矩形畫素之和。haar特徵反應了影象灰度變化的情況。對於圖中a,b,d這類特徵v sum 白 sum 黑 而對於c來說則v sum 白 2 sum 黑 積分圖就是...
opencv中haar特徵檢測人臉(適合小白)
本文的例程是我第一次用opencv自帶的利用haar特徵人臉識別的分類器檔案進行人臉檢測的收穫,注意,前提是已經有了分類器檔案xml,僅僅是利用它來進行檢測的過程。希望能幫到有需求的人 haar特徵的人臉檢測 使用opencv自帶的xml分類器檔案 問題 1.分類器檔案的載入,使用的是opencvc...