1. 程式人生 > >Matlab多目標跟蹤示例(一):Motion-Based Multiple Object Tracking

Matlab多目標跟蹤示例(一):Motion-Based Multiple Object Tracking

簡單來說,基於動態的多目標跟蹤主要分為兩步:

①在每幀中檢測出移動的目標

②將檢測到的目標與之前正在跟蹤的同一個目標關聯起來

第①步又分為:

a)使用混合高斯模型做背景減法,得到移動的目標。(前後景分離)

b)通過形態學操作消除前景掩膜中的噪聲。

c)通過blob分析檢測連通域,得到對應的移動目標。

在第②步開始前先解釋下下列名詞:

unassigned detection:當前幀中,新檢測到的目標與所有正在跟蹤的目標(軌跡)都不能匹配

assigned detection:當前幀中,新檢測到的目標能匹配到軌跡

unassigned tracking:當前幀中,匹配不到新檢測到的目標的軌跡

assigned tracking:當前幀中,能匹配到新檢測到的目標的軌跡


第②步又分為:
d)利用卡爾曼濾波計算並預測每個軌跡在下一幀中的位置,然後計算預測的軌跡位置和每個新檢測到的目標之間的歐幾里得距離,將度量結果作為損失函式矩陣,再使用匈牙利匹配演算法根據閾值計算得到assigned/unassigned tracking/detection。

e)更新tracking和detection,將assigned tracking更新至當前幀assigned detection的位置,將達到閾值的unassigned tracking刪除(連續消失多幀),將unassigned detection新增到軌跡中。

至此,基於動態的多目標跟蹤介紹完畢。而在整個過程中存在許多閾值設定問題,其中許多都是需要通過反覆實驗或前人經驗,根據實際情況得到的,具體有哪些閾值在程式碼中會有註釋說明。在本例中使用的是matlab提供的最初始值。

以下為部分實驗結果截圖:


圖1


圖2

圖1的跟蹤效果良好,右邊邊緣沒有出現跟蹤編號是因為還沒達到最小連續出現幀數的閾值

圖2產生了兩個問題:①中間路牌後面的兩個人沒有檢測到,原因一是產生遮擋,二是因為他們連續靜止。②編號4將兩個並排走的人歸為同一個目標來進行跟蹤,原因是形態學操作和連通性檢查沒有做到太細

因為本例是基於動態的多目標跟蹤,所以對於連續多幀靜止的物體會自動歸為背景,所以問題①必須用其他方法解決(基於特徵、統計等等);而在形態學操作上可以嘗試將開操作和閉操作使用的矩形大小調整下,可能可以解決。(本文還未處理,這裡先提出來)

另外,基於動態的多目標跟蹤還存在一個與問題①對應的問題:當不是感興趣的目標連續移動時,比如本來想檢測人,結果有風吹草動、車輛經過等等,都會影響到跟蹤效果,因此必須使用其他方法來解決在前景檢測中劃分不同類別物體的問題。

以下是程式碼介紹: