8

As known in OpenCV 2.4.9.0 are these feature-detectors: SIFT, SURF, BRISK, FREAK, STAR, FAST, ORB.

All of these have implementation on CPU, but only FAST and ORB on GPU. http://docs.opencv.org/genindex.html

And as known, some are scale/rotate-invariant, but some aren't: Are there any fast alternatives to SURF and SIFT for scale-invariant feature extraction?

These are scale-invariant and rotate-invariant:

  • SIFT
  • SURF
  • BRISK
  • FREAK
  • STAR

But these are not scale-invariant and not rotate-invariant:

  • FAST
  • ORB

Are there any detectors which implemented on GPU and are scale/rotate-invariant?

Or will be added in OpenCV 3.0 on GPU or OpenCL?

Community
  • 1
  • 1
Alex
  • 12,578
  • 15
  • 99
  • 195
  • 1
    Have you seen it (it already has OCL version)? http://docs.opencv.org/modules/nonfree/doc/feature_detection.html#gpu-surf-gpu – Kornel Feb 02 '15 at 19:44
  • @Kornel Thank U! I have not seen this, missed. It is a pity that there are no FREAK/BRISK. – Alex Feb 02 '15 at 19:58
  • 1
    may be you can try AKAZE too. Also in 3.0, you needn't use ocl version of surf. It is in my default - see this link https://github.com/Itseez/opencv_contrib/blob/master/modules/xfeatures2d/src/surf.cpp#L895. Use `UMat` though. – kiranpradeep Feb 03 '15 at 03:35
  • @Kiran Thank U. Yes, it seems to be the true - in OpenCV 3.0 SURF has 3 versions: CPU, CUDA and OCL(which trys to be used by default if can). And AKAZE seems to be more efficient than ORB: http://docs.opencv.org/trunk/doc/tutorials/features2d/akaze_tracking/akaze_tracking.html But I didn't find anything about implementation AKAZE on GPU(OCL/CUDA). – Alex Feb 03 '15 at 12:14

2 Answers2

8

Actually, SURF is the only scale/rotate-invariant feature detector with GPU support in OpenCV.

In OpenCV 3.0 FAST and ORBhave got OCL support and moreover, these two (FAST and ORB) have already got CUDA support.

The OCL/CUDA support of SURF has been already mentioned in the comments of your question, but it is only a contribution to OpenCV and this is how OpenCV's developers about opencv_contrib:

New modules quite often do not have stable API, and they are not well-tested. Thus, they shouldn't be released as a part of official OpenCV distribution, since the library maintains binary compatibility, and tries to provide decent performance and stability.

Based on my previous experiences OpenCV’s implementation of SURF features were much weaker than OpenSURF. It would be reasonable to try it, or find some other open source implementations.

p.s.: to my knowledge still there is no GPU accelerated version of KAZE/AKAZE.

Kornel
  • 5,264
  • 2
  • 21
  • 28
4

I recently implemented AKAZE using CUDA with a couple of colleagues, if you are familiar with the original library you should have no problem using it since we respected the API. You can find the current version here:

https://github.com/nbergst/akaze

CoffeeRobot
  • 41
  • 1
  • 5