2012-04-26 60 views
1

對視頻進行光流(lk)後,根據這些數據找到對象並追蹤它們的最佳方式是什麼?opencv如何追蹤光流後的物體?

這可能聽起來很不明顯,但我希望能夠定義清楚的物體周圍的輪廓,所以如果它是一個奇怪的形狀瓶或某些東西能夠檢測到邊緣。

回答

10

我不確定LK是最好的算法,因爲它計算了一組稀疏角點狀的運動,並且通過密集的光流結果(例如Farneback或Horn Schunck)跟蹤行爲通常更好。在計算完流程後,作爲第一步,您可以對其標準進行閾值處理(保留運動部件),並嘗試從該結果中提取連接區域。但是要注意的是,如果你沒有你想跟蹤的對象模型,你的任務並不容易。另一方面,如果您主要對跟蹤感興趣並且可以接受一些交互性,則可以查看camshift示例代碼,瞭解如何根據其外觀選擇和跟蹤圖像區域。

---編輯---

如果您的相機是靜態的,則使用背景減法來代替。使用OpenCV 2.4測試版,您必須在視頻模塊文檔中查找類BackgroundSubtractor及其子類。

還要注意,光流可以是實時(或不是很遠),具有良好的參數選擇以及GPU實現。在Windows上,您可以使用TU Graz/Gpu4Vision group的flowlib。 OpenCV也有一些GPU密集光流,例如類gpu :: BroxOpticalFlow。

--- EDIT 2 ---

加入單像素檢測到大的物體是一個任務叫做connected component labelling。有一個快速的算法,在OpenCV中實現。因此,這給你一個管道是:

  • 運動檢測(像素級)--->連接的補償。標記--->對象跟蹤(添加運動信息,卡爾曼濾波的可能軌跡......)。

但是,我們將不得不停止在這裏,因爲我們很快就會遠遠超過您最初的問題;-)

+0

明白了。給我幾天實施它,這聽起來不錯。 – 2012-04-26 10:12:16

+0

快速追蹤問題:是否有比光流更快的算法來檢測視頻中的移動位置,以便用戶不必手動選擇他感興趣的部分進行camshift? (我想知道爲什麼你說凸輪軸,然後safari自動更正我的拼寫) – 2012-04-26 10:16:57

+0

你的答案已經超過真棒。非常感謝!但我堅持如何從背景扣除的結果中檢測出物體。有什麼我可以用它來連接它們嗎? – 2012-04-27 13:33:07