牛 穎,李麗宏
(太原理工大學 電氣與動力工程學院,太原 030024)
人臉檢測與跟蹤是計算機視覺和圖像處理領域的一個重要分支,在安防監控系統[1]、門禁系統[2]和機器人[3]等系統中應用非常廣泛,已引起越來越多研究人員的關注.Turk等提出了特征臉,通過比較面部特征與已知個體的特征來識別目標人物,其性能容易受到光照和姿態變化的影響[4].簡毅等提出基于遺傳優化 GRNN神經網絡的人臉識別算法將人臉識別的準確率提高到88%,但平滑因子選取不當則達不到預期效果[5].張濤等提出一種融合了卡爾曼濾波器的Mean Shift算法,實現了實時多人臉跟蹤,但背景光線變化對跟蹤的準確性影響較大[6].王健基于傳統的Gentle AdaBoost算法在弱分類器訓練中引入代價因子,通過更新其權值,提高了人臉檢測率,但檢測速度慢,無法滿足實時性要求[7].DU等使用幀差法提取運動區域,通過融合卡爾曼濾波器的CamShift算法識別人臉,提高了系統的魯棒性,但因計算量大導致運行速度慢[8].Nhat等提出基于特征自適應模型,實現了準確且快速的人臉追蹤,但此法僅能檢測一張人臉[9].Zhang等人將KCF算法和CamShift算法相結合,能有效地抵抗干擾,實現對目標人臉的穩定跟蹤,但實時性較差[10].席志紅等提出背景差分法改進TLD算法的檢測模塊,提高了跟蹤速度,但此法不能很好處理目標被遮擋的情況[11].
本文使用融合CamShift的TLD算法,改進了跟蹤模塊,利用直方圖反向投影得到目標圖像像素的概率分布,自適應調整目標窗口大小并自動跟蹤目標,提高了人臉追蹤效率和準確率.
TLD算法分為跟蹤模塊、檢測模塊和學習模塊三個部分[12].跟蹤模塊在連續的視頻序列中對目標進行追蹤,檢測模塊通過對視頻序列的每一幀圖像進行獨立的檢測,獲取目標物體的最新外觀特征來定位每一幀圖像中目標物體的位置,追蹤模塊追蹤目標失敗后幫助系統重新定位并追蹤目標物體,使得系統重新穩定運行.跟蹤模塊與檢測模塊是獨立工作的.學習模塊根據跟蹤模塊結果和檢測模塊結果的對比評估錯誤和誤差,通過迭代訓練樣本,更新檢測模塊的目標模型,實現自我學習,避免以后出現類似錯誤,從而使跟蹤更加穩定和可靠[13].TLD算法整體結構如圖1所示.

圖1 TLD算法整體結構Fig.1 TLD algorithm overall structure
TLD算法中跟蹤器采用的是L-K光流法,該方法在視頻處理過程中需要從圖像金字塔最高層開始計算光流,向塔底迭代計算,復雜度較高,導致跟蹤實時性很差.
本文將CamShift算法作為TLD算法框架中的跟蹤模塊,通過計算目標圖像在HSV顏色空間下的顏色分量直方圖,利用直方圖反向投影得到目標圖像像素的概率分布,自動定位并跟蹤目標并自適應調整目標窗口大小.該算法計算量小且易于實現.在前一幀圖像中進行Haar人臉特征提取,并使用分類器檢測出人臉,然后使用CamShift算法對目標人臉進行跟蹤,步驟如下:
1)將包含目標人臉的待檢圖像的色度分為m個等級,記第i個像素坐標為(xi,yi),其色度特征值為b(xi,yi),待檢圖像的特征色調值為u,則可構建色度特征直方圖模型為q={qu},u=1,2,…,m.
(1)
2)根據步驟1)構建的色度特征直方圖模型進行反向投影,預測其灰度值,形成概率投影圖.設像素(x,y)對應的特征色調值為u,則該像素點的概率投影圖的灰度值I(x,y)為:
(2)
其中,?·」為向下取整符號.
3)計算待檢圖像中定位窗口的零階矩和一階矩:
(3)
4)計算定位窗口的質心(xw,yw):
(4)
5)對定位窗口的大小進行自適應調整:
(5)
設定定位窗口的中心與質心的距離閾值,若該距離大于設定閾值,重復步驟3)到步驟5),直到該距離達到預定要求,小于設定閾值.
6)計算定位窗口的二階矩:
(6)

