I read about SIFT, SURF, Fern, BRIFT and even the evolution algorithms. But I not sure which from those algorithms is the best. So I need your help. Of course I know each algorithms have its own advantages, so here is the key for you to classify:
- Which is fastest in training/ recognize phases?
- Which consume fewest memory in runtime?
- Which can be implement for detect 3D object?
Thank you, and sorry about my bad English. In my case, I want to implement an application on smartphone to recognize a known object.
Your question is a bit complicated.
There are no optimal methods for all cases but methods that suit certain very specific cases.
If you decide to use local descriptors in your method I advise you to get started by using SIFT / SURF which are the most popular descriptors but are not very efficient (slow) and require a lot of memory. After that, you can try to replace them with binary descriptors (eg. BRIEF, ORB, BRISK, FREAK) that are much more efficient and require less storage.
But as I said before it all depends on what you want to implement, and what are the requirements of your application.