3

I have been dealing with OpenCV FREAK descriptor and after achieving quite awesome matching results with two similar oriented and scaled images I started trying with scaled and rotated images.

FREAK is supposed to be invariant to scale/rotation, but my results are horrible. I tried to tune the freak descriptor parameters:

new FREAK(true, true, 22, 5); //rotInvariant, scaleInvarian, scale, ocataves

but I just managed to get a few rigth matches in the closer part of the rotated image, where it has more resolution.

Is there a way to tune FREAK for rotated and different scale images?

Mar de Romos
  • 719
  • 2
  • 9
  • 22
  • 1
    If you get matches just in the closer part of the image is because it is not performing scale invariant. Try to down sample the bigger image (the training image i guess) with cv::pyrDown(image, image), if necessary several times and check if results are better – Jav_Rock Dec 19 '12 at 12:04
  • 1
    Yes, it improved. So it is not rubost to scale, then? Or it is not working properly because of parameters? I really don't know how to adjust them, the codes are tricky and there is no documentation about it. – Mar de Romos Dec 19 '12 at 15:27
  • 1
    I think it is robust to rotation and scale as I managed some good results for both cases but after tuning the algorithm for particular cases. I thibnk it should be possible to tune it generally but parameter 3 is very sensitive and depends on the scale of the reference image. I have to dig more. – Jav_Rock Dec 19 '12 at 15:39

2 Answers2

2

FREAK is not rotation / scale invariant per se. It was trained on AGAST keypoints (which is the small name of BRISK's paper keypoint descriptor), using AGAST-provided rotation and scale. Hence, you need to use this detector if you want to be in the best possible conditions for scale / rotation invariance.

sansuiso
  • 9,259
  • 1
  • 40
  • 58
0

Agree with sansuiso. Just want to add that opencv allows you to use BRISK keypoint detection. Get the keypoints and run the FREAK around those keypoints.