1. Summary
  2. Files
  3. Support
  4. Report Spam
  5. Create account
  6. Log in

Main Page

From parallelsurf

Jump to: navigation, search
Speed gain on Intel Xeon 3.0GHz 8-core CPU

Parallel SURF is an implementation of the Speeded Up Robust Features (SURF) algorithm for the fast extraction of scale- and rotation-invariant features from grey scale images. It closely reproduces the results obtained by the original SURF implementation, yet uses multithreading to speed up computation on multi-core machines1.

To receive updates on new releases and to discuss related issues, subscribe to the mailing list.

Download the latest release of Parallel SURF here.


How to install / use

Download the latest release

You can download the latest release in the files section. The archive contains the source files and a simple usage example. Use your favourite C++ environment to compile them.

The example provided with the library contains a project file for cmake, but should be easy to compile using other environments, e.g. Visual Studio.

Accessing the project repository

To check out the latest version from the Subversion (SVN) repository, use the following command:

svn co https://parallelsurf.svn.sourceforge.net/svnroot/parallelsurf/trunk parallelsurf

Parallel SURF uses OpenMP for multithreading, which your compiler has to support. This is true for most common compilers (e.g. GCC, Visual C++).

Compiling the example using cmake

If you are working on a linux system, open a shell in the main directory which contains CMakeLists.txt. Then type:

mkdir build
cd build
cmake ../

This will create a directory named 'build', which contains the executable of the example program.

Finally, to run the example program, type


To test if everything is working correctly, type

make test


Parallel SURF is maintained by David Gossow.

It is based on the SURF implementation included in Pan-o-matic, written by Anael Orlinski.

The example program contains code written by Detlev Dröge, Frank Schmitt and Eran Sadeh-Or.

Version history

0.96 (1 Dec 2010)

  • Switched to OpenMP instead of Boost Threads.
  • Added cmake unit test integration.
  • Added unit test that checks for correct keypoint localizations, orientations and descriptors compared to Pan-o-matic implementation.

0.95 (12 Aug 2010)

  • Major bugfix: Fixed descriptor normalization, which did not work in version 0.91 to 0.94.

0.94 (14 May 2010)

  • Fixed broken orientation assignment of version 0.93.

0.93 (01 Apr 2010)

  • Fixed bug in detector which lead to an infinite loop on small image sizes.

0.92 (21 Mar 2010)

  • Fixed bug in detector which could lead to randomly localized keypoints.

0.91 (21 Mar 2010)

  • Added usage example.
  • Fixed bug in detector which could lead to randomly localized keypoints.
  • 3-fold speed increase in orientation assignment by using vector represenation of orientation histogram instead of multimap.
  • Changed KeyPoint class to use vector<double> instead of double*.
  • KeyPointDetector now takes input image as constructor argument.

0.9 (04 Mar 2010)

  • Ported SURF from Pan-o-matic.
  • Added multithreading support.


1. Gossow, David; Paulus, Dietrich; Decker, Peter (2010): An Evaluation of Open Source SURF Implementations. In: RoboCup 2010: Robot Soccer World Cup XIV. [[Media:Media:Example.ogg]]

Personal tools