libsift - Scale-Invariant Feature Transform implementation

by Sebastian Nowozin (nowozin@cs.tu-berlin.de)

Introduction

This page is about a reusable computer program that can help in locating and using useful data about an image. Given the image, the program can identify interesting points on the image ("features") and provide a signature for each such point. The signature can be saved to a file in a compact format. Later, this signatures can be compared against signatures from other images and questions such as "Is a similar object present in both images?" can be answered.

This software is unusable on its own, and gives only a foundation upon which full programs can be build. One such program is my autopano-sift program, which can help in creating a single large image from many overlapping images.

Introduction for computer scientists

This library is a 100% C# implementation of the SIFT algorithm ("Scale-Invariant Feature Transform") and additional matching algorithms. The SIFT algorithm is an image feature location and extraction algorithm which provides the following key advantages over similar algorithms: SIFT is an invention of David Lowe, and the mathematical details are described in the following papers:

Implementation

Requirements
Patent warning: The University of British Columbia has applied for a patent on the SIFT algorithm in the United States. Commercial applications of this software may require a license from the University of British Columbia.

Download
Old versions

License

Please read and acknowledge the license (GNU GPL) before running the software.

Donations

Developing libsift and the related autopano-sift software has required a considerable amount of time and effort. If you want to support further development, or if the library or program has been helpful to you, please consider making a small donation. Thanks!

Changes

VersionChanges
1.8-1.3 For the changelog, please see the autopano-sift page, thanks.
1.2 Fixes against the Gtk# library and Mono 1.0.
Fix compatibility with the Microsoft .NET SDK compiler (csc).
1.1 Add a lot of support code to assist the autopano-sift package, such as RANSAC and a 2d image model. See the project page of autopano-sift for a detailed list of changes.
1.0a Minor bugfix in MatchKeys functionality (null ref exception when no event handler had been registered.)
1.0 Initial release as separate library. The following changes are relative to autopano-sift-1.1.

Add DoG peak threshhold.
Add optional transparent gzip compression input/output to keypoint files.
Change to use 0-255 byte descriptors instead of double.
Improve default threshhold values.
Improve matching code by replacing FPU intense code by integer code (150-200% as fast).
Fix to use 3x3 Hessian instead of 2x2 to locate keypoints on subspace dimension.
Fix to check for DoG peak value.
Fix various smaller bugs.

Documentation and Usage

See the included README file. Except for inline comments there is no documentation yet. See the autopano-sift program and the included examples to understand the usage.

Feedback

I am curious about developer- and mathematicans feedback, so please mail me your thoughts to nowozin@cs.tu-berlin.de.

last update: Mon, 31 Oct 2005