靜止背景下的多目標追蹤附matlab程序_第1頁
靜止背景下的多目標追蹤附matlab程序_第2頁
靜止背景下的多目標追蹤附matlab程序_第3頁
靜止背景下的多目標追蹤附matlab程序_第4頁
靜止背景下的多目標追蹤附matlab程序_第5頁
免費預覽已結束,剩余7頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、靜止背景下的多目標追蹤隨著計算機技術以及智能汽車行業(yè)的發(fā)展,多目標的檢測與追蹤的實用性與研究價值逐漸提高。在計算機視覺的三層結構中,目標跟蹤屬于中間層,是其他高層任務,例如動作識別以及行為分析等的基礎。其主要應用可包括視頻監(jiān)控,檢測異常行為人機交互,對復雜場景中目標交互的識別與處理,以及虛擬現(xiàn)實及醫(yī)學圖像。目標跟蹤又包括單目標跟蹤和多目標跟蹤。單目標跟蹤可以通過目標的表觀建?;蛘哌\動建模,以處理光照、形變、遮擋等問題,而多目標跟蹤問題則更加復雜,除了單目標跟蹤回遇到的問題外,還需要目標間的關聯(lián)匹配。另外在多目標跟蹤任務中經常會碰到目標的頻繁遮擋、軌跡開始終止時刻未知、目標太小、表觀相似、目標間

2、交互、低幀率等等問題。靜止背景下的多目標追蹤可分為兩步來實現(xiàn),第一步是在視頻文件的每幀中檢測出移動的目標,第二步是將檢測到的目標與跟蹤軌跡實時匹配。在本次實驗中,利用混合高斯模型進行背景減除,使用形態(tài)學操作消除噪聲,通過卡爾曼濾波預測目標位置,最后利用匈牙利算法進行匹配,實現(xiàn)靜止背景下的多目標追蹤。1實驗原理1.1 混合高斯模型單高斯模型是利用高維高斯分布概率來進行模式分類:X11TlN(-)=exp-二(X-)-(x-)C,2二卜二|2其中N用訓練樣本均值代替,仃用樣本方差代替,X為d維的樣本向量。通過高斯概率公式就可以得出類別C屬于正(負)樣本的概率。而混合高斯模型就是數(shù)據從多個高斯分布中

3、產生,每個GMM由k個單高斯分布線性疊加而成。相當于對各個高斯分布進行加權,權系數(shù)越大,那么這個數(shù)據屬于這個高斯分布的可能性越大。P(x)=pp(k)*p(x|k)利用混合高斯模型(GMM)可以進行背景減除,將前后景分離,得到移動的目標。對每個像素點建立由k個單高斯模型線性疊加而成的模型,在這些混合高斯背景模型中,認為像素之間的顏色信息互不相關,對各像素點的處理都是相互獨立的。單個像素點在t時刻服從混合高斯分布概率密度函數(shù):kp(xt)='w,t(xi,t,i,t)i=1其中k為分布模式總數(shù),”xtli,t,%)為t時刻第i個高斯分布,"t為其均值,!為其協(xié)方差矩陣。在獲得新

4、一幀圖像后更新混合高斯模型。用圖像中的每個像素點與混合高斯模型匹配,如果成功則判定該點為背景點,否則為前景點。當背景更新完成后,高斯模型與背景相關程度越大,標準差就越小,權值越大。按照權值與標準差的比值從大到小進行排序,取前B個模型作為背景。/ZbB=argminZwk>T【<k力1.2 卡爾曼濾波卡爾曼濾波是一種利用線性系統(tǒng)狀態(tài)方程,通過系統(tǒng)輸入輸出觀測數(shù)據,對系統(tǒng)狀態(tài)進行最優(yōu)估計的算法。其核心思想是,根據當前的測量值、上一時間的預測值以及誤差,計算得到當前值,并可以持續(xù)預測下一時間的值。試驗中利用卡爾曼濾波計算并預測每個軌跡在下一幀中的位置,建立幀問軌跡的關系??柭鼮V波將跟蹤

