Mein System ist das folgende. Ich benutze die Kamera eines Mobilgeräts, um ein Objekt zu verfolgen. Durch diese Verfolgung erhalte ich vier 3D-Punkte, die ich auf den Bildschirm projiziere, um vier 2D-Punkte zu erhalten. Diese 8 Werte sind aufgrund der Erkennung etwas verrauscht. Ich möchte sie filtern, um die Bewegung flüssiger und realistischer zu gestalten. Als zweite Messung verwende ich den Gyroskopausgang des Geräts, der drei Euler-Winkel (dh die Gerätelage) liefert. Diese sind genauer und mit einer höheren Frequenz (bis zu 100 Hz) als 2D-Positionen (um 20 Hz).
Mein erster Versuch war mit einem einfachen Tiefpassfilter, aber die Verzögerung war wichtig. Deshalb versuche ich jetzt, einen Kalman-Filter zu verwenden, in der Hoffnung, dass er die Positionen mit geringer Verzögerung glätten kann. Wie in einer früheren Frage zu sehen , ist ein wichtiger Punkt in einem Kalman-Filter die Beziehung zwischen den Messungen und den internen Zustandsvariablen. Hier sind die Messungen sowohl meine 8 2D-Punktkoordinaten als auch die 3 Euler-Winkel, aber ich bin nicht sicher, was ich als interne Zustandsvariablen verwenden und wie ich die Euler-Winkel mit den 2D-Punkten verbinden soll. Daher ist die Hauptfrage, ob ein Kalman-Filter überhaupt für dieses Problem geeignet ist. Und wenn ja, wie?
quelle
From this tracking, I get four 3D points that I project on a mobile device screen, to get four 2D points. These 8 values are kinda noisy
und später sagen SieWhat's available to me is the device's gyroscope output, which provides three Euler angles (i.e. the device attitude).
. Welches ist es? Die vier 2D-Punkte oder die drei Euler-Winkel? Oder fährt der Bearbeitungszug Euler-Winkel -> 3D-Punkte -> 2D-Punkte?Antworten:
Tiefpassfilterung
Es wäre gut zu wissen, was Sie mit "einfachem Tiefpassfilter" meinen.
Zum Beispiel, wenn Ihre Messungen zum Zeitpunkt sindk
und Ihre tiefpassgefilterten Schätzungen sind:
dann haben Sie eine ziemlich große Gruppenverzögerung im Filter von ungefähr (für Alpha nahe 1).1 / ( 1 - α )
Modellierung des Signals: Simplistic Approach
Um den Kalman-Filter (oder einen ähnlichen Ansatz) verwenden zu können, benötigen Sie ein Modell für die Erfassung und Aktualisierung Ihrer Messungen.
Normalerweise sieht das so aus:
wobei ϵ k das Prozess- (Fahr-) Rauschen ist, A die Zustandsübergangsmatrix ist und B Ihre Eingangsmatrix ist.
Und dann gemessen sind: p k = C p T R U E k + D ν k wobei ν k ist der Ausgang (Messung) Rauschen, C die Ausgangsmatrix, und D ist der Messrauschmatrix.pk
Hier wird der "Zustand" des Modells als die wahren Positionen ausgewählt, und die gemessenen Dinge sind die Ausgabe.
Sie können dann die Kalman-Filtergleichungen auf diese anwenden, um Zustandsschätzungen der wahren Position zu erhalten.pT R UEk^
Dieser Ansatz ist jedoch vereinfachend, da er keine Kenntnisse darüber verwendet, wie sich die Punkte bewegen könnten (und keine Kenntnisse darüber, wie sich die 4 Punkte bewegen könnten).
Modellierung des Signals: Start eines besseren Ansatzes
Diese Seite zeigt, wie Sie das Problem mit den Positionen und Euler-Winkeln einrichten. Es macht etwas anderes als das, was Sie brauchen, aber der Zustand ist:
und die messungen (ausgang) ist
Dies ist nur die klassische "Bewegungsgleichung". Siehe Gleichung (3) hier.
quelle
Ihr Tiefpassfilter könnte wie folgt aussehen:
Der LPF kann zum nächsten verformt werden:
quelle