特征,判決,得到判決
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)