5、分為5種狀態(tài):新目標出現(xiàn)、目標匹配、目標遮擋、目標分離以及目標消失。其狀態(tài)方程如下所示:X(k1)-A(k1,k)X(k)c(k)X(k)=x(k),y(k),w(k),h(k),v(k)其中x,y,w,h分別表示目標外接矩形的橫縱坐標以及長、寬,c(k),v(k)為不相關的高斯白噪聲。定義其觀測方程為Z(k)=H(k)X(k)+v(k)o定義好了觀測方程與狀態(tài)方程之后就可以用卡爾曼濾波器實現(xiàn)運動目標的跟蹤,步驟如下:1)計算運動目標的特征信息(運動質心,以及外接矩形)。2)用得到的特征信息初始化卡爾曼濾波器。3)用卡爾曼濾波器對下一幀中對應的目標區(qū)域進行預測,當下一幀到來時,在預測區(qū)域內進行

6、目標匹配。4)如果匹配成功,則更新卡爾曼濾波器。1.3 匈牙利匹配算法匈牙利匹配算法是一種利用增廣路徑求取二分圖最大匹配的算法。匈牙利樹一般由寬度優(yōu)先搜索(BFS構成。從一個未匹配點出發(fā)運行BFS且必須走交替路,直至不能再擴展為止。交替路指的是,從一個未匹配點出發(fā),依次經過非匹配邊、匹配邊循環(huán)往復,形成的路徑稱為交替路。示意圖如圖1所示:圖1匈牙利樹匹配匈牙利算法的要點如下:1)從左邊第一個頂點開始,挑選未匹配點進行搜索,尋找增廣路。2)如果經過一個未匹配點,則尋找成功。更新路徑信息,匹配變數(shù)+1,停止搜索。3)如果一直沒有找到增廣路,則不再從這個點開始搜索。4)找到增廣路之后需要沿著路徑更新

7、匹配,通過prev數(shù)組來記錄路徑上的點。在實驗中,用匈牙利算法將新一幀圖片中檢測到的運動物體匹配到對應的軌跡。匹配的過程是通過最小化卡爾曼預測得到的質心與檢測到的質心之間的歐氏距離之和實現(xiàn)的。通過卡爾曼濾波計算并預測每個軌跡在下一幀中的位置,然后計算預測的軌跡位置和每個新檢測到的目標之間的歐幾里得距離,將度量結果作為損失函數(shù)矩陣。損失矩陣的大小為(M,N),其中M是軌跡數(shù)目,N是檢測到的運動物體數(shù)目。2實驗內容2.1 目標檢測要實現(xiàn)目標檢測,首先利用混合高斯模型區(qū)分前景背景。通過調用函數(shù)vision.ForegroundDetector設置檢測子為混合高斯模型,其中參數(shù)分別為高斯核數(shù)目、訓練背

8、景幀數(shù)以及背景閾值。函數(shù)的返回值為一個二進制掩碼,其中1的像素值對應前景,0的像素值對應背景。在實驗中,選取前150幀圖像作為背景幀,并設置閾值為0.6,高斯核數(shù)目為3。完成背景減除后,通過設置blob分析子來尋找連通域,函數(shù)設置的參數(shù)為最小區(qū)域面積,返回值為目標面積、質心和邊界框。實驗中,設置最小區(qū)域面積為400,代碼如下所示:obj.detector=vision.ForegroundDetector('NumGaussians',3,.'NumTrainingFrames',150,'MinimumBackgroundRatio',0.6)

9、;obj.blobAnalyser=vision.BlobAnalysis('BoundingBoxOutputPort',true,'AreaOutputPort',true,'CentroidOutputPort',true,'MinimumBlobArea',400);完成混合高斯混合模型以及blob分析子后,逐幀讀取視頻,為后續(xù)目標檢測以及追蹤的過程做準備:frame=obj.reader.step();在檢測目標的過程中,利用形態(tài)學運算中的開運算以及閉運算可以消除噪聲,使目標檢測更為準確。開運算是通過先腐蝕再膨脹,去除孤

10、立的像素點、總的位置和結構不變。而閉運算是先膨脹再腐蝕,彌合小裂縫,而總的位置和形狀不變,通過填充圖像的凹角來濾波圖像。其效果如圖2所展示:實驗中,首先使用檢測子,即混合高斯模型得到前景圖,對前景圖使用8*8矩形進行開運算,切斷臨近物體間的聯(lián)系。再使用15*15矩形進行閉運算,消除細小物體,最后填補物體中間的空洞。濾除噪聲后,使用blob分析得到所有連通域的中心以及邊界框的大小。代碼如下所示:functioncentroids,bboxes,mask=detectObjects(frame)%Detectforeground.mask=obj.detector.step(frame);tore

