Search code examples
javaandroidalgorithmaugmented-realitysift

Using SIFT for Augmented Reality


I've come across MANY AR libraries/SDKs/APIs, all of them are marker-based, until I found this video, from the description and the comments, it looks like he's using SIFT to detect the object and follow it around.

I need to do that for Android, so I'm gonna need a full implementation of SIFT in pure Java.

I'm willing to do that but I need to know how SIFT is used for augmented reality first.

I could make use of any information you give.


Solution

  • In my opinion, trying to implement SIFT for a portable device is madness. SIFT is an image feature extraction algorithm, which includes complex math and certainly requires a lot of computing power. SIFT is also patented.

    Still, if you indeed want to go forth with this task, you should do quite some research at first. You need to check things like:

    • Any variants of SIFT that enhance performance, including different algorithms all around
    • I would recommend looking into SURF which is very robust and much more faster (but still one of those scary algorithms)
    • Android NDK (I'll explain later)
    • Lots and lots of publications

    Why Android NDK? Because you'll probably have a much more significant performance gain by implementing the algorithm in a C library that's being used by your Java application.

    Before starting anything, make sure you do that research cause it would be a pity to realize halfway that the image feature extraction algorithms are just too much for an Android phone. It's a serious endeavor in itself implementing such an algorithm that provides good results and runs in an acceptable amount of time, let alone using it to create an AR application.

    As in how you would use that for AR, I guess that the descriptor you get from running the algorithm on an image would have to be matched against with data saved in a central database. Then the results can be displayed to the user. The features of an image gathered from SURF are supposed to describe it such as that it can be then identified using those. I'm not really experienced on doing that but there's always resources on the web. You'd probably wanna start with generic stuff such as Object Recognition.

    Best of luck :)