王偉程
(上海理工大學(xué),上海 200093)
運動目標(biāo)跟蹤一直是計算機視覺研究領(lǐng)域的熱門課題之一,它是視頻監(jiān)控和安防系統(tǒng)中不可或缺的一部分。傳統(tǒng)的目標(biāo)跟蹤方法通常存在著魯棒性和實時性的矛盾,一般情況下,在視頻圖像序列中,被跟蹤的物體存在著旋轉(zhuǎn)、被遮擋、與背景相融合等現(xiàn)象,在進行目標(biāo)跟蹤時,利用簡單的模板匹配方法難以達到理想的效果,且容易出現(xiàn)誤匹配和目標(biāo)跟蹤丟失等情況。
目前,傳統(tǒng)的Camshift算法被用來解決上述問題,該算法利用目標(biāo)的顏色直方圖表示目標(biāo)顏色概率出現(xiàn)的大小,目標(biāo)的顏色直方圖僅和目標(biāo)自身的顏色相關(guān),不受其形狀變化的影響,可以有效地解決物體變形的問題。雖然傳統(tǒng)的Camshift算法原理簡單,運算效率高,然而卻無法很好地處理物體被遮擋或與背景融合等情況。針對傳統(tǒng)的Camshift算法的不足之處,本文在傳統(tǒng)Camshift目標(biāo)跟蹤方法的基礎(chǔ)上,提出了Kalman濾波算法預(yù)測運動目標(biāo)位置和粒子濾波算法進行目標(biāo)中心位置校正的Camshift改進算法,并通過實驗驗證了該算法的有效性和魯棒性。
Camshift算法是對Mean-Shift算法的改進,Camshift算法能夠根據(jù)目標(biāo)的形變大小自動調(diào)節(jié)搜索窗口大小來適應(yīng)目標(biāo)尺寸的變化,從而可以有效地避免物體形變導(dǎo)致的目標(biāo)丟失情況,Camshift算法主要包括反向投影、Mean-Shift算法、自適應(yīng)迭代過程[1]。
Camshift算法以視頻圖像中目標(biāo)的顏色信息作為特征,對輸入的每幀圖像分別作Mean-Shift運算,并將上一幀得到的目標(biāo)中心和搜索窗口大小[2]作為下一幀Mean-Shift算法的目標(biāo)中心和搜索窗口大小的初始化值[3],進行迭代運算,直到迭代終止或滿足搜索要求為止,實現(xiàn)了目標(biāo)的連續(xù)跟蹤。
RGB顏色空間對光照亮度變化敏感,在目標(biāo)跟蹤中為了減少光照強度變化對目標(biāo)跟蹤的影響,將目標(biāo)圖像由RGB顏色空間映射到HSV顏色空間進行處理。HSV顏色空間中的H表示物體顏色色調(diào),它直觀地反映了物體的顏色信息,根據(jù)圖像中H統(tǒng)計的顏色色調(diào)目標(biāo)直方圖,計算得到目標(biāo)圖像的顏色概率查找表。將輸入的每幀圖像的像素值用顏色概率查找表中對應(yīng)的值進行替換,并歸一化到[0, 255]像素值范圍內(nèi),從而得到圖像的顏色概率分布,如圖1所示,圖像反向投影顏色概率分布是一張灰度圖。
圖1 圖像反向投影顏色概率分布示意
Mean-Shift算法是一種非參數(shù)密度梯度估計算法[4],它根據(jù)搜索框的樣本點反復(fù)迭代搜索目標(biāo)圖像特征空間中樣本點最密集的區(qū)域,搜索點沿著樣本點密度增加最快的方向“漂移”到局部密度極大值點處,Mean-Shift算法設(shè)立1個“漂移”閾值和迭代終止條件,從而尋找到目標(biāo)位置。Mean-Shift算法原理簡單、計算復(fù)雜度小,算法流程示意如圖2所示。實現(xiàn)的過程包括如下步驟:
1) 設(shè)置搜索窗的初始大小和位置。
2) 計算搜索窗的重心。
3) 將搜索窗的中心設(shè)置在重心處,迭代移動搜索框的重心到質(zhì)心處。
4) 每幀圖像重復(fù)步驟2)和3),直至迭代收斂或迭代計算的搜索窗質(zhì)心移動的距離小于設(shè)定的移動閾值。設(shè)I(x,y)是圖像概率分布圖中位于(x,y)處的像素值,則有:
Camshift算法是對視頻序列中每幀圖像分別作Mean-Shift運算,將位置結(jié)果和目標(biāo)大小作為下一幀Mean-Shift算法搜索窗位置的中心和搜索框大小的初始化值[5],進行迭代運算以實現(xiàn)對視頻圖像中目標(biāo)的持續(xù)跟蹤。
粒子濾波算法又被稱為條件概率密度傳播算法,核心思想是用狀態(tài)空間傳播的隨機樣本對概率密度函數(shù)進行近似計算[6],以樣本均值結(jié)果替代積分結(jié)果,從而獲得狀態(tài)最小方差分布的過程。當(dāng)樣本容量很大時,該方法近似于狀態(tài)變量的真實后驗概率分布,從而接近最優(yōu)的貝葉斯估計。
狀態(tài)轉(zhuǎn)移方程如式(1)所示:
x(t)=f(x(t-1),u(t),w(t))
(1)
觀測方程如式(2)所示:
y(t)=h(x(t),e(t))
(2)
式中:x(t)——粒子的t時刻狀態(tài);u(t)——控制量;w(t),e(t)——狀態(tài)噪音和觀測噪音。開始時,由于初始狀態(tài)x(0)沒有前項參考值,因此認(rèn)為x(0)平均地分布在整個狀態(tài)空間;然后將所有采樣值代入狀態(tài)轉(zhuǎn)移方程中,得到初始化預(yù)測粒子。
粒子濾波算法主要包括下面幾個階段:
1) 預(yù)測階段。粒子濾波算法根據(jù)x(t-1)的概率分布情況生成大量的采樣,樣本點即為粒子,根據(jù)狀態(tài)轉(zhuǎn)移方程和控制量可以得到每個粒子的預(yù)測粒子。
2) 校正階段。觀測值y到達后,利用觀測方程即條件概率P(y|xi)對所有的粒子進行評價。條件概率指: 假設(shè)真實狀態(tài)x(t)取第i個粒子xi時,獲得觀測y的概率值,令P為第i個粒子的概率值,然后計算圖像幀的所有粒子的概率值,從而得到每個粒子的概率值。
3) 重新采樣。根據(jù)粒子退化程度判斷是否需要重新采樣,重新采樣的目的是去除概率低的粒子,盡可能地復(fù)制概率高的粒子,從而估算出需要的真實狀態(tài)x(t)。重新采樣后的粒子集對應(yīng)真實狀態(tài)的概率分布情況,再次迭代濾波時,將重新采樣后的粒子集輸入到狀態(tài)轉(zhuǎn)移方程中,即可得到預(yù)測粒子集。
粒子濾波算法根據(jù)粒子和目標(biāo)的相似性,不斷地更新粒子的權(quán)重,在粒子退化嚴(yán)重時,須重新采樣。從上面的算法和圖2所示的流程圖中可以看出,粒子濾波的計算復(fù)雜度隨著粒子數(shù)目的增加而增加。相比于Mean-Shift算法,粒子濾波算法擁有較好的跟蹤魯棒性。
圖2 粒子濾波算法流程示意
Camshift算法復(fù)雜度低、計算量小,具有良好的實時跟蹤性。當(dāng)目標(biāo)被遮擋時,Camshift算法跟蹤目標(biāo)易發(fā)生錯誤,會造成跟蹤目標(biāo)丟失的情況。針對Camshift算法的不足之處,文中提出了一種改進的Camshift算法[7]。運用Kalman算法預(yù)測當(dāng)前幀目標(biāo)的中心位置,并結(jié)合粒子濾波算法校正搜索目標(biāo)中心[8]。
1) 運用Kalman算法預(yù)測當(dāng)前幀目標(biāo)的中心位置,并對每幀圖像進行Camshift運算,將得到的實際結(jié)果反饋給Kalman濾波器修正參數(shù)[9],進而預(yù)測跟蹤目標(biāo)的下一幀位置[3],形成1個目標(biāo)位置反饋環(huán)路。利用Kalman濾波改進的Camshift算法[10-11]如圖3所示。
2) 跟Camshift算法相比,根據(jù)Kalman算法改進的Camshift算法[9]在物體被遮擋時能有效地跟蹤到物體,擁有更強的跟蹤魯棒性。然而,由于Kalman的預(yù)測是基于物體前期狀態(tài)進行預(yù)測,當(dāng)跟蹤物體被長時間遮擋或改變運動路徑時,由Kalman算法改進的Camshift算法難以在被跟蹤物體再次出現(xiàn)時進行有效跟蹤[10]。針對該問題,本文引入粒子濾波算法進行目標(biāo)中心位置校正,粒子濾波的改進作用是在物體長時間被遮擋后當(dāng)再次出現(xiàn)時能被快速的捕捉,并把粒子濾波計算得到的期望位置反饋給Camshift算法,完成后續(xù)跟蹤,達到增強跟蹤魯棒性的作用,改進算法流程如圖4所示。
圖4 改進的Camshift算法示意
首先初始化目標(biāo)圖像窗口,標(biāo)定待跟蹤物體,初始化Kalman濾波器,在Kalman期望的位置附近使用Camshift算法搜索目標(biāo)圖像,把檢測到的目標(biāo)圖像的實際位置反饋給Kalman濾波器更新Kalman參數(shù)值。在連續(xù)的視頻幀中,每10幀圖像使用粒子濾波算法計算目標(biāo)期望中心,并把期望中心對Kalman的期望中心進行一次參數(shù)校正處理,對于長時間遮擋的物體,當(dāng)它再次出現(xiàn)時能夠及時有效地校正Kalman的中心,使得長時間遮擋的物體再次出現(xiàn)時能夠得到有效的跟蹤。
軟件調(diào)試環(huán)境為visual studio 2017,圖5~圖7顯示了運動目標(biāo)跟蹤的情況,圖中標(biāo)定的物體是方形盒子,最大的方框是Kalman濾波算法和粒子濾波算法改進的Camshift算法跟蹤物體搜索出的矩形框,細(xì)框代表單個粒子濾波粒子產(chǎn)生的期望方框。
跟蹤物體在平面內(nèi)做不規(guī)則運動,通過圖5所示的4幅圖像可以看出,改進的算法能夠很好地跟蹤平面內(nèi)的運動物體,并沒有造成丟失和誤匹配等問題。該實驗表明: 改進的算法能夠有效地跟蹤不規(guī)則運動物體。
圖6~圖7中的4幅圖像分別代表物體未被遮擋、物體被半遮擋、物體被完全遮擋以及物體被遮擋后再次出現(xiàn)時算法對物體的跟蹤情況,圖6表示使用傳統(tǒng)的Camshift跟蹤算法,圖7表示使用改進的Camshift跟蹤算法。可以看出,隨著物體被遮擋程度的提高,傳統(tǒng)的Camshift算法對物體的跟蹤能力越來越差,而本文提出的改進Camshift算法始終可以有效地跟蹤物體。另外,當(dāng)物體被遮擋后再次出現(xiàn)時,傳統(tǒng)的Camshift算法未能準(zhǔn)確地跟蹤到物體,而本文提出的改進Camshift算法可以實現(xiàn)該功能。
圖6 傳統(tǒng)Camshift跟蹤算法示意
圖7 改進Camshift跟蹤算法示意
實驗結(jié)果表明: 與傳統(tǒng)的Camshift算法比較可以看出,改進的Camshift算法具有更強的魯棒性,傳統(tǒng)的Camshift算法容易發(fā)生錯誤的跟蹤,當(dāng)物體長時間被遮擋后,被跟蹤物體再次出現(xiàn)時,傳統(tǒng)的Camshift算法未能成功檢測并重新跟蹤。因此,改進的Camshift算法在魯棒性和穩(wěn)定性上優(yōu)于傳統(tǒng)的Camshift算法。
本文提出了結(jié)合Kalman濾波和粒子濾波算法改進的Camshift算法,該算法在跟蹤實驗中表現(xiàn)出良好的跟蹤性能。該算法首先在Camshift算法基礎(chǔ)上利用Kalman對搜索窗口進行運動位置預(yù)測,然后引入粒子濾波算法校正Camshift的目標(biāo)中心位置。實驗結(jié)果表明: 改進的Camshift算法可以在不影響跟蹤實時性的前提下有效提高目標(biāo)跟蹤的魯棒性。