Frage

Ich bin auf viele AR-Bibliotheken/SDKs/APIs gestoßen, alle sind markerbasiert, bis ich festgestellt habe Dieses Video, Aus der Beschreibung und den Kommentaren sieht es so aus, als würde er SIFT verwenden, um das Objekt zu erkennen und ihm zu folgen.

Ich muss das für Android tun, also brauche ich eine vollständige Implementierung von SIFT in reinem Java.

Ich bin bereit, das zu tun, aber ich muss wissen, wie Sift zuerst für die Augmented Reality verwendet wird.

Ich könnte alle Informationen verwenden, die Sie geben.

War es hilfreich?

Lösung

Meiner Meinung nach versucht zu implementieren SIEBEN Für ein tragbares Gerät ist Wahnsinn. SIFT ist ein Algorithmus zum Extraktionsfunktionsfunktion, der komplexe Mathematik umfasst und sicherlich viel Rechenleistung erfordert. Sift ist ebenfalls patentiert.

Wenn Sie jedoch diese Aufgabe tatsächlich ausmachen möchten, sollten Sie zunächst ziemlich einige Nachforschungen anstellen. Sie müssen Dinge überprüfen wie:

  • Alle Varianten von SIFT, die die Leistung verbessern, einschließlich verschiedener Algorithmen rundum
  • Ich würde empfehlen, sich zu untersuchen SURFEN Das ist sehr robust und viel schneller (aber immer noch einer dieser beängstigenden Algorithmen)
  • Android NDK (Ich werde später erklären)
  • Viele, viele Veröffentlichungen

Warum Android NDK? Weil Sie wahrscheinlich einen viel größeren Leistungsgewinn erzielen, indem Sie den Algorithmus in einer C -Bibliothek implementieren, die von Ihrer Java -Anwendung verwendet wird.

Stellen Sie vor dem Start sicher, dass Sie diese Forschung durchführen, weil es schade ist, auf halbem Weg zu erkennen, dass die Bildfunktionsextraktionsalgorithmen für ein Android -Telefon einfach zu viel sind. Es ist ein ernstes Bestreben an sich, einen solchen Algorithmus zu implementieren, der gute Ergebnisse liefert und in akzeptabler Zeitspanne läuft, geschweige denn mit der Erstellung einer AR -Anwendung.

Wie bei der Art und Weise, wie Sie das für AR verwenden würden, denke ich, dass der Deskriptor, den Sie aus dem Ausführen des Algorithmus auf einem Bild erhalten, mit Daten in einer zentralen Datenbank abgestimmt werden müsste. Anschließend können die Ergebnisse dem Benutzer angezeigt werden. Die Merkmale eines aus Surf gesammelten Bildes sollen es beschreiben, wie es dann mit diesen identifiziert werden kann. Ich bin nicht wirklich erfahren, dass ich das tun kann, aber es gibt immer Ressourcen im Internet. Sie möchten wahrscheinlich mit generischen Sachen wie so beginnen wie Objekterkennung.

Viel Glück :)

Andere Tipps

Wenn ich wo du wo du bist, würde ich prüfen, wie (und warum) das SIFT-Feature funktioniert (wie gesagt, seine Wikipedia-Seite bietet eine gute Cochise-Erklärung, und weitere Details überprüfen das wissenschaftliche Papier (das mit Wikipedia verknüpft ist). ) und bauen dann Ihre eigene Variante, die zu Ihrem Geschmack passt; IE hat das optimale Gleichgewicht zwischen Leistung und CPU-Lade, die für Ihre Anwendung benötigt wird.

Zum Beispiel denke ich, dass Gaußsche Glättung durch eine schnellere Glättungsmethode ersetzt werden könnte.

Wenn Sie Ihre eigene Variante bauen, haben Sie auch nichts mit Patenten zu tun (es gibt bereits viele Varianten wie Gloh).

Ich habe versucht, Surf für 330 MHz Symbian Mobile zu surfen, und es war selbst bei allen Optimierungen und Nachschlagetischen immer noch zu langsam. Und Sift sollte noch langsamer sein. Jeder benutzt jetzt schnell für Handys. Auf jeden Fall ist die Feature -Extraktion kein größtes Problem. Korrespondenz und das Löschen falsch positiv darin ist schwieriger. Schneller Linkhttp://svr-ww.eng.cam.ac.uk/~er258/work/fast.html

Ich würde Ihnen empfehlen, zunächst die Funktionen zu betrachten, die bereits in der OpenCV -Bibliothek implementiert sind. Dazu gehören Surf, MSER und andere:

http://opencv.willowgarage.com/documentation/cpp/feature_detction.html

Dies kann für Ihre Bewerbung ausreichen und sind schneller als sieben. Und wie oben erwähnt, wird SIFT patentiert.

Beginnen Sie außerdem mit Leistungstests in Ihrer mobilen Plattform, indem Sie die Funktionen in jedem Rahmen extrahieren. Auf diese Weise haben Sie eine Idee, welche Echtzeit ausgeführt werden können oder nicht.

Haben Sie die schnelle Implementierung von OpenCV im Android -Port ausprobiert? Ich habe es getestet und es läuft blühend schnell.

Sie können auch reduzierte Histogrammdeskriptoren um die erkannten schnellen Tastoint übertragen. Ich habe eher von 3x3 als von Standard 4x4 Sift gehört. Das hat eine anständige Chance, in Echtzeit zu arbeiten, wenn Sie es mit Neon -Anweisungen stark optimieren. Andernfalls würde ich etwas schnelles und Einfaches wie die Summe von quadratischen oder absoluten Unterschieden für einen Patch um die Tastoint -Tastoptionen empfehlen, die sehr schnell sind.

Sift ist kein Allheilmittel. Bei Videoanwendungen in Echtzeit ist es normalerweise übertrieben.

Wie immer ist Wikipedia ein guter Ort, um aus zu beginnen: http://en.wikipedia.org/wiki/scale-invariant_feature_transform, aber beachten Sie, dass Sift patentiert ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top