2012-12-21 67 views
1

爲了找到連續的幀的運​​動的差異,我使用的幀的絕對差,然後總結所有的像素進行量化的量運動。我在OpenCV中做到了這一點。其在視頻計算幀運動的更好的辦法?

但最近,我知道非洲之角和崇德的光流法和基於宏塊的運動補償。 OpenCV庫已經有了可以計算它們的構建函數。但我不知道如何量化它們。他們比第一種方法更好嗎?

請幫忙!

回答

2

光流OpenCV中實現的方法是...

  1. Initialy檢測某些點作爲好等特點在框架(比如FrameA),其中待跟蹤目標出現跟蹤(興趣點) ...有些點可能位於目標上,有些可能位於背景上...
  2. 檢測到的點存儲在矢量數組中,並隨FrameA和FrameB一起傳遞到Optical Flow函數...稍後(FrameB)是我們打算找到感興趣點的位置的下一幀...
  3. 當我們獲得p感興趣oints在FrameB我們可以估算的FrameA和FrameB之間的利益點的位移...

爲你的情況......因爲你正在做的幀運動計算...使用背景減法(幀分化..)作爲技術來啓動框架,從那裏你可以開始找到興趣點...當變化超過閾值開始獲取興趣點...跟蹤他們在下一個連續的幀,你可以做一個直方圖有多少興趣點已經下了多少位移在下一幀...多數民衆贊成我現在可以考慮的量化幀運動...

1

雖然我與特定的OpenCV實現一點經驗,我可以告訴你,光流通常不會嘗試量化運動量。可以定義基於該光流矢量(例如求和塊速度)的長度的輸出的度量,但是這是從您所使用的一個非常不同的度量。如果這對您有用,則取決於應用程序。爲了進行比較,可以考慮一個灰色物體在白色背景下移動,而黑色物體在白色背景下移動。您的幀差異度量會將黑色物體視爲更多的運動,而塊速度度量的總和會將其視爲大致相同的運動量。

+0

我正在研究視頻摘要。所以,我想測量運動量是很重要的。上述方法適合他們嗎? –

0

最後,你還應該考慮你的方法的運行時間。差異圖像的交互複雜性非常低,可以在幾毫秒內估計。但是你無法確定物體的速度。例如搖動相機可能會造成問題。 不太快的是基於光流的方法,如金字塔Lucas Kanade或Horn Schunk方法,但您可以獲得每個像素(密集方法,如Horn Schunk)或一組預定義像素(稀疏方法,如金字塔Lucas Kanade)運動矢量。因此,您現在可以在不同的移動對象之間切換,或者只使用計算的運動矢量的長度。但運行時間大約是200毫秒到2秒,取決於參數,幀的大小和要計算的向量數等。