Search code examples
opencvsiftsurf

Why KeyPoint "detector" and "extractor" are different operation?


Bascially you have first to do a:

SurfFeatureDetector surf(400);
surf.detect(image1, keypoints1);

And then a:

surfDesc.compute(image1, keypoints1, descriptors1);

Why detect and comput are 2 different operation?
Doing the computing after the detect doesn't make redundance loops?

I found myself that .compute is the most expensive in my application.

.detect 

is done in 0.2secs

.compute

Takes ~1sec. Is there any way to speed up .compute ?


Solution

  • There is a difference between detecting the keypoints in an image and computing the descriptors for those keypoints. For example you can extract SURF keypoints and compute SIFT features. Note that in DescriptorExtractor::compute method, filters on keypoints are applied:

    KeyPointsFilter::runByImageBorder()
    KeyPointsFilter::runByKeypointSize();