Remark. This implementation is considered legacy code and is superseded by VLFeat.

SIFT++ is a lightweight C++ implementation of SIFT detector and descriptor (it is derived directly from the MATLAB/C implementation).

Usage

The binary distribution contains a single executable file sift for each architecture (for instance, glx/sift for GNU/Linux). Due to linkage issues with the C++ ABI the provided binary could not work; in this case it is recommended to compile your own version of the program.

This code does not provide any tool for visualizing or matching keypoint. For these, you can look here. See also the FAQ therein for useful informations and warnings.

The directory data/ contains a PGM image img3.pgm that we use to test the sift executable. The command

 > ./sift data/img3.pgm

produces an ASCII file data/img3.key with a list of keypoints and their descriptors. Each row has four floating point numbers representing x and y coordinates of the keypoint, its scale and its orientation (in radians) respectively. A list of 128 integers representing the SIFT descriptor follows.

The command line tool supports a few options. For example

 > ./sift --levels 4 --octaves 3 --first-octave 1 data/img3.pgm

uses a Gaussian scale space of 3 octaves, 4 levels per octave and starting with octave 1 (that is, the image is downsampled by one before applying the algorithm). The command

 > ./sift --save-gss data/img3.pgm

saves the Gaussian scale space as a sequence of PGM images. Use the option --verbose to see the progress of the algorithm. Use --help for a list of all options.

Copyright

This software program is Copyright © 2006 The Regents of the University of California and can be freely used for research purposes (see the included license file for details). Although this implementation is original (in particular, it is not derived from Lowe's implementation), the SIFT algorithm has been issued a patent. Thus you should note that:

This software embodies a method for which the following patent has been issued: "Method and apparatus for identifying scale invariant features in an image and use of same for locating an object in an image," David G. Lowe, US Patent 6,711,293 (March 23, 2004). Provisional application filed March 8, 1999. Asignee: The University of British Columbia.