4

I am trying to make a detector based on descriptors. I am using OpenCV and I have seen that there are many feature types and descriptor types, and also matcher types. More I have also seen that there can be composed types like Grid or Pyramid for feature types.

I have not found a good explanation of them (except for Pyramid, where it says that is good "for detectors that are not inherently scaled"). I want to have a small description of each type and each combination (feature-descriptor-matcher), to make an idea and not creating an exhaustive work searching and verifying each possible combination.

Does anyone know some more information about this?

Paul Seeb
  • 6,006
  • 3
  • 26
  • 38
thedarkside ofthemoon
  • 2,251
  • 6
  • 31
  • 48

1 Answers1

7

The term feature is commonly used for two different things:

  • feature detectors,
  • feature descriptors.

A detector aims at.. well... detecting good interesting points, i.e., points that are stable under viewpoint and illumination changes and that yield good performance in tasks like homography estimation or object detection.

A descriptor aims at reaching good matching performance for detected points under the said viewpoint and illumination changes.

Some points were designed individually, without any descriptor. This is the case for most of the oldest interest points (Moravec, Harris, good features) and a small portion of the recent ones (FAST).

Then, a major performance improvement was reached through the co-design of point detectors and descriptors, and this is the approach embraced by SIFT and SURF. For simplicity, the descriptor was not given a particular name (although you can remark that SIFT descriptors and HoG features are very close to each other). These descriptors are real valued (i.e., floating point vectors).

Finally, in order to have fast running times on limited hardware, an original keypoint detector (FAST) was designed. FAST relies on simple binary tests. The same approach of binary tests was then used to design descriptors, and this is how you got BRIEF, BRISK, FREAK, ORB... Thus, what you get is binary descriptors (bitstreams).

Finally, if you want to summarize:

  • you can cross descriptors and detectors as you like. Just be careful that when a detector does not have a scale you may have to guess one (or impose a default one) for the descriptors that require it (SIFT, SURF);
  • any matcher can be used as long as you have the same type of descriptors from each image. What will vary is the feature distance used by the matcher;
  • SIFT and SURF are real valued, thus need to be matched using an L2 distance. Recent descriptors (BRIEF, BRISK, FREAK, ORB) are binary and distances must be measured with the Hamming distance.
sansuiso
  • 9,259
  • 1
  • 40
  • 58
  • You have told me some things that I did not know, but I want to know more :) (just +1) – thedarkside ofthemoon May 23 '14 at 07:13
  • 2
    This is a detailed answer that is useful for background, but still does not answer the question regarding when to use the Grid and Pyramid prefixes. – Paul Seeb Sep 02 '14 at 21:50
  • Good answer, after that answer i get new account and give +2. For more detailed information you can check docs of opencv or src codes or papers of these feature detector algorithms. – oknsnl Sep 03 '14 at 08:32
  • @oknsnl Please post a reference to these papers. I have read a number of papers on FAST and cannot find any references to grid or pyramid detection adaptations. While there are many adaptations, it is not clear which was used in the OpenCV library – Paul Seeb Sep 05 '14 at 03:38
  • http://www.vision.ee.ethz.ch/~surf/eccv06.pdf http://docs.opencv.org/modules/features2d/doc/feature_detection_and_description.html plus opencv is open source you can check their source codes. – oknsnl Sep 05 '14 at 10:42
  • @oknsnl I've read both of those but none discusses grid or pyramid adaptations. Maybe this question is just unanswerable. Certainly no one can speak about when one of these OpenCV adaptations is worth using. – Paul Seeb Sep 08 '14 at 16:12