opencv-Haar特征


特征,判決,得到判決

 

1.什么是haar特征?


特征 = 某個區域的像素點經過某種四則運算之后得到的結果。

這個結果可以是一個具體的值也可以是一個向量,矩陣,多維。實際上就是矩陣運算

 

2.如何利用特征 區分目標?

 

閾值判決,如果大於某個閾值,認為是目標。小於某個閾值認為是非目標。

 

3.如何得到這個判決?

 

使用機器學習,我們可以得到這個判決門限

 

 

 

Haar特征的計算原理

 

 

這些是在opencv中使用的haar特征。

基礎類型(5種) 核心(3種)all(6種)

這里的14個圖片分別對應十四種特征。

 

 

如何使用呢?

藍色區域表明我們所得到的圖片。黑白矩形框是我們的特征模板。

比如: 我們的模板是一個(10,10)的矩陣,共覆蓋了100個像素點。黑白各占50個像素點

將當前模板放在圖像上的任意位置上,在這里,用白色區域覆蓋的50個像素之和減去黑色區域的50個像素之和得到我們的特征。

 

 

 

 

推導公式的一樣性。

公式二:

這里的整個區域指黑白兩色覆蓋的整個100個像素。這兩個權重是不一樣的。

整體的權重值為1 黑色部分權重值為-2

整個區域的像素值 * 權重1 + 黑色部分 * 權重2
= 整個區域 * 1 + 黑色部分 * -2
=(黑 + 白) * 1 + 黑色部分 * -2
= 白色 - 黑色

 

Haar特征遍歷

 

 

 計算整幅圖的Haar特征

如果想要計算整幅圖的Haar特征,我們就需要遍歷,

假設這個haar特征的模板是(10,10)共100個像素。圖片的大小是(100,100)

如果想獲取這個圖片上所有的harr特征。使用當前模板沿着水平和豎直方向進行滑動。從上到下,從左到右進行遍歷。

遍歷的過程中還要考慮步長問題。這個模板一次滑動幾個像素。一次滑動10個像素,就需要9次。加上最開始的第0次。

10個模板。

計算這100個模板才能將haar特征計算完畢。

如果我們的步長設置為5.那么就要滑動20次。400個模板。運算量增加4倍。

其實僅僅這樣的一次滑動並沒有結束,對於每一個模板還要進行幾級縮放,才能完成。

需要三個條件:100*100,10*10,step=10,模板 1

模板 :縮放,這就需要再次進行遍歷

運算量太大 :

計算量 = 14個模版*20級縮放*(1080/2*720/2) * (100點+ -) = 50-100億
(50-100)*15 = 1000億次

 

 

積分圖

特征:計算矩形方塊中的像素

有ABCD四個區域,每個區域都是一個矩形方塊。

A區域是左上角那一塊小區域,而B區域是包含A區域的長條。

C區域又是包含A的豎直長條。D區域是四個方塊之和。

 

1,2,3,4表明這四個小區域。

進行快速計算:

A 1 B 1 2 C 1 3 D 1 2 3 4
4 = A-B-C+D = 1+1+2+3+4-1-2-1-3 = 4(10*10 變成3次+-)

 

任意一個方框,可由周圍的矩形進行相減得到。

問題: 在計算每一個方塊之前,需要將圖片上所有的像素全部遍歷一次。至少一次。

特征=(p1-p2-p3+p4)*w

p1 p2 p3 p4 分別是指某一個特征相鄰的abcd的模塊指針。

 

 

adaboost分類器

haar特征一般會和adaboost一起使用

haar特征 + Adaboost是一個非常常見的組合,在人臉識別上取的非常大成功

Adaboost分類器優點在於前一個基本分類器分出的樣本,在下一個分類器中會得到加權。加權后的全體樣本再次被用於訓練下一個基本分類器。

就是說它可以加強負樣本。

例如:我們有 蘋果 蘋果 蘋果 香蕉 找出蘋果

第一次訓練權值分別為: 0.1 0.1 0.1 0.5

因為香蕉是我們不需要的所以0.5,我們正確的樣本系數減小,負樣本得到加強。

把出錯的樣本進行加強權值。再把整個結果送到下一個基本分類器

 

 

訓練終止條件:

1. for迭代的最大次數 count

2. 每次迭代完的檢測概率p(p是最小的檢測概率,當大於p就終止)

 

 

 

分類器的結構

haar特征計算完之后要進行閾值判決,實際是一個個判決過程。

if(haar> T1) 蘋果[第一級分類器];[第二級分類器]and haar>T2

兩級都達成了,才會被我們認定為蘋果。

兩級分類器的閾值分別是t1 和 t2,對於每一級的分類器我們稱之為強分類器。

2個強分類器組成。一般有15-20強分類器。 要連續滿足15-20個強分類器才能認證為目標。

3個強分類器,每個強分類器會計算出一個獨立的特征點。使用每一個獨立的特征進行閾值判。

強分類器1 特征x1 閾值t1 強分類器2 特征x2 閾值t2 3同理(閾值是通過訓練終止時得到的)

進行判決過程: x1>t1 and x2>t2 and x3>t3

三個判決同時達成,目標-》蘋果

三個強分類器只要有一個沒通過就會被判定為非蘋果。作用:判決。而弱分類器作用:計算強分類器特征x1 x2 x3

 

每個強分類器由若干個弱分類器組成

1強 對多個弱分類器 對應多個特征節點

弱分類器作用:計算強分類器特征x1 x2 x3

強分類器的輸入特征是多個弱分類器輸出特征的綜合處理。

x2 = sum(y1,y2,y3)

y1 弱分類器特征誰來計算的?

node節點來計算

一個弱分類器最多支持三個haar特征,每個haar特征構成一個node節點

 

Adaboost分類器計算過程

3個haar -》 3個node

node1 haar1 > node的閾值T1 z1 = a1
node1 haar1 < node的閾值T1 z1 = a2

Z = sum(z1,z2,z3) > 弱分類器T y1 = AA
Z = sum(z1,z2,z3) < 弱分類器T y1 = BB

從node向強分類器

第一層分類器:haar->Node z1 z2 z3 得到的就是z1 z2 z3 

第二層分類器:Z>T y1 y2 y3: 弱分類器的計算特征

第三層分類器:x = sum(y1,y2,y3) > T1 obj

 

訓練過程

1.初始化數據 權值分布 蘋果 蘋果 蘋果 香蕉 0.1 0.1 0.1 0.1 (第一次權值都是相等的)

2.遍歷閾值 p計算出誤差概率,找到最小的minP t

3.計算出G1(x)

4.權值分布 update更新權重分布: 0.2 0.2 0.2 0.7

5.訓練終止條件。

在蘋果或者win平台都有相應的可執行文件,不用我們代碼實現

 

opencv自帶的人臉識別的Adaboost分類器的文件結構(xml)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM