姓名:劉帆;學(xué)號:20021210609;學(xué)院:電子工程學(xué)院
轉(zhuǎn)載于:
https://blog.csdn.net/qq_34919792/article/details/89893214
【嵌牛導(dǎo)讀】目標(biāo)跟蹤算法研究難點(diǎn)與挑戰(zhàn)在于實(shí)際復(fù)雜的應(yīng)用環(huán)境 、背景相似干擾、光照條件的變化、遮擋等外界因素以及目標(biāo)姿態(tài)變化,外觀變形,尺度變化、平面外旋轉(zhuǎn)、平面內(nèi)旋轉(zhuǎn)、出視野、快速運(yùn)動和運(yùn)動模糊等。而且當(dāng)目標(biāo)跟蹤算法投入實(shí)際應(yīng)用時(shí),不可避免的一個問題——實(shí)時(shí)性問題也是非常的重要。正是有了這些問題,才使得算法研究充滿著難點(diǎn)和挑戰(zhàn)。
【嵌牛鼻子】目標(biāo)跟蹤算法,傳統(tǒng)算法
【嵌牛提問】利用目標(biāo)跟蹤檢測算法要達(dá)到何目的?第一階段的單目標(biāo)追蹤算法包括什么?具體步驟有哪些?它們有何特點(diǎn)?
【嵌牛正文】
第一階段
目標(biāo)跟蹤分為兩個部分,一個是對指定目標(biāo)尋找可以跟蹤的特征,常用的有顏色,輪廓,特征點(diǎn),軌跡等,另一個是對目標(biāo)特征進(jìn)行跟蹤。
1、靜態(tài)背景
1)背景差:對背景的光照變化、噪聲干擾以及周期性運(yùn)動等進(jìn)行建模。通過當(dāng)前幀減去背景圖來捕獲運(yùn)動物體的過程。
2)幀差:由于場景中的目標(biāo)在運(yùn)動,目標(biāo)的影像在不同圖像幀中的位置不同。該類算法對時(shí)間上連續(xù)的兩幀或三幀圖像進(jìn)行差分運(yùn)算,不同幀對應(yīng)的像素點(diǎn)相減,判斷灰度差的絕對值,當(dāng)絕對值超過一定閾值時(shí),即可判斷為運(yùn)動目標(biāo),從而實(shí)現(xiàn)目標(biāo)的檢測功能。


與二幀差分法不同的是,三幀差分法(交并運(yùn)算)去除了重影現(xiàn)象,可以檢測出較為完整的物體。幀間差分法的原理簡單,計(jì)算量小,能夠快速檢測出場景中的運(yùn)動目標(biāo)。但幀間差分法檢測的目標(biāo)不完整,內(nèi)部含有“空洞”,這是因?yàn)檫\(yùn)動目標(biāo)在相鄰幀之間的位置變化緩慢,目標(biāo)內(nèi)部在不同幀圖像中相重疊的部分很難檢測出來。幀間差分法通常不單獨(dú)用在目標(biāo)檢測中,往往與其它的檢測算法結(jié)合使用。
3)Codebook
算法為圖像中每一個像素點(diǎn)建立一個碼本,每個碼本可以包括多個碼元(對應(yīng)閾值范圍),在學(xué)習(xí)階段,對當(dāng)前像素點(diǎn)進(jìn)行匹配,如果該像素值在某個碼元的學(xué)習(xí)閾值內(nèi),也就是說與之前出現(xiàn)過的某種歷史情況偏離不大,則認(rèn)為該像素點(diǎn)符合背景特征,需要更新對應(yīng)點(diǎn)的學(xué)習(xí)閾值和檢測閾值。
如果新來的像素值與每個碼元都不匹配,則可能是由于動態(tài)背景導(dǎo)致,這種情況下,我們需要為其建立一個新的碼元。每個像素點(diǎn)通過對應(yīng)多個碼元,來適應(yīng)復(fù)雜的動態(tài)背景。
在應(yīng)用時(shí),每隔一段時(shí)間選擇K幀通過更新算法建立CodeBook背景模型,并且刪除超過一段時(shí)間未使用的碼元。
4)GMM
混合高斯模型(Gaussian of Micture Models,GMM)是較常用的背景去除方法之一(其他的還有均值法、中值法、滑動平均濾波等)。
首先我們需要了解單核高斯濾波的算法步驟:



混合高斯建模GMM(Gaussian Mixture Model)作為單核高斯背景建模的擴(kuò)展,是目前使用最廣泛的一種方法,GMM將背景模型描述為多個分布,每個像素的R、G、B三個通道像素值的變化分別由一個混合高斯模型分布來刻畫,符合其中一個分布模型的像素即為背景像素。作為最常用的一種背景建模方法,GMM有很多改進(jìn)版本,比如利用紋理復(fù)雜度來更新差分閾值,通過像素變化的劇烈程度來動態(tài)調(diào)整學(xué)習(xí)率等。
5)ViBe(2011)
ViBe算法主要特點(diǎn)是隨機(jī)背景更新策略,這和GMM有很大不同。其步驟和GMM類似。具體的思想就是為每個像素點(diǎn)存儲了一個樣本集,樣本集中采樣值就是該像素點(diǎn)過去的像素值和其鄰居點(diǎn)的像素值,然后將每一個新的像素值和樣本集進(jìn)行比較來判斷是否屬于背景點(diǎn)。
其中pt(x)為新幀的像素值,R為設(shè)定值,p1、p2、p3….為樣本集中的像素值,以pt(x)為圓心R為半徑的圓被認(rèn)為成一個集,當(dāng)樣本集與此集的交集大于設(shè)定的閾值#min時(shí),可認(rèn)為此為背景像素點(diǎn)(交集越大,表示新像素點(diǎn)與樣本集越相關(guān))。我們可以通過改變#min的值與R的值來改變模型的靈敏度。


Step1:初始化單幀圖像中每個像素點(diǎn)的背景模型。假設(shè)每一個像素和其鄰域像素的像素值在空域上有相似的分布?;谶@種假設(shè),每一個像素模型都可以用其鄰域中的像素來表示。為了保證背景模型符合統(tǒng)計(jì)學(xué)規(guī)律,鄰域的范圍要足夠大。當(dāng)輸入第一幀圖像時(shí),即t=0時(shí),像素的背景模型。其中,NG(x,y)表示空域上相鄰的像素值,f(xi,yi)表示當(dāng)前點(diǎn)的像素值。在N次的初始化的過程中,NG(x,y)中的像素點(diǎn)(xi,yi)被選中的可能次數(shù)為L=1,2,3,…,N。

Step2:對后續(xù)的圖像序列進(jìn)行前景目標(biāo)分割操作。當(dāng)t=k時(shí),像素點(diǎn)(x,y)的背景模型為BKm(x,y),像素值為fk(x,y)。按照下面判斷該像素值是否為前景。這里上標(biāo)r是隨機(jī)選的;T是預(yù)先設(shè)置好的閾值。當(dāng)fk(x,y)滿足符合背景#N次時(shí),我們認(rèn)為像素點(diǎn)fk(x,y)為背景,否則為前景。
Step3:ViBe算法的更新在時(shí)間和空間上都具有隨機(jī)性。每一個背景點(diǎn)有1/ φ的概率去更新自己的模型樣本值,同時(shí)也有1/ φ的概率去更新它的鄰居點(diǎn)的模型樣本值。更新鄰居的樣本值利用了像素值的空間傳播特性,背景模型逐漸向外擴(kuò)散,這也有利于Ghost區(qū)域的更快的識別。同時(shí)當(dāng)前景點(diǎn)計(jì)數(shù)達(dá)到臨界值時(shí)將其變?yōu)楸尘?,并?/ φ的概率去更新自己的模型樣本值(為了減少緩慢移動物體的影響和攝像機(jī)的抖動)。
可以有如下總結(jié),ViBe中的每一個像素點(diǎn)在更新的時(shí)候都有一個時(shí)間和空間上隨機(jī)影響的范圍,這個范圍很小,大概3x3的樣子,這個是考慮到攝像頭抖動時(shí)會有坐標(biāo)的輕微來回變化,這樣雖然由于ViBe的判別方式仍認(rèn)為是背景點(diǎn),但是也會對后面的判別產(chǎn)生影響,為了保證空間的連續(xù)性,隨機(jī)更新減少了這個影響。而在樣本值保留在樣本集中的概率隨著時(shí)間的增大而變小,這就保證了像素模型在時(shí)間上面的延續(xù)特性。
6)光流
光流是由物體或相機(jī)的運(yùn)動引起的圖像對象在兩個連續(xù)幀之間的視在運(yùn)動模式。它是2D矢量場,其中每個矢量是一個位移矢量,顯示點(diǎn)從第一幀到第二幀的移動。

光流實(shí)際上是一種特征點(diǎn)跟蹤方法,其計(jì)算的為向量,基于三點(diǎn)假設(shè):
1、場景中目標(biāo)的像素在幀間運(yùn)動時(shí)亮度(像素值或其衍生值)不發(fā)生變化;2、幀間位移不能太大;3、同一表面上的鄰近點(diǎn)都在做相同的運(yùn)動;
光流跟蹤過程:1)對一個連續(xù)視頻幀序列進(jìn)行處理;2)對每一幀進(jìn)行前景目標(biāo)檢測;3)對某一幀出現(xiàn)的前景目標(biāo),找出具有代表性的特征點(diǎn)(Harris角點(diǎn));4)對于前后幀做像素值比較,尋找上一幀在當(dāng)前幀中的最佳位置,從而得到前景目標(biāo)在當(dāng)前幀中的位置信息;5)重復(fù)上述步驟,即可實(shí)現(xiàn)目標(biāo)跟蹤
2、運(yùn)動場(分為相機(jī)固定,但是視角變化和相機(jī)是運(yùn)動的)
1)運(yùn)動建模(如視覺里程計(jì)運(yùn)動模型、速度運(yùn)動模型等)
運(yùn)動學(xué)是對進(jìn)行剛性位移的相機(jī)進(jìn)行構(gòu)型,一般通過6個變量來描述,3個直角坐標(biāo),3個歐拉角(橫滾、俯仰、偏航)。
Ⅰ、對相機(jī)的運(yùn)動建模
由于這個不是我們本次所要討論的重點(diǎn),但是在《概率機(jī)器人》一書中提出了很多很好的方法,相機(jī)的運(yùn)動需要對圖像內(nèi)的像素做位移矩陣和旋轉(zhuǎn)矩陣的坐標(biāo)換算。除了對相機(jī)建立傳統(tǒng)的速度運(yùn)動模型外,也可以用視覺里程計(jì)等通關(guān)過置信度的更新來得到概率最大位置。
Ⅱ、對于跟蹤目標(biāo)的運(yùn)動建模
該方法需要提前通過先驗(yàn)知識知道所跟蹤的目標(biāo)對象是什么,比如車輛、行人、人臉等。通過對要跟蹤的目標(biāo)進(jìn)行建模,然后再利用該模型來進(jìn)行實(shí)際的跟蹤。該方法必須提前知道要跟蹤的目標(biāo)對象是什么,然后再去跟蹤指定的目標(biāo),這是它的局限性,因而其推廣性相對比較差。(比如已知跟蹤的物體是羽毛球,那很容易通過前幾幀的取點(diǎn),來建立整個羽毛球運(yùn)動的拋物線模型)
2)核心搜索算法(常見的預(yù)測算法有Kalman(卡爾曼)濾波、擴(kuò)展卡爾曼濾波、粒子濾波)
Ⅰ、Kalman 濾波
Kalman濾波器是通過前一狀態(tài)預(yù)測當(dāng)前狀態(tài),并使用當(dāng)前觀測狀態(tài)進(jìn)行校正,從而保證輸出狀態(tài)平穩(wěn)變化,可有效抵抗觀測誤差。因此在運(yùn)動目標(biāo)跟蹤中也被廣泛使用。
在視頻處理的運(yùn)動目標(biāo)跟蹤里,每個目標(biāo)的狀態(tài)可表示為(x,y,w,h),x和y表示目標(biāo)位置,w和h表示目標(biāo)寬高。一般地認(rèn)為目標(biāo)的寬高是不變的,而其運(yùn)動速度是勻速,那么目標(biāo)的狀態(tài)向量就應(yīng)該擴(kuò)展為(x,y,w,h,dx,dy),其中dx和dy是目標(biāo)當(dāng)前時(shí)刻的速度。通過kalman濾波器來估計(jì)每個時(shí)刻目標(biāo)狀態(tài)的大致過程為:
對視頻進(jìn)行運(yùn)動目標(biāo)檢測,通過簡單匹配方法來給出目標(biāo)的第一個和第二個狀態(tài),從第三個狀態(tài)開始,就先使用kalman濾波器預(yù)測出當(dāng)前狀態(tài),再用當(dāng)前幀圖像的檢測結(jié)果作為觀測值輸入給kalman濾波器,得到的校正結(jié)果就被認(rèn)為是目標(biāo)在當(dāng)前幀的真實(shí)狀態(tài)。(其中,Zt為測量值,為預(yù)測值,ut為控制量,Kt為增益。)


Ⅱ、擴(kuò)展卡爾曼濾波(EKF)和無跡卡爾曼濾波(UKF)
由于卡爾曼濾波的假設(shè)為線性問題,無法直接用在非線性問題上,EKF和UKF解決了這個問題(這個線性問題體現(xiàn)在用測量量來計(jì)算預(yù)測量的過程中)。EKF是通過構(gòu)建線性函數(shù)g(x),與非線性函數(shù)相切,并對每一時(shí)刻所求得的g(x)做KF,如下圖所示。

UKF與EKF去求解雅可比矩陣擬合線性方程的方法不同,通過對那個先驗(yàn)分布中的采集點(diǎn),來線性化隨機(jī)變量的非線性函數(shù)。與EKF所用的方法不同,UKF產(chǎn)生的高斯分布和實(shí)際高斯分布更加接近,其引起的近似誤差也更小。
Ⅲ、粒子濾波
1、初始狀態(tài):基于粒子濾波的目標(biāo)追蹤方法是一種生成式跟蹤方法,所以要有一個初始化的階段。對于第一幀圖像,人工標(biāo)定出待檢測的目標(biāo),對該目標(biāo)區(qū)域提出特征;
2、搜索階段:現(xiàn)在已經(jīng)知道了目標(biāo)的特征,然后就在目標(biāo)的周圍撒點(diǎn)(particle), 如:a)均勻的撒點(diǎn);b)按高斯分布撒點(diǎn),就是近的地方撒得多,遠(yuǎn)的地方撒的少。論文里使用的是后一種方法。每一個粒子都計(jì)算所在區(qū)域內(nèi)的顏色直方圖,如初始化提取特征一樣,然后對所有的相似度進(jìn)行歸一化。文中相似性使用的是巴氏距離;
3、重采樣:根據(jù)粒子權(quán)重對粒子進(jìn)行篩選,篩選過程中,既要大量保留權(quán)重大的粒子,又要有一小部分權(quán)重小的粒子;
4、狀態(tài)轉(zhuǎn)移:將重采樣后的粒子帶入狀態(tài)轉(zhuǎn)移方程得到新的預(yù)測粒子;
5、測量及更新:對目標(biāo)點(diǎn)特征化,并計(jì)算各個粒子和目標(biāo)間的巴氏距離,更新粒子的權(quán)重;
6、決策階段:每個粒子都獲得一個和目標(biāo)的相似度,相似度越高,目標(biāo)在該范圍出現(xiàn)的可能性越高,將保留的所有粒子通過相似度加權(quán)后的結(jié)果作為目標(biāo)可能的位置。
3)Meanshift算法
MeanShift算法屬于核密度估計(jì)法,它不需要任何先驗(yàn)知識而完全依靠特征空間中樣本點(diǎn)的計(jì)算其密度函數(shù)值。對于一組采樣數(shù)據(jù),直方圖法通常把數(shù)據(jù)的值域分成若干相等的區(qū)間,數(shù)據(jù)按區(qū)間分成若干組,每組數(shù)據(jù)的個數(shù)與總參數(shù)個數(shù)的比率就是每個單元的概率值;核密度估計(jì)法的原理相似于直方圖法,只是多了一個用于平滑數(shù)據(jù)的核函數(shù)。采用核函數(shù)估計(jì)法,在采樣充分的情況下,能夠漸進(jìn)地收斂于任意的密度函數(shù),即可以對服從任何分布的數(shù)據(jù)進(jìn)行密度估計(jì)。
Meanshift算法步驟
1、通過對初始點(diǎn)(或者上一幀的目標(biāo)點(diǎn))為圓心,繪制一個半徑為R的圓心,尋找特征和該點(diǎn)相似的點(diǎn)所構(gòu)成的向量;
2、所有向量相加,可以獲得一個向量疊加,這個向量指向特征點(diǎn)多的方向;
3、取步驟二的向量終點(diǎn)為初始點(diǎn)重復(fù)步驟一、二,直到得到的向量小于一定的閾值,也就是說明當(dāng)前位置是特征點(diǎn)密度最密集的地方,停止迭代,認(rèn)為該點(diǎn)為當(dāng)前幀的目標(biāo)點(diǎn);

4)Camshift算法
Camshift算法是MeanShift算法的改進(jìn),稱為連續(xù)自適應(yīng)的MeanShift算法。Camshift 是由Meanshift 推導(dǎo)而來 Meanshift主要是用在單張影像上,但是獨(dú)立一張影像分析對追蹤而言并無意義,Camshift 就是利用MeanShift的方法,對影像串列進(jìn)行分析。
1、首先在影像串列中選擇目標(biāo)區(qū)域。
2、計(jì)算此區(qū)域的顏色直方圖(特征提?。?。
3、用MeanShift演算法來收斂欲追蹤的區(qū)域。
4、通過目標(biāo)點(diǎn)的位置和向量信息計(jì)算新的窗口大小,并標(biāo)示之。
5、以此為參數(shù)重復(fù)步驟三、四。
Camshift 關(guān)鍵就在于當(dāng)目標(biāo)的大小發(fā)生改變的時(shí)候,此算法可以自適應(yīng)調(diào)整目標(biāo)區(qū)域繼續(xù)跟蹤。
3、小結(jié)
第一階段的單目標(biāo)追蹤算法基本上都是傳統(tǒng)方法,計(jì)算量小,在嵌入式等設(shè)備中落地較多,opencv中也預(yù)留了大量的接口。通過上面的兩節(jié)的介紹,我們不難發(fā)現(xiàn),目標(biāo)檢測算法的步驟分為兩部分,一部分是對指定目標(biāo)尋找可以跟蹤的特征,常用的有顏色,輪廓,特征點(diǎn),軌跡等,另一部分是對目標(biāo)特征進(jìn)行跟蹤,如上文所提及的方法。所以目標(biāo)檢測方法的發(fā)展,也可總結(jié)為兩個方面,一個是如何去獲得更加具有區(qū)分性的可跟蹤的穩(wěn)定特征,另一個是如何建立幀與幀之間的數(shù)據(jù)關(guān)聯(lián),保證跟蹤目標(biāo)是正確的。
隨著以概率為基礎(chǔ)的卡爾曼濾波、粒子濾波或是以Meanshift為代表向量疊加方法在目標(biāo)檢測的運(yùn)用,使得目標(biāo)檢測不再需要假設(shè)自身的一個狀態(tài)為靜止的,而是可以是運(yùn)動的,更加符合復(fù)雜場景中的目標(biāo)跟蹤。