11、movenoiseandf川inholes.%Applymorphologicaloperationsmask=imopen(mask,strel(mask=imclose(mask,strel(mask=imfill(mask,'rectangle',8,8);'rectangle',15,15);holes');%Performblobanalysistofindconnectedcomponents.,centroids,bboxes=obj.blobAnalyser.step(mask);end視頻中對移動目標的檢測結果如圖3.1,圖3.2所示:

12、圖3.1移動目標檢測結果1圖3.2移動目標檢測結果22.2 目標跟蹤要進行目標跟蹤,首先需要進行軌跡初始化,通過函數(shù)iMtializeTracks(冰進行初始化,每一個軌跡代表視頻中一個移動的目標。軌跡的結構包含如下信息:1) ID,軌跡編號;2) Bbox,目標的邊界框;3) kalmanFilter,用于預測目標位置的卡爾曼濾波器;4) Age,目標被檢測到的總幀數(shù);5) totalVisibleCount,目標可被檢測到的全部幀數(shù);6) consecutiveInvisibleCount:連續(xù)未檢測到目標的幀數(shù)。代碼如下所示:functiontracks=initializeTracks

13、()%createanemptyarrayoftrackstracks=struct(.'id',.'bbox',.'kalmanFilter',.'age',.'totalVisibleCount',.'consecutiveInvisibleCount',);end為消除噪聲對目標追蹤的影響,僅在totalVisibleCount超過閾值時才顯示目標的軌跡。當連續(xù)幾幀沒有檢測到與跟蹤相關的信息時,則假設該對象已經離開了可視圖畫面。通過參數(shù)consecutiveinvisiblecount可判斷這

14、種情況,當其超過閾值時,刪除跟蹤軌跡。如果跟蹤時間較短,并且在大多數(shù)幀中標記為不可見,那么軌跡也可能作為噪聲被刪除。軌跡初始化完成后,通過卡爾曼濾波計算并預測每個軌跡在下一幀的位置,函數(shù)輸出為邊框預測中心。然后調整目標邊界框的位置,使其中心到達預測位置,并將結果作為軌跡的跟蹤矩形框,代碼如下所示:functionpredictNewLocationsOfTracks()fori=1:length(tracks)bbox=tracks(i).bbox;%Predictthecurrentlocationofthetrack.predictedCentroid=predict(tracks(i).

15、kalmanFilter);%艮據以前的軌跡,預測當前位置%Shifttheboundingboxsothatitscenterisat%thepredictedlocation.predictedCentroid=int32(predictedCentroid)-bbox(3:4)/2;tracks(i).bbox=predictedCentroid,bbox(3:4);endend完成位置預測后,創(chuàng)建損失函數(shù)矩陣,航代表軌跡,列代表檢測到的目標。損失矩陣的大小為(M,N),其中M是軌跡數(shù)目,N是檢測到的運動物體數(shù)目。對每個軌跡計算其卡爾曼濾波預測的軌跡位置和每個新檢測到的目標之間的歐幾里得

16、距離,將度量結果作為損失函數(shù)矩陣。functionassignments,unassignedTracks,unassignedDetections=.detectionToTrackAssignment()nTracks=length(tracks);nDetections=size(centroids,1);%Computethecostofassigningeachdetectiontoeachtrack.cost=zeros(nTracks,nDetections);fori=1:nTrackscost(i,:)=distance(tracks(i).kalmanFilter,cent

17、roids);end通過函數(shù)assignDetectionsToTracks(cost,costOfNonAssignment)用匈牙利J匹配算法將新一幀圖片中檢測到的運動物體匹配到對應的軌跡。其中輸入的參數(shù)為損失矩陣以及閾值,低于閾值時,取消匹配。返回值為匹配的結果以及未匹配成功的軌跡以及目標。完成匹配后,對已分配的軌跡,將其更新至當前幀目標所在位置,對未分配的軌跡,增加其連續(xù)不可見幀數(shù)。設置兩個閾值,invisibleForLong代表當連續(xù)不可見幀數(shù)大于它時,刪除軌跡;ageThreshold代表當總出現(xiàn)幀數(shù)小于它時,當該參數(shù)與總可見幀數(shù)的比值小于0.6時,刪除軌跡。目標檢測與軌跡跟蹤的

18、操作循環(huán)進行,直至視頻結束,顯示最終跟蹤結果。2.3總結實驗程序可分解為11個部分,創(chuàng)建系統(tǒng)對象、初始化軌跡、讀取視頻幀、檢測目標、預測已跟蹤軌跡的新位置、分配新檢測目標給軌跡、更新已分配的軌跡、更新未分配的軌跡、刪除丟失的軌跡、創(chuàng)建新軌跡以及顯示跟蹤結果。其中創(chuàng)建系統(tǒng)對象包含創(chuàng)建視頻對象,設置檢測子為高斯混合模型以及設置blob分析子。在預測已跟蹤軌跡的新位置時,使用卡爾曼濾波器進行預測,并調整位置,顯示預測結果矩形框。在更新已分配的軌跡部分中,根據軌跡對應的檢測目標位置中心修正其卡爾曼濾波器,并修正軌跡存在幀數(shù)、目標檢測到的總幀數(shù)以及連續(xù)未檢測到目標的幀數(shù)。在刪除丟失軌跡中,刪除連續(xù)不可見

19、幀數(shù)大于閾值或當軌跡存在幀數(shù)小于10時,根據總可見幀數(shù)與軌跡存在幀數(shù)的比值丟棄軌跡。主函數(shù)代碼如下:obj=setupSystemObjects();唳1J建系統(tǒng)對象tracks=initializeTracks();%初始化軌跡nextId=1;%IDofthenexttrack%Detectmovingobjects,andtrackthemacrossvideoframes.whileisDone(obj.reader)frame=readFrame();%取一幀centroids,bboxes,mask=detectObjects(frame);predictNewLocationsO

20、fTracks();assignments,unassignedTracks,unassignedDetections=.detectionToTrackAssignment();updateAssignedTracks();updateUnassignedTracks();deleteLostTracks();createNewTracks();displayTrackingResults();end可見完成創(chuàng)建系統(tǒng)對象以及初始化軌跡后,循環(huán)剩余9個步驟,直至處理完整個視頻。3實驗結果分析在本次試驗中,通過混合高斯模型背景減除,形態(tài)學操作消除噪聲,利用卡爾曼濾波預測每個軌跡在下一幀中的位置,

21、最后通過匈牙利匹配算法完成目標與軌跡之間的匹配。實現(xiàn)了在靜止背景下的多目標檢測與跟蹤。如圖4所示可見,對于勻速移動的目標,檢測效果較好,可以實現(xiàn)較好的目標檢測與跟蹤。圖4勻速移動目標檢測結果但靜止背景下,基于動態(tài)的多目標追蹤,很容易受到環(huán)境的影響。當檢測目標為行人時,風吹動樹葉或是有車輛經過,甚至是光照導致的影子變化都會很大程度地影響跟蹤效果。圖5展示了明顯的失敗樣例:圖5目標追蹤失敗樣例在實驗中使用的卡爾曼濾波預測目標下一幀所在位置的模型,只適用于勻速變化,而汽車存在加速運動。從右邊的二值圖像可以看出,汽車的車燈造成像素點大量變化,只使用幀間相減以及形態(tài)學操作來得到檢測目標的本實驗并不適用于

22、此。造成了較大的誤差,導致檢測以及跟蹤目標失敗。要規(guī)避由前景中不同物體造成的實驗誤差,可使用其他方法在前景檢測中對檢測到的物體進行分類。通過多次試驗發(fā)現(xiàn),程序參數(shù)的魯棒性較差,在進行形態(tài)學計算時,不同的視頻調整開運算以及閉運算的結構元素,目標檢測的效果差異很大。在后續(xù)的學習過程中可以繼續(xù)對本次實驗進行更新修正,得到更好的實驗效果。附錄functionobjectracking()obj=setupSystemObjects();%U始化tracks=initializeTracks();%初始化軌跡nextId=1;%IDofthenexttrack%Detectmovingobjects,a

23、ndtrackthemacrossvideoframes.whileisDone(obj.reader)frame=readFrame();%取一幀centroids,bboxes,mask=detectObjects(frame);predictNewLocationsOfTracks();assignments,unassignedTracks,unassignedDetections=detectionToTrackAssignment();updateAssignedTracks();updateUnassignedTracks();deleteLostTracks();createN

