Ask Your Question

FREAK compute() speed up

asked 2013-02-06 08:56:14 -0600

jav_rock gravatar image

Is it possible to reduce FREAK extraction time below 70ms?

I am using FAST in pyramids for detection and it takes 1ms to detect. FREAK extraction never takes less than 70 ms. I tried to reduce points passed to the algorithm but never gets below that time, so it is not point-dependent. I am just doing one

extractor = new FREAK();

and then call the method, so it is not a constructor problem I guess. Maybe is something that FREAK does always when you call compute and it is slowing down all the process.

Is there any way of calling the extractor in a static way, like with FAST?

edit retag flag offensive close merge delete

1 answer

Sort by ยป oldest newest most voted

answered 2013-02-09 07:48:11 -0600

sammy gravatar image

I have profiled it on Windows (with Visual Studio profiler), and here are some results:

Even at first sight, it is clear that the algorithm is highly optimized - most time is spent waiting for memory reads.

Some parts of it are optimzed with SSE, others will not get that much by SSE.

What you can do to improve it:

  • declare the FREAK pattern static - you won't build it each time - you get 3% increase. Easy.
  • parallelize keypoint finding (you will parallelize the 40% time spent in meanIntensity) It should be easy to do it
  • try to find an algorithm for parallel integral image (not sure there is possible on generic architectures) - you will parallelize up to 32% of the computations.
  • Find a faster algorithm for FREAK, or ways to more easily discard false key-points, to minimize calculations. It is probably the most rewarding and the most complex approach. Keep us in touch if you find something useful here!
  • Write your own, faster, key-point extraction. It seems that everyone writes an extractor these days - ORB, FAST, SURF, SIFT, ASIFT, and many others. Just find one more :)

image description image description image description image description

edit flag offensive delete link more


Nice!, thanks, many good ideas, lets see what can I do.

jav_rock gravatar imagejav_rock ( 2013-03-12 03:37:51 -0600 )edit

And could also be that every time I call freak-> compute(image, keyp, desc); internally buildpattern() is called? Is it possible to use the same pattern always if the image size doesn't varies, I guess. Maybe by modifying that...

jav_rock gravatar imagejav_rock ( 2013-03-12 04:33:44 -0600 )edit

Question Tools

1 follower


Asked: 2013-02-06 08:56:14 -0600

Seen: 922 times

Last updated: Feb 09 '13