Richard Han
Richard Han

Reputation: 31

FREAK Descriptor parameters

I have a question about FREAK function in OpenCV 2.4.3. In the definition of FREAK, it says:

FREAK( bool orientationNormalized = true,
       bool scaleNormalized = true,
       float patternScale = 22.0f,
       int nOctaves = 4,
       const vector<int>& selectedPairs = vector<int>());

What does "patternScale" mean exactly? I couldn't find anything about "scale" in the FREAK papers. How are the kernel sizes of Gaussians in FREAK determined? I am asking this because BruteForce Matcher's matching pairs depend on the parameter "patternScale".

If I leave it as default, the matcher misses a few keypoints and they are not matched. However, if I change it to 1.0, the matcher matches every point. Is there anybody who knows why?

Upvotes: 3

Views: 1014

Answers (2)

Mr.Mountain
Mr.Mountain

Reputation: 883

what does "patternScale" means exactly?

Around a found keypoint a pattern will be constructed to execute the testing. If you look into the paper you will see this human-inspired pattern. The patternscale defines how big this pattern is.

Isn't the kernel sizes of Gaussians in FREAK determined?

Yes. I would think so.

Additional you could look at the source-code of OpenCV.

Upvotes: 2

Kyle Hale
Kyle Hale

Reputation: 8120

So here's a little insight into the code surrounding the FREAK constructor and how it uses the patternScale parameter at OpenCV's own answers site:

http://answers.opencv.org/question/5360/freaks-patternscale-parameter-tuning/

That combined with this post about "eating" keypoints (similar to what you're experiencing, it seems)

Which seems to indicate that the patternScale is used to "scale up" the lookup keypoints of the original pattern. When they scale past the size of the image itself, they're simply dropped from the computation.

Upvotes: 3

Related Questions