2012-05-11 49 views
5

我正在使用Kinect和OpenNI/NITE。 OpenNI可以在NITE的幫助下跟蹤人手。此外,OpenNI可以平滑跟蹤的手勢線,我試圖弄清楚它是如何做到的。使用卡爾曼濾波器手動跟蹤數據的在線平滑

我嘗試使用卡爾曼濾波器,用卡爾曼估計的手位置替換舊的手位置,但OpenNI中的平滑器仍然更好。

我會很感激如何流暢的在線數據或如何設置參數卡爾曼濾波器任何線索(具體以專人跟蹤的東西,因爲我已經知道是什麼參數做)。

回答

4

使用卡爾曼濾波器並不像看起來那麼容易。你需要選擇一個好的運動模型,一個好的狀態向量和一個好的測量模型。對於你的問題,我猜你的位置三維跟蹤,而不是方向(X,屏幕上的手的Y和Z的位置)我會選擇以下:

State vector =[x, y, z, v_x, v_y, v_z] 

Update equations: (x,y,z) = (x,y,z)+ (v_x,v_y,v_z)*delta(t) 
velocity would be constant 

您還需要設置的協方差的誤差,因爲這會將選擇速度的誤差建模爲常數(這不是真的)。

檢查此paper。看看濾波器預測和更新方程所需的雅可比矩陣。它們很重要。如果你認爲它們是同一性的,那麼過濾器就可以工作,但如果你正確地選擇了雅可比矩陣W(乘以Q),H和A,那麼它只能起作用。Q和R是對角線,試圖給出實驗值。

希望這會有所幫助,祝你好運。

+2

我想這個模型,與加速試了一下爲好。儘管如此,儘管它在運動中平滑了信號,但當手靜止不動時,抖動仍然出現。而且,模型本身似乎是錯誤的。那就是用標準的運動方程來模擬手的運動,手並不真的如此,是嗎? –

0

Here有一個簡單的例子,顯示如何設置卡爾曼濾波器的參數。

這個例子代表了一種簡單的方法來直觀地測試不同的平滑輸出。檢查註釋還幫助我瞭解不同的參數(噪聲,運動模型,初始化等)。

希望它有幫助,它工作得很好,代碼很容易理解。

它使用opencv實現。

希望它有幫助!