CUDA SURF - A real-time implementation for SURF

Andre Schulz, Florian Jung, Sebastian Hartte, Daniel Trick,
Christian Wojek, Konrad Schindler, Jens Ackermann, Michael Goesele


Keypoint detection and matching is a basic computer vision task and a necessary ingredient for several applications, e.g., object recognition, structure from motion, panorama stitching. In this work we implement the popular SURF descriptor, an approximation of SIFT, on commodity graphics hardware and achieve real-time performance even for HD images.


2013/08/08                                Code release version 1.2.1:

                                                       - Fixed constant memory initialization for CUDA 5

2010/08/02                                Changed FindOpenCV.cmake script, lowered required compute capability to 1.2, added __inline__

                                                       keyword, released code as version 1.0.1

2011/02/04                                Fixed a memory leak for the integral image. Thanks to Marijn van Vliet for pointing this out!

                                                       Released code as version 1.0.2

2011/02/24                                Various bugfixes in version 1.0.3:

                                                        - Update FindCUDA
                                                        - Modify CUDPP search code for CUDA 3.2
                                                        - Add -D_DEBUG to Debug builds to prevent delayed CUDA errors
                                                       - Include cv.h instead of cxtypes.h for compability with OpenCV 2.2

2011/03/18                                Code release version 1.0.4:

                                                       -Compatibility bugfix for the Fermi GPU architecture

2011/04/26                                Code release version 1.1.0:

                                                        - Added support for compute capability 1.1

                                                        - Fixed a bug to handle images without keypoints

2011/04/27                                 Code release version 1.1.1:

                                                        - Added GPU support for 24-bit RGB images

2012/03/13                                Code release version1.1.2 and 1.2.0:

                                                        - We are releasing two versions at this time to support both CUDPP-1.x and CUDPP-2.x

                                                    Highlights for version 1.1.2:
                                                       - Fix crash when number of octaves is too large for given image (Thanks to Andreas Opitz for

                                                       - Fix computing interest points close to right and bottom borders (Thanks to Andreas Opitz for

                                                       - Removed CUDA SDK dependency                                                    

                                                       - Works with CUDPP-1.x

                                                    Highlights for version 1.2.0:

                                                      - Dropped support for CUDPP-1.x
                                                      - Support added for CUDPP-2.0


Please download the CUDA SURF source code from the links provided in the changelog. Please note that we release this code under the GPLv3 license. The license is contained within the package. To compile the above code you will need to fulfill the following software dependencies:


-CMake 2.6.4 or later, CMake 2.8.2 is recommended
-CUDA Toolkit 2.2 or later
-corresponding CUDA SDK version
-OpenCV 2.0.0 or later

To build CUDA SURF run:


$ ccmake. (specify your paths to the CUDA SDK and CUDA Toolkit directories, the build type and generate the Makefile)                                                                                                                                                                                     $ make                                                  

For further notes please see the README file. Once you successfully compiled CUDA SURF run the demo program to compute some interest points::

$ ./surf


See main.cpp on how to use the CUDA SURF classes. The interface has been inspired by Chris Evan's OpenSURF library and is thus similar to use.


CUDA SURF has successfully been tested on:
- Debian Linux 64bit, CMake 2.8.2, CUDA+SDK 2.2, OpenCV 2.0.0
- Windows XP 32bit, CMake 2.8.1 (NMake generator), CUDA+SDK 2.2, OpenCV 2.0.0
For further questions please contact Andre Schulz.