2009-08-23 13 views
19

Nach Nachfrage here und versuchen sowohl SURF und SIFT, keiner von ihnen scheint effizient genug, um Interesse Punkte schnell genug zu erzeugen, um einen Strom von der Kamera zu verfolgen.SURF und SIFT Alternative Object Tracking Algorithmus für Augmented Reality

SURF zum Beispiel dauert etwa 3 Sekunden, um interessante Punkte für ein Bild zu generieren, das ist viel zu langsam, um ein Video von einer Webcam zu verfolgen, und es wird noch schlimmer, wenn es auf einem Mobiltelefon verwendet wird.

Ich brauche nur einen Algorithmus, der einen bestimmten Bereich, seine Skala, Neigung, etc .. verfolgt und ich kann darüber hinaus bauen.

Dank

Antwort

14

Ich vermute, Ihre SURF-Nutzung möglicherweise einige Änderungen benötigen?

Here is a link an ein MIT-Papier zur Verwendung von SURF für Augmented-Reality-Anwendungen auf mobilen Geräten.

Auszug:

In diesem Abschnitt präsentieren wir unsere Umsetzung der SURF al gorithm und seine Anpassung an das Mobiltelefon . Als nächstes diskutieren wir die Auswirkung , die Genauigkeit auf die Geschwindigkeit der Nearest-Neighbor Suche hat und zeigen, dass wir können eine Größenordnung erreichen beschleunigen mit minimaler Auswirkung auf übereinstimmende Genauigkeit. Schließlich entfernen wir die Details des Telefons Umsetzung der Bild übereinstimmenden Pipeline. Wir untersuchen die Leistung, Speicherverbrauch und Bandbreitenverbrauch auf dem Telefon.

Vielleicht möchten Sie auch in die Algorithmen von OpenCV einsteigen, da diese erprobt sind.

Abhängig von den Constraints Ihrer Anwendung können Sie möglicherweise die Generizität dieser Algorithmen reduzieren, um nach bekannten POIs und Markern innerhalb des Bildes zu suchen.

Teil von Tracking ein POI schätzt seinen Vektor von einem Punkt im 2D-Bild zum anderen und bestätigt dann optional, dass es dort noch existiert (durch Pixelmerkmale). Derselbe Ansatz kann verwendet werden, um das gesamte Bild für POI- und POI-Gruppen-/Objektperspektiven- und -rotationsänderungen zu verfolgen (nicht erneut zu scannen).

Es gibt Tonnen von Online-Dokumenten zum Verfolgen von Objekten auf einer 2D-Projektion (in vielen Fällen bis zu einem größeren Versatz).

Viel Glück!

+0

Das einzige, was ich mir vorstellen kann, dass es langsamer werden könnte, ist die Tatsache, dass es in Java ist. Abgesehen davon ist es klar, dass das Generieren von Interessenpunkten lange dauert. –

3

Sie können einen einfacheren Algorithmus verwenden, wenn Sie strengere Beschränkungen für den Bereich machen würden Sie verfolgt werden möchten. Wie Sie sicher wissen, ist ARToolKit ziemlich schnell, aber verfolgt nur schwarze und weiße Markierungen mit einem sehr unterschiedlichen Rahmen.

Wenn Sie einen (etwas) universellen Tracker haben möchten, sollten Sie PTAM überprüfen. Die Website (http://www.robots.ox.ac.uk/~gk/PTAM/) ist derzeit down, aber hier ist ein snazzy Video davon auf einem iPhone arbeiten (http://www.youtube.com/watch?v=pBI5HwitBX4)

+0

Ich wusste nicht über PTAM, aber aus den Videos sieht es wirklich gut aus. Ich denke, ich muss einfach warten bis es wieder geht. Ich habe versucht, Google Code Search zu suchen, aber ... nichts. –

5

Wir SURF für ein Projekt verwenden, und wir fanden OpenSURF OpenCV SURF Implementierung in roher Geschwindigkeit und Leistung zu übertreffen. Wir haben die Wiederholbarkeit und Genauigkeit noch nicht getestet, aber es ist viel schneller.


Update: Ich wollte nur darauf hinweisen, dass Sie keine SURF Match Schritt in jedem Rahmen durchführen müssen, können Sie es jedes zweite Bild einfach tun und die Position des Objekts in dem Rahmen, den Sie don interpolieren SURF nicht ausführen.

+0

Ich wollte nur sagen, dass mit der neuesten Version von OpenCV die SURF-Implementierung neu geschrieben wurde, um Intel Threading Blocks zu verwenden. Wenn Ihr Ausführungsgerät mehr als einen Kern hat, ist die Beschleunigung unglaublich (viel schneller als OpenSurf) – Diego

2

Wie andere schon erwähnt haben, scheinen drei Sekunden ungewöhnlich lang zu sein. Beim Testen der SURF-Implementierung in der Mahotas-Bibliothek fand ich heraus, dass es durchschnittlich 0,36 Sekunden dauerte, selbst bei einigen ziemlich großen Bildern (z. B. 1024 × 768). Und das ist mit einer Mischung aus Python und C, also würde ich mir vorstellen, dass einige andere pure-C-Implementierungen noch schneller wären.

+0

Autor von Mahotas hier: Eigentlich ist die Python-Schicht sehr dünn. Ich würde keine große Geschwindigkeitszunahme von reinem C erwarten. – luispedro

2

Eine Option, die ich in eingeschränkten eingebetteten Systemen verwendet habe, ist die Verwendung eines einfacheren Detektors für interessierende Punkte: FAST oder Shi-Tomasi zum Beispiel. Ich benutzte Shi-Tomasi, da ich ein FPGA anvisierte und es leicht mit Pixelrate laufen konnte, ohne dass eine signifikante Pufferung erforderlich war.

Verwenden Sie dann SURF, um die Deskriptoren für den Image-Patch um die identifizierten Features zu generieren und diese für Matching- und Tracking-Zwecke zu verwenden.