在Vlfeat中筛选实现

时间:2014-11-01 11:17:09

标签: sift vlfeat

我正在使用Vlfeat.org的Sift实现。它具有以下功能,可以将功能保存到文件中。

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

这里的行" os.system(cmmd)"应该将结果写在文件中吗?

我在ubuntu机器上,如果我执行" sift"作为终端中的命令,我得到的结果为"未找到"。在linux上,这个命令试图调用哪个进程?我需要将这些Sift功能保存到一个文件中,以便稍后我可以使用它来创建用于聚类的Bag of Words描述符。

https://github.com/jesolem/PCV/blob/master/PCV/localdescriptors/sift.py处的类似筛选实现也使用相同的行将结果保存到文件中。

1 个答案:

答案 0 :(得分:0)

  

在linux上,这个命令试图调用哪个进程?

这是指vlfeat提供的命令行工具(请参阅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
...

您可以使用vlfeat download page中的二进制分发(请参阅bin/glnxa64/sift for Linux 64-bit),或直接克隆repo并从源代码编译。

请务必使用cmmd = str("/path/to/sift " ...)调整路径,或在/usr/local/bin等常用路径下安装(=复制)。