I am playing around with the FREAK Descriptor Extractor to see if I could get faster runtime performance for my Android app. Previously I was using SURF Detector+Extractor. Since the nonfree package (which contains SURF) is excluded from the from OpenCV4Android 2.4.2 distribution I tried FAST instead of SURF (which was used in the FREAK demo code: http://code.opencv.org/projects/opencv/repository/entry/trunk/opencv/samples/cpp/freak_demo.cpp) for the descriptor extraction. I hoped that FAST+FREAK would be faster than SURF (especially since FAST is pretty fast with the drawback that it's not scale invariant). First tests however showed that my app has higher frame rates with SURF instead of FREAK. Is this known behavior or am I doing something wrong?
For FREAK I used the standard parameters, for SURF I used surf(500, 2, 2, false, false); (so 2 instead of 4 recommended octaves, 64-element descriptor instead of 124-element, computation of rotation - for rotational invariance). For SURF I used a FLANN Based Matcher (FlannBasedMatcher matcher(new flann::KDTreeIndexParams , new flann::SearchParams(8));), but for FREAK I'm only using a BFMatcher, since it's a binary descriptor.
What could be the reason for the slower performance of FREAK? Is it possible to use FLANN or some other non-bruteforce matcher for FREAK descriptors to get better runtime performance? I have also tried to convert the descriptors to float descriptors to use FLANN as presented above, but that did't give me any significant performance improvement and I guess it would not be a very good idea at all.