多目標跟蹤
跟蹤是實時定位視頻流中運動物體或多目標物體的過程。物體跟蹤不同於物體檢測,物體檢測是單幀圖像上定位感興趣物體的過程,而跟蹤則將檢測跨多幀聯繫起來。
追蹤多目標步驟包含檢測,預測和數據關聯:
- 檢測:檢測單幀圖像上的感興趣物體;
- 預測:預測物體在下一幀圖像上的位置;
- 數據關聯:利用預測位置將檢測位置跨幀關聯起來以形成追蹤;
檢測
根據需檢測目標和攝像頭靜止與否選擇合適的檢測方法。
靜止攝像頭的物體檢測
利用靜止攝像頭檢測移動物體,可以利用vision.ForegroundDetector系統對象做背景分離。背景分割效率很高,但是需要攝像頭靜止。
移動攝像頭的物體檢測
利用移動攝像頭檢測運動物體,可以使用窗口滑移方法,此方法比背景分割運行的慢。檢測和跟蹤特定對象,參考表格中的系統對象。
選擇檢測算法
跟蹤對象類型 |
攝像頭 |
函數對象 |
---|---|---|
任何運動物體 |
靜止 |
|
臉,眼睛,鼻子,嘴巴,上半身 |
靜止,運動 |
|
行人 |
靜止,運動 |
|
特定物體類型 |
靜止,運動 |
|
預測
實時跟蹤目標意味着我們必須預測下一幀上物體的位置。最簡單的預測方法是假定物體會在最後出現位置的附近。換句話就是,上一步的檢測將爲下一步的預測服務。這個方法適用於高幀率的使用場景。然而,此方法在物體變速運動或者幀率相比於物體運動速度較低的情況下會失效。
更穩健的預測方法是利用上一步觀測到的物體運動信息。卡爾曼濾波(vision.KalmanFilter)預測物體的下一個位置,假定物體運動遵從某一運動模型,例如勻速和勻加速運動。卡爾曼濾波同樣會引入計算誤差和測量誤差,計算誤差是物體的實際運動和運動模型的偏差,測量誤差爲檢測的誤差。
爲了更簡便的實現卡爾曼濾波,可使用configureKalmanFilter。函數在笛卡爾座標系下設定了濾波器,用於跟蹤勻速和勻加速運動的物體。所有維度的統計數據均相同,如果需要更改卡爾曼 濾波器的設定,需對vision.KalmanFilter對象進行修改。
數據關聯
數據關聯是跨幀將傳感器探測數據與相應探測物體相關聯的過程,特定對象的時序結果由多量測值組成,稱爲航跡。航跡可以是對象的所有歷史位置,同樣也可以只是能得到的最近的位置和當前速度。
量測航跡匹配函數
航跡和量測的匹配需建立評價匹配的準則。通常,通過定義代價函數來建立此標準;量測到航跡的匹配代價越高,量測跟航跡越不匹配。一個簡單的準則是對象的預測邊框和量測邊框的重疊程度。 Tracking Pedestrians from a Moving Car例程中用 bboxOverlapRatio
實現了此代價函數,也可以使用更復雜的代價方程,用vision.KalmanFilter
對象中的distance
計算預測的不確定性。我們也可以自定義一個同時考慮對象尺寸和外觀的代價方程
剔除“壞”匹配
門限是剔除“壞”匹配的一種方法,例如在陳本函數中添加閾值。某次量測和航跡的匹配成本函數超過閾值,則量測和航跡不匹配。這類閾值方法在預測值附近生成圓形的門限區域,圓內均爲可匹配量測。另一種門限方法是創建一可包含預測的k最近鄰值的門限區域。
量測航跡配準
數據關聯即縮減爲最小權重二分匹配問題,這是圖論中已充分研究的領域。二分圖將航跡和量測描述爲頂點,同樣他將量測和航跡匹配的代價描述爲相應頂點的加權邊緣。
assignDetectionsToTracks
方程實現了匈牙利二分匹配算法的Munkres變量。輸入爲代價矩陣,行向量代表航跡,列向量代表航跡。每個交點即爲量測和航跡匹配的值,不匹配的閾值可設定爲無窮大。
航跡管理
數據關聯必須考慮FOV中新對象的出現和跟蹤對象的離開。換句話說就是任何時刻,新航跡可能需要被創建,已跟蹤航跡可能需要剔除。assignDetectionsToTracks
方程除返回匹配對象外,也返回未匹配的航跡和未匹配的量測的索引。
處理無配對的量測的一個方法是爲他們分別創建新的航跡,或者也可以只爲大於特定尺寸的未匹配量測或特定位置和外觀的量測新建航跡。例如,如果場景中有單獨入口,例如出入口,可以只爲入口附近的未配對量測新建航跡,其他未配對量測均當做噪聲處理;
另一種處理未配對航跡的方法是將指定幀數內任未配對的航跡刪除,同樣的,也可以定義刪除最後已知時刻位於exit point附件的未配對航跡。