Search code examples
siftvlfeat

Sift Implementation in Vlfeat


I am using the Sift implementation by Vlfeat.org. It has the follwing function which is supposed to save the features to a file.

def process_image(imagename,resultname,params="--edge-thresh 10 --peak-thresh 5"):
""" process an image and save the results in a file"""

if imagename[-3:] != 'pgm':
    #create a pgm file
    im = Image.open(imagename).convert('L')
    im.save('tmp.pgm')
    imagename = 'tmp.pgm'

cmmd = str("sift "+imagename+" --output="+resultname+
            " "+params)
os.system(cmmd)
print 'processed', imagename, 'to', resultname

Here how the line "os.system(cmmd)" is supposed to write the results in a file?

I am on an ubuntu machine and if I execute "sift" as command in terminal, I am getting the result as "not found". On linux, which process is this command trying to invoke? I need to save these Sift features into a file so that later I can use it to create Bag of Words descriptor for clustering.

A similar sift implementation at https://github.com/jesolem/PCV/blob/master/PCV/localdescriptors/sift.py also uses the same line to save the result into file.


Solution

  • On linux, which process is this command trying to invoke?

    This refers to the command-line tool provided by vlfeat (see vlfeat/src/sift.c):

    $ ./sift
    Usage: ./sift [options] files ...
    
    Options include:
     --verbose -v    Be verbose
     --help -h       Print this help message
     --output -o     Specify output file
    ...
    

    You can either use the binary distribution from vlfeat download page (see bin/glnxa64/sift for Linux 64-bit), or directly clone the repo and compile it from sources.

    Make sure to adjust the path with cmmd = str("/path/to/sift " ...) or install (= copy it) under a common path like /usr/local/bin.