(7)
(8)
則橢圓形定位窗口的大小和方向為:
(9)
7)獲取下一幀圖像,返回步驟1),重新構建色度特征直方圖模型,計算新的目標圖像的像素點,直至完成目標跟蹤.
跟蹤模塊使用CamShift算法,可以跟蹤目標圖像并自適應地調整定位窗口大小,獲取目標人臉的大概位置,從而提高跟蹤模塊的運行速度.
TLD算法的檢測模塊對圖像進行滑動窗法掃描搜索,即對用一個個小窗口對輸入圖像進行掃描,掃描窗口尺度縮放系數為1.2,窗口水平方向步長是圖像寬度的10%,窗口豎直方向步長是圖像高度的10%,如圖2所示.以大小為320×240的圖片為例,滑動窗法掃描次數高達5萬次,計算量非常龐大.因此需要有效的分類器,檢測模塊中分類器是由三個子分類器級聯而成,對從目標邊界框獲得的樣本進行分類.子分類器包括圖像方差分類器、集成分類器和最近鄰分類器.

圖2 掃描框示意圖Fig.2 Schematic diagram of the scan box
一般情況下,跟蹤器可以追蹤出人臉大致位置,而檢測器需要對人臉位置進行更精準的檢測.以本文所采集的1920×1080分辨率圖片為例,人臉距離圖像采集設備距離在0.5m~2m的情況下,圖像中人臉所占大小約在250×200像素到400×500像素之間.設圖像視野寬度為W,高度為h,目標人臉所占窗口最大尺寸的寬度為wmax,高度為hmax,人臉所占窗口最小尺寸的寬度wmin,高度為hmin,若掃描框的變換階數設為k,那么單次掃描框寬度及高度變化增量表示為:
ΔW=(Wmax-Wmin)/k
Δh=(hmax-hmin)/k
(10)
若當前幀的目標矩形框最初尺寸寬度為ws,高度為hs,則第i種掃描矩形框的寬度計算公式為:
Wi=Ws-ΔW·i,i∈Z[0,il]
Wi=Ws+ΔW·i,i∈Z[0,ir]
(11)
其中:il=(ws-wmin)/Δw,ir=(wmax-ws)/Δw
同理第i種掃描矩形框的高度計算公式為:
hi=hs-Δh·i,i∈Z[0,il]
hi=hs+Δh·i,i∈Z[0,ir]
(12)
其中,il=(hs-hmin)/Δh,ir=(hmax-hs)/Δh
求出當前幀中矩形框的中心點即臉部中心(xc,yc),在左上角坐標(xc-ws,yc-ws),右下角坐標(xc+ws,yc+ws)的矩形范圍內進行矩形框滑動檢測,滑動時的行步長計算公式為:
sr=λΔw,sc=λΔh
(13)
λ取值為[0,1]的實數.
將所有種掃描框中的圖像區域提取出來,作為一個集合對其進行分類器檢測.
1)方差分類器
積分圖像在圖像計算處理過程中具有重要作用,積分圖像定義為:圖像上任意位置(x,y)處值ii(x,y)為該點左上角所有像素的和,如公式(14)所示:

(14)
其中i(r,c)表示初始圖像(r,c)位置的像素值.通過積分圖像計算圖像某一區域像素方差時可大大縮短計算時間.如圖3所示,P1,P2,P3,P4圍成的區域A.

圖3 通過積分圖計算像素方差Fig.3 Calculate pixel variance by integral graph
由積分圖像的定義可知,該區域圖像的像素和為sum(A)=P4-P2-P3+P1.該區域圖像的期望為:E(A)=sum(A)/(hi·wi),對于第i個矩形框區域集合,其灰度值方差σ12計算如下:
(15)
將該矩形區域中圖像的像素灰度值方差σ22與目標圖像的方差σ22相比較,若σ12≤0.5σ22,則從集合中排除該矩形區域圖像,否則認為當前掃描窗口包含目標圖像.
2)集成分類器
集成分類器實際是隨機蕨分類器,每層節點判斷準則相同,是線性結構的分類器.集成分類器根據樣本特征值進行判斷,例如,在圖像中任意選取兩點A和B,對兩點亮度值進行比較,若A的亮度大于B,則特征值為1,否則為0.蕨的每個節點就是通過比較每一對像素點.每選取一對新像素點,就是一個新的特征值.同一類的多個樣本經過同一個蕨,得到該類結果的分布直方圖,計算見公式(16).用很多個蕨對同一樣本分類,投票數最大的類作為新樣本的分類,這樣可以很大程度提高分類器的準確度.
(16)
其中,p(F|Ck)代表類的先驗概率,F代表蕨的結果.
3)最近鄰分類器
通過最近鄰分類器對掃描框圖像集合進一步篩選,最近鄰分類器通過計算圖片間對應點像素值間的距離作為評定準則,如兩個圖像像素向量間的曼哈頓距離.假定第i個矩形框區域的像素分布如圖4所示,將其作為輸入圖像,目標矩形框作為參考像素框,相減后各像素和作為圖像距離的評定標準,數值越小則表示距離越近.篩選出距離最近的k個掃描框圖像作為最終結果.

