2012-05-11 1 views
5

私はOpenNI/NITEでKinectを使用しています。 OpenNIは、NITEの助けを借りて人間の手を追跡することができます。また、OpenNIは追跡されたハンドラインをスムーズにすることができます。そして、私はそれがどのようにそれを行うのか把握しようとしていました。カルマンフィルタによるハンドトラッキングデータのオンラインスムージング

カルマンフィルタを使ってみましたが、古い手の位置をカルマンの推定手の位置に置き換えましたが、OpenNIの滑らかさははるかに優れています。

オンラインデータをスムーズにする方法や、カルマンフィルタのパラメータを設定する方法の手がかりを知っています。

答えて

4

カルマンフィルタの使用はそれほど簡単ではありません。良いモーションモデル、良い状態ベクトル、良い計測モデルを選択する必要があります。あなたの問題のために、私はあなたが位置の3D追跡を行う推測として、ない方向(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フィルターの予測式と更新式に必要なJacobiansを見てください。彼らは重要です。あなたがそれらのアイデンティティを考慮すれば、フィルターは機能しますが、ヤコビアンW(Qを乗算する)、H、Aを正しく選択すると正確にしか動作しません。QとRは対角です。

希望、これは幸運を助けます。

+2

このモデルを試してみましたが、加速も試しました。それでも、動いている間は信号を滑らかにしますが、手が静止していてもジッタはまだ現れます。さらに、モデルそのものが間違っているように見えます。それは標準的な運動方程式を使って手の動きをモデル化することです、手はそれに本当に従わないのですか? –

0

Hereカルマンフィルタのパラメータを設定する簡単な例があります。

この例は、さまざまなスムージングされた出力を視覚的にテストする簡単な方法を表しています。コメントを確認することで、さまざまなパラメータ(ノイズ、モーションモデル、初期化など)を理解するのにも役立ちました。

うまくいくと思いますが、コードは分かりやすいです。

これはopencvの実装を使用しています。

希望すると助かります!

関連する問題