Documentation>Man pages>sift




sift − Scale Invariant Feature Transform


sift [options] FILE ...


−v, −−verbose

Increase verbosity level (may be repeated).

−h, −−help

Show options and version.


Enable/specify seeds output.


Enable/specify frames output.


Enable/specify descriptors output.


Enable/specify the Gaussian Scale Space (GSS) output.


Enable/specify meta output.


Specifiy the index of the first octave of the GSS.


Specify the edge threshold.


Specify the peak threshold.


Enable/specify reading the frames from a file. −−orientations Force the computation of the frame orientations.


sift computes the Scale Invariant Feature Transform (SIFT). sift reads an image file (in PGM format), computes the SIFT frames and their descriptors and write them to a file. Alternatively, --frames option can be used to suppress the standard output and produce a file with the feature frames only. Similarly, --descriptors suppresses the standard output and produce a file of descriptors only. --output can be used in combination with the previous too if the combined output of frames and descriptors is required.

The --read-frames option bypasses the SIFT detector and reads the frames from the specified file. This option can be used iin combination with --orientations to read the frames but calculate their orientations anyway. Both option do not change how the frames and the descriptors are written to disk. Notice that if --orientations is used, the number of frames may change if multiple orientations are detected).

A frame is an oriented ellipse (also called affine frame) and is specified by 6 floating point numbers (in order: coordinate of the center x and y, and elements A11, A21, A21, A22 of the matrix mapping the unit circle to the ellipse). A feature descriptor is an histogram. It is specifyied by 128 non-negative integer numbers.

sift can process multiple images and derive the names of the various output files by means of FILESPEC (see vlfeat(7)). Both frames and descriptors can be saved/loaded either in ascii or binary format.
Ascii format

Each descriptor is a list of 128 decimal numbers and occupies a line of text. Each frame is a list of 5 numbers, specifying an elliptical frame, one per line of text. The combined output file (with both frames and descriptors) stores a frame and the corresponding descriptor for each line of text.

Binary format

The binary format is similar to the ASCII format, except that each frame element is stored as an IEEE double floating point number (eight bytes) and each descriptor element is stored as an unsiged integer (one byte). The data is written in little endian order.


sift test.pgm --peak-thresh=0.03

Caluclates the SIFT frames and descriptors of image /tmp/myimage.pgm with peak threshold equal to 0.03 and save them back to test.sift in ascii format.

sift test.pgm --frames

Writes the frames to test.frame in ascii format and does not compute the descriptors.

sift test.pgm --descriptors=bin://

writes only the frames to test.descr. in binary format.

sift test.pgm −−frames=my.frames -o bin:///tmp/%.sift

writes the frames in ascii format to my.frames and the combined frames-descriptors file in binary format to /tmp/test.sift.

sift test1.pgm test2.pgm −−read-frames=bin:/tmp/%.key

reads the frames of images test1.pgm and test2.pgm from the binary files /tmp/test1.key and /tmp/test2.key and writes the frames and their descriptors to the files test1.sift and test2.sift respectively.



D. G. Lowe. Distinctive image features from scale-invariant keypoints. IJCV, 2(60):91-110, 2004.