24、ewTracks();displayTrackingResults();endfunctionobj=setupSystemObjects()obj.reader=vision.VideoFileReader(obj.maskPlayer=vision.VideoPlayer(obj.videoPlayer=vision.VideoPlayer(創(chuàng)建視頻播放對象obj.detector=vision.ForegroundDetector('NumTrainingFrames',150,'test.mp4');'Position',740,400,

25、700,400)'Position',20,400,700,400)'NumGaussians',3,.'MinimumBackgroundRatio',0.6);%GMMttT景檢測,高斯核數(shù)目3,前150幀為背景幀,閾值為0.6,返回值為背景obj.blobAnalyser=vision.BlobAnalysis(true,.'AreaOutputPort',true,'MinimumBlobArea',400);end'BoundingBoxOutputPort''CentroidOu

26、tputPort',true,.%返回值為目標面積、質心和邊界框functiontracks=initializeTracks()%createanemptyarrayoftrackstracks=struct(.'id',),.'bbox',.'kalmanFilter',.'age',.'totalVisibleCount',);'consecutiveInvisibleCount'functionframe=readFrame()frame=obj.reader.step();endf

27、unctioncentroids,bboxes,mask=detectObjects(frame)%Detectforeground.mask=obj.detector.step(frame);%Applymorphologicaloperationstoremovenoiseandfillinholes.mask=imopen(mask,strel('rectangle',8,8);mask=imclose(mask,strel('rectangle',15,15);mask=imfill(mask,'holes');%Performbloba

28、nalysistofindconnectedcomponents.,centroids,bboxes=obj.blobAnalyser.step(mask);endfunctionpredictNewLocationsOfTracks()fori=1:length(tracks)bbox=tracks(i).bbox;%Predictthecurrentlocationofthetrack.predictedCentroid=predict(tracks(i).kalmanFilter);%艮據以前的軌跡,預測當前位置%Shifttheboundingboxsothatitscenterisa

29、t%thepredictedlocation.predictedCentroid=int32(predictedCentroid)-bbox(3:4)/2;tracks(i).bbox=predictedCentroid,bbox(3:4);endendfunctionassignments,unassignedTracks,unassignedDetections=detectionToTrackAssignment()nTracks=length(tracks);nDetections=size(centroids,1);%Computethecostofassigningeachdete

30、ctiontoeachtrack.cost=zeros(nTracks,nDetections);fori=1:nTrackscost(i,:)=distance(tracks(i).kalmanFilter,centroids);end%Solvetheassignmentproblem.costOfNonAssignment=20;assignments,unassignedTracks,unassignedDetections=assignDetectionsToTracks(cost,costOfNonAssignment);endfunctionupdateAssignedTrack

31、s()numAssignedTracks=size(assignments,1);fori=1:numAssignedTrackstrackIdx=assignments(i,1);detectionIdx=assignments(i,2);centroid=centroids(detectionIdx,:);bbox=bboxes(detectionIdx,:);correct(tracks(trackIdx).kalmanFilter,centroid);tracks(trackIdx).bbox=bbox;tracks(trackIdx).age=tracks(trackIdx).age

32、+1;tracks(trackIdx).totalVisibleCount=tracks(trackIdx).totalVisibleCount+1;tracks(trackIdx).consecutiveInvisibleCount=0;endendfunctionupdateUnassignedTracks()fori=1:length(unassignedTracks)ind=unassignedTracks(i);tracks(ind).age=tracks(ind).age+1;tracks(ind).consecutiveInvisibleCount=tracks(ind).con

33、secutiveInvisibleCount+1;endend%DeleteLostTracksfunctiondeleteLostTracks()ifisempty(tracks)return;endinvisibleForTooLong=20;ageThreshold=10;ages=tracks(:).age;totalVisibleCounts=tracks(:).totalVisibleCount;visibility=totalVisibleCounts./ages;lostInds=(ages<ageThreshold&visibility<0.6)|tracks(:).consecutiveInvisibleCount>=invisibleForTooLong;tracks=tracks(lostInds);endfunctioncreateNewTracks()centroids=centroids(unassignedDetections,:);bboxes=bboxes(unassignedD

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論