圖4 圖像像素點求距離示意圖Fig.4 Image pixel point distance map
在TLD算法框架中,跟蹤模塊與檢測模塊是并行獨立工作的.學習模塊根據跟蹤模塊結果和檢測模塊結果的對比評估錯誤和誤差,通過迭代訓練樣本,更新檢測模塊的目標模型,實現自我學習,被稱為P-N學習器.P-N學習器流程框圖如圖5所示.

圖5 學習模塊流程圖Fig.5 Learning module flow chart
首先根據標記樣本數據,經過訓練得到初始分類器.P-N專家負責找出錯誤分類樣本,并對訓練樣本集做出修正.由于目標與背景在圖像中是共存的,并不相互獨立.在檢測模塊中,P專家負責找出被標為背景的目標圖像,也就是錯誤的負圖像;而N專家負責找出標記為目標的背景圖像,也就是錯誤的正圖像.
本文將改進的TLD算法與TLD算法和CamShift算法進行對比試驗.本文試驗設置改進的TLD算法中CamShift算法迭代次數為10,檢測模塊中檢測到的目標人臉和真實人臉的定位窗口重疊50%及以上,則認為跟蹤正確,以此作為標準對算法的效果進行對比.
本試驗分別在人與相機距離0.5m,1m,2m時,使用改進的TLD算法和TLD算法實現人臉跟蹤,實時跟蹤效果良好,其效果圖見圖6.分圖左圖均為原始TLD算法效果圖,分圖右圖均為改進的TLD算法效果圖.

圖6 改進的TLD算法和TLD算法實現人臉跟蹤Fig.6 Improved TLD algorithm and TLD algorithm for face tracking
通過圖6可知,在人與相機距離不同時,TLD算法和改進的TLD算法均成功實現人臉跟蹤,這兩種算法跟蹤準確率和實時性見表1.
表1 改進的TLD算法和TLD算法跟蹤實時性比較
Table 1 Comparison of improved TLD algorithm and
TLD algorithm tracking real-time

算 法人與相機距離/m總幀數跟蹤準確率所用時間/s幀率TLD算法0.550390%4311.7149889%4211.8250189%4311.7改進的TLD算法0.550392%3116.2149891%3016.1250191%3116.1
根據表1的測試數據可知,對500幀圖像進行跟蹤,原始TLD算法所用時間約為42s,跟蹤準確率約為89%.改進的TLD算法所用時間約為31s,跟蹤準確率約為91%.改進的TLD算法跟蹤準確率提高了2%,所用時間減少11s.
有無遮擋物時,改進的TLD算法和CamShift算法實現人臉跟蹤如圖7所示.分圖左圖均為原始CamShift算法效果圖,分圖右圖均為改進的TLD算法效果圖.
通過圖7可知,臉部存在遮擋物時,CamShift算法將無法準確實現人臉跟蹤,甚至出現跟蹤失敗.但使用改進的TLD算法,可以成功跟蹤人臉,這兩種算法的跟蹤準確率和實時性見表2.

圖7 改進的TLD算法和CamShift算法實現人臉跟蹤Fig.7 CamShift algorithm and improved TLD algorithm for face tracking
根據表2的測試數據可知,沒有遮擋物時對500幀圖像進行跟蹤,原始CamShift算法所用時間約為35s,跟蹤準確率約為92%;改進的TLD算法所用時間約為27s,跟蹤準確率約為92%,改進的TLD算法跟蹤所用時間減少8s.有遮擋物時對500幀圖像進行跟蹤,原始CamShift算法所用時間約為36s,跟蹤準確率約為87%,改進的TLD算法所用時間約為28s,跟蹤準確率約為91%.改進的TLD算法跟蹤準確率提高了4%,所用時間減少8s.
表2 改進的TLD算法和CamShift算法跟蹤實時性比較
Table 2 Improved TLD algorithm and CamShift algorithm for
tracking real-time comparison

算 法總幀數是否遮擋跟蹤準確率所用時間/s幀率CamShift算法496否92%3514.1500是87%3613.8改進的TLD算法496否92%2718.3500是91%2817.8
綜合上述數據分析可知,使用改進的TLD算法,跟蹤準確率和幀率均高于原始兩種算法,且在有遮擋物的情況下也能成功跟蹤人臉.
針對TLD算法跟蹤人臉實時性差的問題,本文提出了改進的TLD算法,該方法使用CamShift算法作為跟蹤模塊,對跟蹤性能進行優化.通過對比試驗可知,改進的TLD算法相比于TLD算法和CamShift算法,人臉跟蹤效率和準確率均得到提高,滿足試驗要求.
在Visual Studio 2015平臺上創建應用程序進行測試,結果表明,本方法思路合理,有效地實現了實時人臉跟蹤.