李興陽(yáng),趙天亮,李雅欣,桑飛飛,王晨宇,肖春寶
(河南科技大學(xué) 信息工程學(xué)院,河南 洛陽(yáng) 471023)
計(jì)算機(jī)視覺(jué)技術(shù)在當(dāng)前的科技領(lǐng)域中擁有著廣泛的應(yīng)用,其中目標(biāo)跟蹤技術(shù)是研究的重點(diǎn)之一。由于目標(biāo)跟蹤技術(shù)具有廣泛的應(yīng)用前景,在過(guò)去的幾十年里,已經(jīng)涌現(xiàn)出了許多優(yōu)秀的目標(biāo)跟蹤算法,其中基于核相關(guān)濾波(KCF)的算法成為研究熱點(diǎn)之一。KCF算法通過(guò)對(duì)模板和響應(yīng)圖像之間的相關(guān)運(yùn)算來(lái)進(jìn)行目標(biāo)跟蹤,具有實(shí)時(shí)性和高準(zhǔn)確性的優(yōu)點(diǎn),已經(jīng)成為目標(biāo)跟蹤領(lǐng)域的主流算法之一。
然而,在實(shí)際應(yīng)用中,由于種種原因,如目標(biāo)快速運(yùn)動(dòng)、光照變化、目標(biāo)遮擋等,傳統(tǒng)的KCF算法可能會(huì)出現(xiàn)跟蹤失敗或跟蹤誤差大等情況,這給目標(biāo)跟蹤技術(shù)的應(yīng)用帶來(lái)了困難。針對(duì)以上問(wèn)題,本文在KCF算法的基礎(chǔ)上,提出了一種針對(duì)目標(biāo)被遮擋后導(dǎo)致目標(biāo)丟失的解決方法,通過(guò)該幀的響應(yīng)峰值判斷目標(biāo)是否異常,若目標(biāo)連續(xù)異常數(shù)達(dá)到閾值則判定目標(biāo)丟失,此時(shí)通過(guò)使用運(yùn)動(dòng)估計(jì)和模板匹配算法來(lái)重定位目標(biāo),重定位成功后則繼續(xù)采用KCF算法進(jìn)行跟蹤。
KCF算法是一種經(jīng)典的目標(biāo)跟蹤算法,采用離散傅里葉變換(DFT)和相關(guān)濾波的思想,通過(guò)計(jì)算目標(biāo)和背景的相似度,實(shí)現(xiàn)目標(biāo)的定位和跟蹤。KCF算法首先通過(guò)使用高斯核函數(shù)將目標(biāo)的特征表示為一個(gè)高維向量,然后通過(guò)計(jì)算訓(xùn)練樣本和測(cè)試樣本的核相關(guān)矩陣,得到訓(xùn)練樣本的響應(yīng)圖。使用循環(huán)移位技術(shù)將測(cè)試樣本響應(yīng)圖的峰值與目標(biāo)位置對(duì)齊,即可得到目標(biāo)的位置信息。最后,利用在線(xiàn)學(xué)習(xí)方法不斷更新目標(biāo)的特征向量,實(shí)現(xiàn)目標(biāo)的連續(xù)跟蹤。KCF算法具有計(jì)算速度快、實(shí)時(shí)性強(qiáng)和魯棒性好等優(yōu)點(diǎn),在目標(biāo)跟蹤領(lǐng)域得到了廣泛應(yīng)用。由于該算法依賴(lài)于局部相似度和單目標(biāo)模型,在復(fù)雜場(chǎng)景下仍然存在著一定的局限性,需要進(jìn)行進(jìn)一步改進(jìn)。
當(dāng)目標(biāo)丟失后,傳統(tǒng)KCF算法將繼續(xù)使用上一幀的跟蹤結(jié)果來(lái)預(yù)測(cè)下一幀中的目標(biāo)位置,從而導(dǎo)致跟蹤框位置發(fā)生漂移。由于KCF算法總是將待檢測(cè)樣本中響應(yīng)值最大的位置作為目標(biāo),無(wú)論目標(biāo)是否在采樣窗口內(nèi),在待檢測(cè)的樣本中總有響應(yīng)值最大的位置,此位置可能并非目標(biāo)的真實(shí)位置。
采用文獻(xiàn)[1]的思想,并加以改進(jìn),可以根據(jù)響應(yīng)峰值的大小來(lái)判斷目標(biāo)是否丟失或?qū)⒁獊G失。令Pt表示當(dāng)前幀的響應(yīng)峰值,集合{Vi|i=1,2,…,n}表示從開(kāi)始到當(dāng)前幀為止所有響應(yīng)峰值正常的幀的響應(yīng)峰值的大小。
(1)
其中:v表示正常幀的響應(yīng)峰值的平均值;σ表示標(biāo)準(zhǔn)差。
如果當(dāng)前幀的響應(yīng)峰值距離均值v超過(guò)了λσ(λ為異常檢測(cè)因子)則判定當(dāng)前幀中的目標(biāo)跟蹤異常。當(dāng)待測(cè)樣本中響應(yīng)峰值出現(xiàn)異常,這并不能代表目標(biāo)已經(jīng)失去跟蹤,可能只是目標(biāo)部分被遮擋所導(dǎo)致,當(dāng)目標(biāo)再次出現(xiàn)時(shí),仍然能夠繼續(xù)定位,所以此時(shí)繼續(xù)采用KCF算法進(jìn)行跟蹤。當(dāng)連續(xù)T(本文取值25)幀出現(xiàn)響應(yīng)峰值異常時(shí),說(shuō)明此時(shí)目標(biāo)已經(jīng)跟蹤失敗,判定目標(biāo)丟失,需要重新對(duì)目標(biāo)進(jìn)行定位。
當(dāng)目標(biāo)發(fā)生遮擋時(shí),主要是因?yàn)槟繕?biāo)發(fā)生橫向移動(dòng)所導(dǎo)致,縱向移動(dòng)主要影響目標(biāo)的尺度變化,故此時(shí)可以忽略目標(biāo)的尺度變化[2]。當(dāng)檢測(cè)到峰值異常時(shí),記錄最近一次正常幀的目標(biāo)模板,當(dāng)超過(guò)幀峰值仍未恢復(fù)正常,則應(yīng)該停止對(duì)目標(biāo)模板的更新,同時(shí)將目標(biāo)模板恢復(fù)至最近一次正常幀的目標(biāo)模板,減少異常幀對(duì)目標(biāo)模板的影響,同時(shí)開(kāi)始重定位目標(biāo)位置。
2.2.1 線(xiàn)性預(yù)測(cè)目標(biāo)位置
當(dāng)目標(biāo)丟失后,由于攝像機(jī)的運(yùn)動(dòng)和目標(biāo)的運(yùn)動(dòng)同時(shí)發(fā)生,目標(biāo)的位置很難預(yù)測(cè),也并沒(méi)有很好的運(yùn)動(dòng)模型適合預(yù)測(cè)。由于目標(biāo)的運(yùn)動(dòng)趨勢(shì)在最近幾幀中并不會(huì)有較大改變,再加上系統(tǒng)對(duì)實(shí)時(shí)性的要求,故采用線(xiàn)性預(yù)測(cè)[3]的方法來(lái)估計(jì)目標(biāo)的新位置。
設(shè)在第t幀中目標(biāo)響應(yīng)峰值開(kāi)始異常,目標(biāo)框的中心位置(xt,yt),則在連續(xù)T幀后,即t+T幀開(kāi)始對(duì)目標(biāo)位置進(jìn)行重定位。集合L={(xi,yi)|i=1,2,…,n}表示t幀前n幀中目標(biāo)框的中心位置,則有:
(2)
然后,對(duì)預(yù)測(cè)位置進(jìn)行模板匹配,根據(jù)響應(yīng)峰值判斷是否預(yù)測(cè)成功,如果預(yù)測(cè)成功則繼續(xù)進(jìn)行KCF算法,反之開(kāi)始進(jìn)行模板匹配算法,再次進(jìn)行重定位。
2.2.2 模板匹配算法
采用歸一化相關(guān)系數(shù)匹配算法,在響應(yīng)峰值正常的圖像中根據(jù)目標(biāo)的位置,將目標(biāo)截取出來(lái)并保存,作為模板匹配的模板圖像使用。當(dāng)目標(biāo)丟失后再次出現(xiàn)時(shí),通過(guò)歸一化相關(guān)系數(shù)匹配算法,能夠很容易在一幀中將目標(biāo)定位出來(lái)。
(3)
其中,⊙表示兩個(gè)矩陣進(jìn)行點(diǎn)乘;T表示模板圖像;I表示待匹配圖像;T′,I′表示去均值后的矩陣;x,y代表當(dāng)前搜索框在I矩陣中左上角元素的坐標(biāo);x′,y′ 代表T和搜索框框出來(lái)的I的矩陣的元素坐標(biāo)。
計(jì)算出的相關(guān)系數(shù)被限制在了[-1, 1] 之間,1表示完全相同,-1表示兩幅圖像的亮度正好相反,0 表示兩幅圖像之間沒(méi)有線(xiàn)性關(guān)系。通過(guò)尋找輸出矩陣的最大值,得到一個(gè)像素點(diǎn),以該像素點(diǎn)為矩形區(qū)域的左上角,繪制與模板圖像同尺寸的矩形框,此矩形框就是通過(guò)模板匹配算法定位到的目標(biāo)可能存在的位置。然后通過(guò)KCF算法對(duì)其進(jìn)行判定,若得到的響應(yīng)峰值不再異常,則判定目標(biāo)重定位成功,反之失敗。
首先,讀入視頻序列并選擇跟蹤目標(biāo),然后采用KCF算法進(jìn)行跟蹤,判定目標(biāo)跟蹤是否異常,當(dāng)連續(xù)異常幀數(shù)大于幀時(shí)判定目標(biāo)丟失,跟蹤失敗,此時(shí)開(kāi)始目標(biāo)重定位算法,優(yōu)先通過(guò)模板匹配算法對(duì)目標(biāo)可能出現(xiàn)的位置進(jìn)行預(yù)測(cè),然后根據(jù)響應(yīng)峰值判斷目標(biāo)是否重定位成功,若成功則進(jìn)入下一幀,若失敗則通過(guò)線(xiàn)性預(yù)測(cè),進(jìn)行目標(biāo)定位,再次通過(guò)目標(biāo)框的響應(yīng)峰值判斷目標(biāo)是否重定位成功,若失敗則使用正常幀去檢測(cè)下一幀中的目標(biāo)。
圖1 算法流程圖
為了驗(yàn)證算法的跟蹤性能,采用距離精度(DP),即中心位置誤差低于某一閾值(本文取30)的幀數(shù)占視頻總幀數(shù)的百分比。(xa,ya)表示預(yù)測(cè)目標(biāo)中心位置,(xb,yb)表示真實(shí)的目標(biāo)中心位置。
(4)
符合條件的幀數(shù):中心位置誤差<閾值
精度 = 符合條件的幀數(shù)/總幀數(shù)
由表1中的數(shù)據(jù)可知,本文算法在目標(biāo)發(fā)生遮擋時(shí)跟蹤效果比較好,KCF算法數(shù)據(jù)DP精度較小是因?yàn)樗惴ㄔ谀繕?biāo)被遮擋時(shí),沒(méi)有進(jìn)行有效的判定,導(dǎo)致后續(xù)目標(biāo)一直處于丟失狀態(tài)。本文通過(guò)線(xiàn)性預(yù)測(cè)和模板匹配兩種算法對(duì)丟失目標(biāo)進(jìn)行重定位,能夠有效提高KCF算法對(duì)丟失目標(biāo)的再次跟蹤的能力。
表1 DP精度對(duì)比
表2 運(yùn)行速度對(duì)比
KCF算法的平均速度約為62幀/s,本文算法平均速度約為48幀/s,相比之下,本文算法在速度上有所下降,這是因?yàn)樵谂卸繕?biāo)響應(yīng)峰值是否異常、目標(biāo)的線(xiàn)性預(yù)測(cè)以及目標(biāo)的模板匹配時(shí)耗費(fèi)了一些時(shí)間,不過(guò)考慮到對(duì)目標(biāo)跟蹤準(zhǔn)確度的提升,還是在可接受范圍的。
圖2 展示了KCF算法和改進(jìn)算法對(duì)Pktest01序列數(shù)據(jù)的跟蹤效果對(duì)比。傳統(tǒng)KCF算法在目標(biāo)被遮擋后再次回到視野之內(nèi)時(shí),KCF算法并不能夠識(shí)別并跟蹤目標(biāo),相比之下本文通過(guò)引入線(xiàn)性預(yù)測(cè)和模板匹配算法,增強(qiáng)了原算法對(duì)目標(biāo)丟失后的處理能力。
圖2 Pktest01數(shù)據(jù)跟蹤效果對(duì)比
本文提出了一種改進(jìn)的基于核相關(guān)濾波(KCF)的目標(biāo)跟蹤算法,通過(guò)引入線(xiàn)性預(yù)測(cè)和模板匹配技術(shù)對(duì)于丟失目標(biāo)進(jìn)行重新定位。實(shí)驗(yàn)結(jié)果表明,本文所提出的改進(jìn)算法在跟蹤準(zhǔn)確性和魯棒性方面都有顯著提高,但由于融入了重定位算法,導(dǎo)致算法在追蹤速度方面有所下降。下一步的研究方向主要是,在不影響跟蹤效果的同時(shí),提高算法的運(yùn)行速度。