分类器是如何做检测的?(2)——【续】检测中的LBP和HAAR特征计算过程
前面介紹分類器檢測(cè)過程的示例中是以HOG特征為例,那LBP和HAAR特征在xml中是如何表達(dá)和測(cè)試的呢?
2.3 ???LBP與HAAR特征
HAAR特征的計(jì)算和表達(dá)方式與HOG很類似,在OpenCV的haartraining.exe中,feature保存在每個(gè)weakclassifier中,而之后的traincascade.exe中則是以LBP、HOG、HAAR三種統(tǒng)一的方式——在stages后面用features節(jié)點(diǎn)來(lái)統(tǒng)一存儲(chǔ)——來(lái)保存features的pool。
? ? ?2.3.1????HAAR特征
在haar特征的訓(xùn)練中(無(wú)論是老版本的haartraining還是現(xiàn)在的traincascade),都是有BASIC/CORE/ALL三種特征組合待選的,默認(rèn)情況為BASIC。三種情況下對(duì)應(yīng)的特征選取分別如下:
BASIC:
? ? ??(對(duì)于最后一種point型特征,在ALL類型中有看到,BASIC中沒有看到,但不知是否被選入這種特征)
CORE中的增加項(xiàng):
ALL中的增加項(xiàng):
?
最后,HAAR特征的表達(dá)形式是以不止一個(gè)rect來(lái)表示的。比如
表達(dá)的是下圖中的特征,tilted表達(dá)是否傾斜。
其中第一個(gè)矩形是外部最大的矩形,第二個(gè)為中間的紅色矩形。
其他特征都是以類似的形式表達(dá),矩形后的-1和3是該矩形的weight,也就是3*rect2-rect1;它的統(tǒng)一形式是sumof( rect[i]*weight[i] )。當(dāng)然這里的rect同樣是在維護(hù)一系列指向積分圖中的指針。
? ? 2.3.2 ? ?LBP特征
LBP特征的計(jì)算與HAAR、HOG有很大不同,在判斷某個(gè)矩形的LBP特征應(yīng)當(dāng)屬于左葉子還是右葉子的時(shí)候,HAAR和HOG只是用當(dāng)前節(jié)點(diǎn)的threshold來(lái)判定就可以了;而LBP的節(jié)點(diǎn)結(jié)構(gòu)是圖6所示:
圖6. LBP節(jié)點(diǎn)示意圖
節(jié)點(diǎn)中同樣是有0和-1來(lái)做左右節(jié)點(diǎn)代碼,33是feature ID,也就是所在的矩形,而后面緊跟的8個(gè)數(shù)將會(huì)被保存在vector<int> subset結(jié)構(gòu)中,每個(gè)節(jié)點(diǎn)有8個(gè)這樣的數(shù),因而最終subset的size = nodes.size()* 8。
就以上面的這個(gè)節(jié)點(diǎn)來(lái)描述下判定規(guī)則:
首先33對(duì)應(yīng)的是下面的矩形
這個(gè)矩形將對(duì)應(yīng)到積分圖中的16個(gè)int型指針,他們的對(duì)應(yīng)關(guān)系如圖7所示,ID號(hào)33中給出的矩形位置就是圖中的A矩形。根據(jù)圖中的關(guān)系可以得到9個(gè)矩形中的16個(gè)指針,每個(gè)指針存儲(chǔ)的是積分圖中該點(diǎn)右上方矩形內(nèi)的灰度和。這樣利用積分圖能夠快速計(jì)算出A~I共9個(gè)矩形內(nèi)的灰度和,然后除E之外的其他矩形與E矩形內(nèi)的結(jié)果作對(duì)比,大小將被標(biāo)記為0或1,這樣8個(gè)矩形將得到一個(gè)8位數(shù)c。
圖7. Rect與LBP特征計(jì)算位置的關(guān)系示意圖
接下來(lái)就是關(guān)鍵的如何根據(jù)c判斷當(dāng)前矩形應(yīng)當(dāng)走向左節(jié)點(diǎn)還是右節(jié)點(diǎn)了。
sum?+=?cascadeLeaves[subset[c>>5]& (1 << (c?& 31)) ??leafOfs?:?leafOfs+1];
c中的8個(gè)位由高到低分別來(lái)自于矩形A-B-C-F-I-H-G-D,因而c>>5得到的是上面ABC三個(gè)位所代表的0~7范圍的一個(gè)數(shù),根據(jù)此數(shù)將得到subset(也就是每個(gè)節(jié)點(diǎn)中都會(huì)存儲(chǔ)的8個(gè)數(shù))中的一個(gè)值,這里命名為X。1<<(c & 31)得到的是2^n,n是F-I-H-G-D共5個(gè)矩形的位,這里將2^n這個(gè)值命名為Y,可見Y的范圍是1~2^31,(它想表達(dá)的就是在這5個(gè)矩形中的對(duì)比情況,因?yàn)樗麄兪且灰粚?duì)應(yīng)的)。最后X和Y做“按位與”運(yùn)算如果是0就進(jìn)入右節(jié)點(diǎn),否則進(jìn)入左節(jié)點(diǎn)。
這里的判定規(guī)則應(yīng)該是有更好的詮釋的,暫時(shí)還沒有找到相關(guān)資料,以上僅僅是在代碼中解析的一些內(nèi)容。
相比其他兩種,LBP的判定規(guī)則似乎有點(diǎn)復(fù)雜了。
總結(jié)
以上是生活随笔為你收集整理的分类器是如何做检测的?(2)——【续】检测中的LBP和HAAR特征计算过程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分类器是如何做检测的?(1)——Casc
- 下一篇: 各种编程语言的深度学习库整理(中英版)