2013-07-24 13 views
9

私はオブジェクト追跡プロジェクトに取り組んでおり、私はカルマンフィルタを使って得られた結果を改善したいと思います。KalmanFilter(6,2,0)遷移行列

私はインターネット上で動作している多くの例を見つけましたが、本当に背後にあるものを理解したいと思っています。 OpenCVのを使用して

は、ここでのコードの一部です:

KalmanFilter KF(6, 2, 0); 
Mat_ state(6, 1); 
Mat processNoise(6, 1, CV_32F); 
... 
KF.statePre.at(0) = mouse_info.x; 
KF.statePre.at(1) = mouse_info.y; 
KF.statePre.at(2) = 0; 
KF.statePre.at(3) = 0; 
KF.statePre.at(4) = 0; 
KF.statePre.at(5) = 0; 
KF.transitionMatrix = *(Mat_(6, 6) << 1,0,1,0,0.5,0, 0,1,0,1,0,0.5, 0,0,1,0,1,0, 0,0,0,1,0,1, 0,0,0,0,1,0, 0,0,0,0,0,1); 
KF.measurementMatrix = *(Mat_(2, 6) << 1,0,1,0,0.5,0, 0,1,0,1,0,0.5); 

この1つはカルマンフィルター(4,2,0)よりも滑らかな結果が得られますが、私は本当に理由を理解していません。 誰かがこの(6,6)遷移マトリックスの背後にあるものを私に説明することはできますか?

EDIT:ソリューションは、おそらくhereですが、明らかに、私は自分でそれを見つけることは十分ではないよ...

はあなたの助けをいただき、ありがとうございます。

答えて

9

状態ベクトルXは6つのコンポーネントで構成され、最初の2つはオブジェクトのxとyの位置です。

X = [X、Y、v_x、v_y、A_X、A_Y] トン

カルマンフィルタ、あなたの次の状態では、:のは、他の4がその速度と加速度であると仮定する

を:転記遷移行列を用いて、あなたが持っているであろうように、X トン+ 1は、遷移行列 乗じ X トン前の状態に等しいです。

X T + 1 = X T + v_x T + 0.5 A_X T

Y T + 1 = Y T + v_y T + 0.5 A_Y T

v_x トン+ 1 = v_x トン + A_X トン

v_y T + 1 = V_T T + A_tと T

A_X T + 1 = A_X T

A_Y T + 1 = A_Y T

2つの状態間の時間間隔が1に等しい場合、一定の加速度で動く物体の方程式のrete近似(そしてそれは他の4つの変数が速度および加速度であると仮定することが理にかなっているからである)。

これは、速度推定のより速いバリエーションを可能にするカルマンフィルタであるため、等速モデルを使用する(4,2,0)フィルタよりも遅れを導入します。

+0

ありがとう、私は同じ結論を思いついた。 – Thibel

関連する問題