版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、word靜止背景下的多目標(biāo)追蹤隨著計(jì)算機(jī)技術(shù)以及智能汽車行業(yè)的開(kāi)展,多目標(biāo)的檢測(cè)與追蹤的實(shí)用性與研究?jī)r(jià)值逐漸提高。在計(jì)算機(jī)視覺(jué)的三層結(jié)構(gòu)中,目標(biāo)跟蹤屬于中間層,是其他高層任務(wù),例如動(dòng)作識(shí)別以及行為分析等的根底。其主要應(yīng)用可包括視頻監(jiān)控,檢測(cè)異常行為人機(jī)交互,對(duì)復(fù)雜場(chǎng)景中目標(biāo)交互的識(shí)別與處理,以及虛擬現(xiàn)實(shí)及醫(yī)學(xué)圖像。目標(biāo)跟蹤又包括單目標(biāo)跟蹤和多目標(biāo)跟蹤。單目標(biāo)跟蹤可以通過(guò)目標(biāo)的表觀建模或者運(yùn)動(dòng)建模,以處理光照、形變、遮擋等問(wèn)題,而多目標(biāo)跟蹤問(wèn)題那么更加復(fù)雜,除了單目標(biāo)跟蹤回遇到的問(wèn)題外,還需要目標(biāo)間的關(guān)聯(lián)匹配。另外在多目標(biāo)跟蹤任務(wù)中經(jīng)常會(huì)碰到 目標(biāo)的頻繁遮擋、軌跡開(kāi)始終止時(shí)刻未知、目標(biāo)太小、表觀
2、相似、目標(biāo)間交互、低幀率等等問(wèn)題。 靜止背景下的多目標(biāo)追蹤可分為兩步來(lái)實(shí)現(xiàn),第一步是在視頻文件的每幀中檢測(cè)出移動(dòng)的目標(biāo),第二步是將檢測(cè)到的目標(biāo)與跟蹤軌跡實(shí)時(shí)匹配。在本次實(shí)驗(yàn)中,利用混合高斯模型進(jìn)行背景減除,使用形態(tài)學(xué)操作消除噪聲,通過(guò)卡爾曼濾波預(yù)測(cè)目標(biāo)位置,最后利用匈牙利算法進(jìn)行匹配,實(shí)現(xiàn)靜止背景下的多目標(biāo)追蹤。1 實(shí)驗(yàn)原理1.1 混合高斯模型單高斯模型是利用高維高斯分布概率來(lái)進(jìn)行模式分類:其中用訓(xùn)練樣本均值代替,用樣本方差代替,X為d維的樣本向量。通過(guò)高斯概率公式就可以得出類別C屬于正負(fù)樣本的概率。而混合高斯模型就是數(shù)據(jù)從多個(gè)高斯分布中產(chǎn)生,每個(gè)GMM由k個(gè)單高斯分布線性疊加而成。相當(dāng)于對(duì)各
3、個(gè)高斯分布進(jìn)行加權(quán),權(quán)系數(shù)越大,那么這個(gè)數(shù)據(jù)屬于這個(gè)高斯分布的可能性越大。利用混合高斯模型(GMM)可以進(jìn)行背景減除,將前后景別離,得到移動(dòng)的目標(biāo)。對(duì)每個(gè)像素點(diǎn)建立由k個(gè)單高斯模型線性疊加而成的模型,在這些混合高斯背景模型中,認(rèn)為像素之間的顏色信息互不相關(guān),對(duì)各像素點(diǎn)的處理都是相互獨(dú)立的。單個(gè)像素點(diǎn)在t時(shí)刻服從混合高斯分布概率密度函數(shù):其中k為分布模式總數(shù),為t時(shí)刻第i個(gè)高斯分布,為其均值,為其協(xié)方差矩陣。在獲得新一幀圖像后更新混合高斯模型。用圖像中的每個(gè)像素點(diǎn)與混合高斯模型匹配,如果成功那么判定該點(diǎn)為背景點(diǎn), 否那么為前景點(diǎn)。當(dāng)背景更新完成后,高斯模型與背景相關(guān)程度越大,標(biāo)準(zhǔn)差就越小,權(quán)值越
4、大。按照權(quán)值與標(biāo)準(zhǔn)差的比值從大到小進(jìn)行排序,取前B個(gè)模型作為背景。1.2 卡爾曼濾波卡爾曼濾波是一種利用線性系統(tǒng)狀態(tài)方程,通過(guò)系統(tǒng)輸入輸出觀測(cè)數(shù)據(jù),對(duì)系統(tǒng)狀態(tài)進(jìn)行最優(yōu)估計(jì)的算法。其核心思想是,根據(jù)當(dāng)前的測(cè)量值、上一時(shí)間的預(yù)測(cè)值以及誤差,計(jì)算得到當(dāng)前值,并可以持續(xù)預(yù)測(cè)下一時(shí)間的值。試驗(yàn)中利用卡爾曼濾波計(jì)算并預(yù)測(cè)每個(gè)軌跡在下一幀中的位置,建立幀間軌跡的關(guān)系??柭鼮V波將跟蹤分為5種狀態(tài):新目標(biāo)出現(xiàn)、目標(biāo)匹配、目標(biāo)遮擋、目標(biāo)別離以及目標(biāo)消失。其狀態(tài)方程如下所示:其中x,y,w,h分別表示目標(biāo)外接矩形的橫縱坐標(biāo)以及長(zhǎng)、寬,為不相關(guān)的高斯白噪聲。定義其觀測(cè)方程為。定義好了觀測(cè)方程與狀態(tài)方程之后就可以用卡
5、爾曼濾波器實(shí)現(xiàn)運(yùn)動(dòng)目標(biāo)的跟蹤,步驟如下:1計(jì)算運(yùn)動(dòng)目標(biāo)的特征信息運(yùn)動(dòng)質(zhì)心,以及外接矩形。2用得到的特征信息初始化卡爾曼濾波器。3用卡爾曼濾波器對(duì)下一幀中對(duì)應(yīng)的目標(biāo)區(qū)域進(jìn)行預(yù)測(cè),當(dāng)下一幀到來(lái)時(shí),在預(yù)測(cè)區(qū)域內(nèi)進(jìn)行目標(biāo)匹配。4如果匹配成功,那么更新卡爾曼濾波器。1.3 匈牙利匹配算法匈牙利匹配算法是一種利用增廣路徑求取二分圖最大匹配的算法。匈牙利樹(shù)一般由寬度優(yōu)先搜索BFS構(gòu)成。從一個(gè)未匹配點(diǎn)出發(fā)運(yùn)行 BFS,且必須走交替路,直至不能再擴(kuò)展為止。交替路指的是,從一個(gè)未匹配點(diǎn)出發(fā),依次經(jīng)過(guò)非匹配邊、匹配邊.循環(huán)往復(fù),形成的路徑稱為交替路。示意圖如圖1所示:圖1 匈牙利樹(shù)匹配匈牙利算法的要點(diǎn)如下:1) 從
6、左邊第一個(gè)頂點(diǎn)開(kāi)始,挑選未匹配點(diǎn)進(jìn)行搜索,尋找增廣路。2) 如果經(jīng)過(guò)一個(gè)未匹配點(diǎn),那么尋找成功。更新路徑信息,匹配變數(shù)+1,停止搜索。3) 如果一直沒(méi)有找到增廣路,那么不再?gòu)倪@個(gè)點(diǎn)開(kāi)始搜索。4) 找到增廣路之后需要沿著路徑更新匹配,通過(guò)prev 數(shù)組來(lái)記錄路徑上的點(diǎn)。在實(shí)驗(yàn)中,用匈牙利算法將新一幀圖片中檢測(cè)到的運(yùn)動(dòng)物體匹配到對(duì)應(yīng)的軌跡。匹配的過(guò)程是通過(guò)最小化卡爾曼預(yù)測(cè)得到的質(zhì)心與檢測(cè)到的質(zhì)心之間的歐氏距離之和實(shí)現(xiàn)的。通過(guò)卡爾曼濾波計(jì)算并預(yù)測(cè)每個(gè)軌跡在下一幀中的位置,然后計(jì)算預(yù)測(cè)的軌跡位置和每個(gè)新檢測(cè)到的目標(biāo)之間的歐幾里得距離,將度量結(jié)果作為損失函數(shù)矩陣。損失矩陣的大小為M,N,其中M
7、是軌跡數(shù)目,N是檢測(cè)到的運(yùn)動(dòng)物體數(shù)目。2 實(shí)驗(yàn)內(nèi)容2.1 目標(biāo)檢測(cè)要實(shí)現(xiàn)目標(biāo)檢測(cè),首先利用混合高斯模型區(qū)分前景背景。通過(guò)調(diào)用函數(shù)vision.ForegroundDetector設(shè)置檢測(cè)子為混合高斯模型,其中參數(shù)分別為高斯核數(shù)目、訓(xùn)練背景幀數(shù)以及背景閾值。函數(shù)的返回值為一個(gè)二進(jìn)制掩碼,其中1的像素值對(duì)應(yīng)前景,0的像素值對(duì)應(yīng)背景。在實(shí)驗(yàn)中,選取前150幀圖像作為背景幀,并設(shè)置閾值為0.6,高斯核數(shù)目為3。完成背景減除后,通過(guò)設(shè)置blob分析子來(lái)尋找連通域,函數(shù)設(shè)置的參數(shù)為最小區(qū)域面積,返回值為目標(biāo)面積、質(zhì)心和邊界框。實(shí)驗(yàn)中,設(shè)置最小區(qū)域面積為400,代碼如下所示:obj.detector = v
8、ision.ForegroundDetector('NumGaussians', 3, . 'NumTrainingFrames', 150, 'MinimumBackgroundRatio', 0.6); obj.blobAnalyser = vision.BlobAnalysis('BoundingBoxOutputPort', true,'AreaOutputPort', true, 'CentroidOutputPort', true, 'MinimumBlobArea',
9、400);完成混合高斯混合模型以及blob分析子后,逐幀讀取視頻,為后續(xù)目標(biāo)檢測(cè)以及追蹤的過(guò)程做準(zhǔn)備: frame = obj.reader.step();在檢測(cè)目標(biāo)的過(guò)程中,利用形態(tài)學(xué)運(yùn)算中的開(kāi)運(yùn)算以及閉運(yùn)算可以消除噪聲,使目標(biāo)檢測(cè)更為準(zhǔn)確。開(kāi)運(yùn)算是通過(guò)先腐蝕再膨脹,去除孤立的像素點(diǎn)、總的位置和結(jié)構(gòu)不變。而閉運(yùn)算是先膨脹再腐蝕,彌合小裂縫,而總的位置和形狀不變,通過(guò)填充圖像的凹角來(lái)濾波圖像。其效果如圖2所展示: 圖2.1 原始像素點(diǎn) 圖2.2 開(kāi)運(yùn)算效果圖圖2.3 閉運(yùn)算效果圖圖2 形態(tài)學(xué)運(yùn)算效果圖實(shí)驗(yàn)中,首先使用檢測(cè)子,即混合高斯模型得到前景圖,對(duì)前景圖使用8*8矩形進(jìn)行開(kāi)運(yùn)算,切斷臨近物
10、體間的聯(lián)系。再使用15*15矩形進(jìn)行閉運(yùn)算,消除細(xì)小物體,最后填補(bǔ)物體中間的空洞。濾除噪聲后,使用blob分析得到所有連通域的中心以及邊界框的大小。代碼如下所示: function centroids, bboxes, mask = detectObjects(frame) % Detect foreground. mask = obj.detector.step(frame); % Apply morphological operations to remove noise and fill in holes. mask = imopen(mask, strel('rectangle
11、', 8,8); mask = imclose(mask, strel('rectangle', 15,15); mask = imfill(mask, 'holes'); % Perform blob analysis to find connected components. , centroids, bboxes = obj.blobAnalyser.step(mask); end視頻中對(duì)移動(dòng)目標(biāo)的檢測(cè)結(jié)果如圖3.1,圖3.2所示: 圖3.1 移動(dòng)目標(biāo)檢測(cè)結(jié)果1 圖3.2 移動(dòng)目標(biāo)檢測(cè)結(jié)果22.2 目標(biāo)跟蹤要進(jìn)行目標(biāo)跟蹤,首先需要進(jìn)行軌跡初始化,通
12、過(guò)函數(shù)initializeTracks()來(lái)進(jìn)行初始化,每一個(gè)軌跡代表視頻中一個(gè)移動(dòng)的目標(biāo)。軌跡的結(jié)構(gòu)包含如下信息:1) ID,軌跡編號(hào);2) Bbox,目標(biāo)的邊界框;3) kalmanFilter,用于預(yù)測(cè)目標(biāo)位置的卡爾曼濾波器;4) Age,目標(biāo)被檢測(cè)到的總幀數(shù);5) totalVisibleCount,目標(biāo)可被檢測(cè)到的全部幀數(shù);6) consecutiveInvisibleCount:連續(xù)未檢測(cè)到目標(biāo)的幀數(shù)。代碼如下所示:function tracks = initializeTracks() % create an empty array of tracks tracks = stru
13、ct(. 'id', , . 'bbox', , . 'kalmanFilter', , . 'age', , . 'totalVisibleCount', , . 'consecutiveInvisibleCount', ); end為消除噪聲對(duì)目標(biāo)追蹤的影響,僅在totalVisibleCount超過(guò)閾值時(shí)才顯示目標(biāo)的軌跡。當(dāng)連續(xù)幾幀沒(méi)有檢測(cè)到與跟蹤相關(guān)的信息時(shí),那么假設(shè)該對(duì)象已經(jīng)離開(kāi)了可視圖畫(huà)面。通過(guò)參數(shù)consecutiveinvisiblecount可判斷這種情況,當(dāng)其超過(guò)閾值時(shí),刪除跟蹤
14、軌跡。如果跟蹤時(shí)間較短,并且在大多數(shù)幀中標(biāo)記為不可見(jiàn),那么軌跡也可能作為噪聲被刪除。軌跡初始化完成后,通過(guò)卡爾曼濾波計(jì)算并預(yù)測(cè)每個(gè)軌跡在下一幀的位置,函數(shù)輸出為邊框預(yù)測(cè)中心。然后調(diào)整目標(biāo)邊界框的位置,使其中心到達(dá)預(yù)測(cè)位置,并將結(jié)果作為軌跡的跟蹤矩形框,代碼如下所示: function predictNewLocationsOfTracks() for i = 1:length(tracks) bbox = tracks(i).bbox; % Predict the current location of the track. predictedCentroid = predict(tracks
15、(i).kalmanFilter); %根據(jù)以前的軌跡,預(yù)測(cè)當(dāng)前位置 % Shift the bounding box so that its center is at % the predicted location. predictedCentroid = int32(predictedCentroid) - bbox(3:4) / 2; tracks(i).bbox = predictedCentroid, bbox(3:4); end end完成位置預(yù)測(cè)后,創(chuàng)立損失函數(shù)矩陣,航代表軌跡,列代表檢測(cè)到的目標(biāo)。損失矩陣的大小為M,N,其中M是軌跡數(shù)目,N是檢測(cè)到的運(yùn)動(dòng)物體數(shù)目。對(duì)每個(gè)軌跡計(jì)
16、算其卡爾曼濾波預(yù)測(cè)的軌跡位置和每個(gè)新檢測(cè)到的目標(biāo)之間的歐幾里得距離,將度量結(jié)果作為損失函數(shù)矩陣。function assignments, unassignedTracks, unassignedDetections = . detectionToTrackAssignment() nTracks = length(tracks); nDetections = size(centroids, 1); % Compute the cost of assigning each detection to each track. cost = zeros(nTracks, nDetections);
17、for i = 1:nTracks cost(i, :) = distance(tracks(i).kalmanFilter, centroids); end通過(guò)函數(shù)assignDetectionsToTracks(cost, costOfNonAssignment)利用匈牙利匹配算法將新一幀圖片中檢測(cè)到的運(yùn)動(dòng)物體匹配到對(duì)應(yīng)的軌跡。其中輸入的參數(shù)為損失矩陣以及閾值,低于閾值時(shí),取消匹配。返回值為匹配的結(jié)果以及未匹配成功的軌跡以及目標(biāo)。完成匹配后,對(duì)已分配的軌跡,將其更新至當(dāng)前幀目標(biāo)所在位置,對(duì)未分配的軌跡,增加其連續(xù)不可見(jiàn)幀數(shù)。設(shè)置兩個(gè)閾值,invisibleForLong代表當(dāng)連續(xù)不可見(jiàn)幀數(shù)
18、大于它時(shí),刪除軌跡;ageThreshold代表當(dāng)總出現(xiàn)幀數(shù)小于它時(shí),當(dāng)該參數(shù)與總可見(jiàn)幀數(shù)的比值小于0.6時(shí),刪除軌跡。目標(biāo)檢測(cè)與軌跡跟蹤的操作循環(huán)進(jìn)行,直至視頻結(jié)束,顯示最終跟蹤結(jié)果。2.3 總結(jié)實(shí)驗(yàn)程序可分解為11個(gè)局部,創(chuàng)立系統(tǒng)對(duì)象、初始化軌跡、讀取視頻幀、檢測(cè)目標(biāo)、預(yù)測(cè)已跟蹤軌跡的新位置、分配新檢測(cè)目標(biāo)給軌跡、更新已分配的軌跡、更新未分配的軌跡、刪除喪失的軌跡、創(chuàng)立新軌跡以及顯示跟蹤結(jié)果。其中創(chuàng)立系統(tǒng)對(duì)象包含創(chuàng)立視頻對(duì)象,設(shè)置檢測(cè)子為高斯混合模型以及設(shè)置blob分析子。在預(yù)測(cè)已跟蹤軌跡的新位置時(shí),使用卡爾曼濾波器進(jìn)行預(yù)測(cè),并調(diào)整位置,顯示預(yù)測(cè)結(jié)果矩形框。在更新已分配的軌跡局部中,根據(jù)軌
19、跡對(duì)應(yīng)的檢測(cè)目標(biāo)位置中心修正其卡爾曼濾波器,并修正軌跡存在幀數(shù)、目標(biāo)檢測(cè)到的總幀數(shù)以及連續(xù)未檢測(cè)到目標(biāo)的幀數(shù)。在刪除喪失軌跡中,刪除連續(xù)不可見(jiàn)幀數(shù)大于閾值或當(dāng)軌跡存在幀數(shù)小于10時(shí),根據(jù)總可見(jiàn)幀數(shù)與軌跡存在幀數(shù)的比值丟棄軌跡。主函數(shù)代碼如下:obj = setupSystemObjects(); %創(chuàng)立系統(tǒng)對(duì)象tracks = initializeTracks(); % 初始化軌跡nextId = 1; % ID of the next track% Detect moving objects, and track them across video frames.while isDone(o
20、bj.reader) frame = readFrame(); %讀取一幀 centroids, bboxes, mask = detectObjects(frame); predictNewLocationsOfTracks(); assignments, unassignedTracks, unassignedDetections = . detectionToTrackAssignment(); updateAssignedTracks(); updateUnassignedTracks(); deleteLostTracks(); createNewTracks(); displayT
21、rackingResults();end可見(jiàn)完成創(chuàng)立系統(tǒng)對(duì)象以及初始化軌跡后,循環(huán)剩余9個(gè)步驟,直至處理完整個(gè)視頻。3 實(shí)驗(yàn)結(jié)果分析在本次試驗(yàn)中,通過(guò)混合高斯模型背景減除,形態(tài)學(xué)操作消除噪聲,利用卡爾曼濾波預(yù)測(cè)每個(gè)軌跡在下一幀中的位置,最后通過(guò)匈牙利匹配算法完成目標(biāo)與軌跡之間的匹配。實(shí)現(xiàn)了在靜止背景下的多目標(biāo)檢測(cè)與跟蹤。如圖4所示可見(jiàn),對(duì)于勻速移動(dòng)的目標(biāo),檢測(cè)效果較好,可以實(shí)現(xiàn)較好的目標(biāo)檢測(cè)與跟蹤。 圖4 勻速移動(dòng)目標(biāo)檢測(cè)結(jié)果但靜止背景下,基于動(dòng)態(tài)的多目標(biāo)追蹤,很容易受到環(huán)境的影響。當(dāng)檢測(cè)目標(biāo)為行人時(shí),風(fēng)吹動(dòng)樹(shù)葉或是有車輛經(jīng)過(guò),甚至是光照導(dǎo)致的影子變化都會(huì)很大程度地影響跟蹤效果。圖5展示了明顯
22、的失敗樣例:圖5 目標(biāo)追蹤失敗樣例在實(shí)驗(yàn)中使用的卡爾曼濾波預(yù)測(cè)目標(biāo)下一幀所在位置的模型,只適用于勻速變化,而汽車存在加速運(yùn)動(dòng)。從右邊的二值圖像可以看出,汽車的車燈造成像素點(diǎn)大量變化,只使用幀間相減以及形態(tài)學(xué)操作來(lái)得到檢測(cè)目標(biāo)的本實(shí)驗(yàn)并不適用于此。造成了較大的誤差,導(dǎo)致檢測(cè)以及跟蹤目標(biāo)失敗。要躲避由前景中不同物體造成的實(shí)驗(yàn)誤差,可使用其他方法在前景檢測(cè)中對(duì)檢測(cè)到的物體進(jìn)行分類。通過(guò)屢次試驗(yàn)發(fā)現(xiàn),程序參數(shù)的魯棒性較差,在進(jìn)行形態(tài)學(xué)計(jì)算時(shí),不同的視頻調(diào)整開(kāi)運(yùn)算以及閉運(yùn)算的結(jié)構(gòu)元素,目標(biāo)檢測(cè)的效果差異很大。在后續(xù)的學(xué)習(xí)過(guò)程中可以繼續(xù)對(duì)本次實(shí)驗(yàn)進(jìn)行更新修正,得到更好的實(shí)驗(yàn)效果。.word附錄functi
23、on objectracking()obj = setupSystemObjects(); %初始化tracks = initializeTracks(); % 初始化軌跡nextId = 1; % ID of the next track% Detect moving objects, and track them across video frames.while isDone(obj.reader) frame = readFrame(); %讀取一幀 centroids, bboxes, mask = detectObjects(frame); predictNewLocationsO
24、fTracks(); assignments, unassignedTracks, unassignedDetections = . detectionToTrackAssignment(); updateAssignedTracks(); updateUnassignedTracks(); deleteLostTracks(); createNewTracks(); displayTrackingResults();end function obj = setupSystemObjects() obj.reader = vision.VideoFileReader('test.mp4
25、'); obj.maskPlayer = vision.VideoPlayer('Position', 740, 400, 700, 400); obj.videoPlayer = vision.VideoPlayer('Position', 20, 400, 700, 400);%創(chuàng)立視頻播放對(duì)象 obj.detector = vision.ForegroundDetector('NumGaussians', 3, . 'NumTrainingFrames', 150, 'MinimumBackgroundRat
26、io', 0.6); %GMM前景檢測(cè),高斯核數(shù)目3,前150幀為背景幀,閾值為0.6,返回值為背景 obj.blobAnalyser = vision.BlobAnalysis('BoundingBoxOutputPort', true, . 'AreaOutputPort', true, 'CentroidOutputPort', true, . 'MinimumBlobArea', 400);%返回值為目標(biāo)面積、質(zhì)心和邊界框 end function tracks = initializeTracks() % cre
27、ate an empty array of tracks tracks = struct(. 'id', , . 'bbox', , . 'kalmanFilter', , . 'age', , . 'totalVisibleCount', , . 'consecutiveInvisibleCount', ); end function frame = readFrame() frame = obj.reader.step(); end function centroids, bboxes, mas
28、k = detectObjects(frame) % Detect foreground. mask = obj.detector.step(frame); % Apply morphological operations to remove noise and fill in holes. mask = imopen(mask, strel('rectangle', 8,8); mask = imclose(mask, strel('rectangle', 15,15); mask = imfill(mask, 'holes'); % Perf
29、orm blob analysis to find connected components. , centroids, bboxes = obj.blobAnalyser.step(mask); end function predictNewLocationsOfTracks() for i = 1:length(tracks) bbox = tracks(i).bbox; % Predict the current location of the track. predictedCentroid = predict(tracks(i).kalmanFilter); %根據(jù)以前的軌跡,預(yù)測(cè)當(dāng)
30、前位置 % Shift the bounding box so that its center is at % the predicted location. predictedCentroid = int32(predictedCentroid) - bbox(3:4) / 2; tracks(i).bbox = predictedCentroid, bbox(3:4); end end function assignments, unassignedTracks, unassignedDetections = . detectionToTrackAssignment() nTracks =
31、 length(tracks); nDetections = size(centroids, 1); % Compute the cost of assigning each detection to each track. cost = zeros(nTracks, nDetections); for i = 1:nTracks cost(i, :) = distance(tracks(i).kalmanFilter, centroids); end % Solve the assignment problem. costOfNonAssignment = 20; assignments,
32、unassignedTracks, unassignedDetections = . assignDetectionsToTracks(cost, costOfNonAssignment); end function updateAssignedTracks() numAssignedTracks = size(assignments, 1); for i = 1:numAssignedTracks trackIdx = assignments(i, 1); detectionIdx = assignments(i, 2); centroid = centroids(detectionIdx,
33、 :); bbox = bboxes(detectionIdx, :); correct(tracks(trackIdx).kalmanFilter, centroid); tracks(trackIdx).bbox = bbox; tracks(trackIdx).age = tracks(trackIdx).age + 1; tracks(trackIdx).totalVisibleCount = . tracks(trackIdx).totalVisibleCount + 1; tracks(trackIdx).consecutiveInvisibleCount = 0; end end
34、 function updateUnassignedTracks() for i = 1:length(unassignedTracks) ind = unassignedTracks(i); tracks(ind).age = tracks(ind).age + 1; tracks(ind).consecutiveInvisibleCount = . tracks(ind).consecutiveInvisibleCount + 1; end end % Delete Lost Tracksfunction deleteLostTracks() if isempty(tracks) retu
35、rn; end invisibleForTooLong = 20; ageThreshold = 10; ages = tracks(:).age; totalVisibleCounts = tracks(:).totalVisibleCount; visibility = totalVisibleCounts ./ ages; lostInds = (ages < ageThreshold & visibility < 0.6) | . tracks(:).consecutiveInvisibleCount >= invisibleForTooLong; tracks = tracks(lostInds); endfunction createNewTracks() centroids = centroids(unassignedDetections, :); bboxes = bboxes(unassignedDetections, :); for i = 1:size(centroids, 1) centroid = centroids(i,:); bbox = bboxes
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 體操表演解說(shuō)詞(共5篇)
- 學(xué)度第一學(xué)期高三級(jí)化學(xué)科期末考試試卷
- 《田口實(shí)驗(yàn)方法》課件
- 《襯衫的結(jié)構(gòu)知識(shí)》課件
- 2025年中考語(yǔ)文文言文總復(fù)習(xí)-學(xué)生版-專題03:文言文閱讀之翻譯句子(練習(xí))
- 食品原料運(yùn)輸服務(wù)合同三篇
- 電子商務(wù)行業(yè)推廣成效總結(jié)
- 鐵礦石加工廠建設(shè)工程合同三篇
- 咨詢行業(yè)中HR顧問(wèn)的工作概述
- 建筑工程行業(yè)話務(wù)員工作總結(jié)
- 二年級(jí)數(shù)學(xué)看錯(cuò)數(shù)字問(wèn)題專項(xiàng)練習(xí)
- 北京市通州區(qū)2023-2024學(xué)年高三上學(xué)期期末考試政治試題 含解析
- 2024年1月國(guó)家開(kāi)放大學(xué)??啤斗ɡ韺W(xué)》期末紙質(zhì)考試試題及答案
- 手機(jī)短視頻拍攝與剪輯(微課版) 課件 第7章 視頻攝像
- 反訴狀(業(yè)主反訴物業(yè))(供參考)
- GH/T 1451-2024調(diào)配蜂蜜水
- 送溫暖活動(dòng)困難職工幫扶申請(qǐng)表
- 小學(xué)六年級(jí)英語(yǔ)教學(xué)小助手的培養(yǎng)研究
- 2024年人教版初二物理上冊(cè)期末考試卷(附答案)
- 山東省臨沂市河?xùn)|區(qū)2023-2024學(xué)年五年級(jí)下學(xué)期期末綜合(道德與法治+科學(xué))檢測(cè)試題
- 廣安市岳池縣2022-2023學(xué)年七年級(jí)上學(xué)期期末道德與法治試題
評(píng)論
0/150
提交評(píng)論