2012-05-11 9 views
5

Ich verwende Kinect mit OpenNI/NITE. OpenNI kann mit Hilfe von NITE menschliche Hände verfolgen. Außerdem kann OpenNI die verfolgte Handlinie glätten, und ich versuchte herauszufinden, wie es das macht.Online-Glättung für die Handverfolgung von Daten mit Kalman-Filtern

Ich versuchte mit Kalman-Filter, ersetzt die alte Hand-Position mit der Kalman geschätzten Handposition, aber immer noch die Glättung in OpenNI ist viel besser.

Ich würde mich über alle Hinweise freuen, wie man Online-Daten glättet oder wie man die Parameter in einem Kalman-Filter einstellt (etwas spezifisch für Hand-Tracking, da ich bereits weiß, was die Parameter tun).

Antwort

4

Mit Kalman-Filter ist nicht so einfach wie es scheint. Sie müssen ein gutes Bewegungsmodell, einen guten Zustandsvektor und ein gutes Messmodell wählen. Für Ihr Problem, wie ich denke, Sie tun 3D-Tracking von Position, nicht Orientierung (x, y und z-Position der Hände auf dem Bildschirm) Ich würde wählen Sie Folgendes:

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 

Sie müssen auch die Kovarianz gesetzt Fehler richtig, da dies den Fehler der Wahl der Geschwindigkeit als konstant modellieren wird (was nicht wahr ist).

Überprüfen Sie diese paper. Sehen Sie sich die Jacobianer an, die für die Vorhersage und Aktualisierung der Gleichungen des Filters benötigt werden. Sie sind wichtig. Wenn Sie sie als Identität betrachten, wird der Filter funktionieren, aber es wird nur mit Genauigkeit funktionieren, wenn Sie die Jacobians W (multipliziert Q), H und A richtig wählen. Q und R sind diagonal, versuchen Sie, Werte experimentell zu geben.

Hoffe, das hilft, viel Glück.

+2

Ich habe dieses Modell versucht, versuchte es auch mit Beschleunigung. Während es das Signal während der Bewegung glättet, bleibt das Zittern immer noch bestehen, wenn die Hand stillsteht. Außerdem scheint das Modell selbst falsch zu sein. Das heißt, Handbewegung mit den Standard-Bewegungsgleichungen zu modellieren, die Hand folgt dem nicht wirklich, oder? –

0

Here Es gibt ein einfaches Beispiel, das zeigt, wie Parameter eines Kalman-Filters eingestellt werden.

Das Beispiel stellt eine einfache Möglichkeit dar, die verschiedenen geglätteten Ausgaben visuell zu testen. Die Überprüfung der Kommentare hat mir auch geholfen, die verschiedenen Parameter (Rauschen, Bewegungsmodell, Initialisierung usw.) zu verstehen.

Hoffe es hilft, es funktioniert ganz gut, und der Code ist einfach zu verstehen.

Es verwendet die Opencv-Implementierung.

Hoffe es hilft!

Verwandte Themen