A library by Claudio Fantacci, Alessandro Martini for the programming environment processing. Follow our project on Google Code. Last update, March, 14, 2010.

The task of finding correspondences between two images of the same scene or object is part of many computer vision applications. Camera calibration, 3D reconstruction, image registration, and ob ject recognition are just a few. The search for discrete image correspondences – the goal of SURF[1] – can be divided into three main steps:

1. First, interest points are selected at distinctive locations in the image, such as corners, blobs, and T-junctions. The most valuable property of an interest point detector is its repeatability, i.e. whether it reliably finds the same interest points under different viewing conditions.

2. Next, the neighbourhood of every interest point is represented by a feature vector. This descriptor has to be distinctive and, at the same time, robust to noise, detection errors, and geometric and photometric deformations.

3. Finally, the descriptor vectors are matched between different images. The matching is often based on a distance between the vectors, e.g. the Mahalanobis or Euclidean distance. The dimension of the descriptor has a direct impact on the time this takes, and a lower number of dimensions is therefore desirable. In out implementation, we use a 64-feature vector to represent the neighbourhood of every interest point.

This project provides an implementation of the method in the form of a library for the Processing programming environment. The library can be used without limitations from any Java program as well.

[1] Herbert Bay, Tinne Tuytelaars, and Luc Van Gool. Surf: Speeded-up robust features. In 9th European Conference on Computer Vision, Graz, Austria, 2006.

Keywords SURF, Interest points, descriptor, detector, computer vision, image analysis

Reference. Have a look at the javadoc reference here. a copy of the reference is included in the .zip as well.

Source. The source code of P-SURF is available at Google Code, and its repository can be browsed here.

Video examples. Some videos of our P-SURF application are available at here.


Platform MAC OSX 10.5.7
Processing 1.0.3
Dependencies no dependecies


Download P-SURF in .zip format.

A detailed paper concerning the library can be found in the download section of our repository.


Unzip and put the extracted SURF folder into the libraries folder of your processing sketches. Reference and examples are included in the SURF folder.


Find a list of examples in the current distribution of P-SURF, or have a look at them by following the links below.

Here you can see the full explanation of graphicExample: