opencvorbextractorfeature-descriptorfreak

Why does opencv FREAK extractor remove so many keypoints, specifically using ORB detector


I am using OpenCV 2.4.3 c++ interface to find matching points between two images. The first attempt was using SURF. The only problem is the consuming time, so I tried the new FREAK extractor. Using SURF for detection and FREAK for description, I realized that FREAK reduces the number of keypoints to almost half the detected, and the resulting matches were not enough. That is the reason, I tried FAST to obtain more keypoints. The results:

  1. SURF detector, SURF extractor, BFMatcher crosscheck true, RANSAC: 70keypoints first image, 50 keypoints second image, 200ms. 250ms. 15ms. 15ms.
  2. SURF detector, FREAK extractor, BFMatcher crosscheck true, RANSAC: 39 keypoints first image, 30 keypoints second image (after FREAK), 200ms., 50 ms. , 0ms., 0ms. It results that there too few good matchings.
  3. FAST detector, FREAK extractor, BFMatcher crosscheck true, RANSAC: 120 keypoints, 90 keypoints, (69 and 48 keypoints after FREAK), 10ms., 450 ms., 15 ms., 10 ms.

After that, I used ORBFeatureDetector, and it is obtaining the same number of keypoints than FAST, but after FREAK extractor, the resulting keypoints are 0 for each image. Am I doing something wrong? Are ORB keypoints different from those obtained from FAST? Maybe I could open another question for this, but I have last one. What could it be the best combination of detector/extractor to obtain the same results than my first experiments using SURF, but reducing the processing time? Because as I obtain more keypoints the extractor part is also more time consuming, although I use FREAK.


Solution

  • FREAK removes points if it can not generate a descriptor for it, many times this occurs in the border of the image as it cannot generate a descriptor if it falls out of the boundary image. I avoid this issue by applying a ROI before extraction.

    I also use FAST combined with FREAK and I get the best results, but I still have the problem of reducing extractor time, which is too high for me.