vlfeat python

安装方法1:

pip install pyvlfeat

widows安装报错

安装方法2:

也可以官方下载:

https://www.vlfeat.org/

VLFeat工具包: 官方下载链接,如果打开速度较慢的话,也可以使用我上传的这个CSDN下载链接。VLFeat 工具包中含有大量的完整的代码实现,如下图。

1.下载VLFeat 工具包并解压。

按照下图的路径一次打开,显然我们将要使用的就是 win32/win64根据你自己的系统选择。我是windows7 64位操作系统,自然选择 win64这个文件夹。
这里写图片描述

2.调用VLFeat。(方法二,较为简单,我采用了方法二)

方法一:把 VLFaet 添加到环境变量中。
方法二:把Win64文件夹直接复制到自己的Python工程项目中。我在项目中新建了一个名为VLFeat的文件夹,将复制的win64文件家直接粘贴在这个新建的文件中

主要参考资料为由朱文涛和袁勇翻译的《python 计算机视觉》原书为《ProgrammingComputer Vision with Python》,该书主要内容包括Harris和sift的特征检测、图像到图像的映射、图像聚类、基于BoW的图像检索等。译本作者提供了全书实现的python代码,电子书及代码可在译者袁勇的个人主页中获取,也可由以下百度网盘获取:

链接:https://pan.baidu.com/s/1S2f1nbE6yMkEN6csH2-q1Q 密码:ishr

sift特征检测:

https://blog.csdn.net/wangxinsheng0901/article/details/79676081

https://github.com/ShawnWXS/SIFT-Python/blob/master/sift.py

其实是调sift.exe

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
from PIL import Image
from numpy import *
from pylab import *
import os

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')  #.convert('L') 将RGB图像转为灰度模式,灰度值范围[0,255]
        im.save('tmp.pgm')                       #将灰度值图像信息保存在.pgm文件中
        imagename = 'tmp.pgm'
   
    cmmd = str(r"D:\360安全浏览器下载\vlfeat-0.9.21-bin\vlfeat-0.9.21\bin\win64\sift.exe "+imagename+" --output="+resultname+
                " "+params)
    os.system(cmmd)                              #执行sift可执行程序,生成resultname(test.sift)文件
    print('processed', imagename, 'to', resultname)


def read_features_from_file(filename):
    """ Read feature properties and return in matrix form. """
   
    f = loadtxt(filename)
    return f[:,:4],f[:,4:] # feature locations, descriptors


def plot_features(im,locs,circle=True):
    """ Show image with features. input: im (image as array),
        locs (row, col, scale, orientation of each feature). """

    def draw_circle(c,r):
        t = arange(0,1.01,.01)*2*pi
        x = r*cos(t) + c[0]
        y = r*sin(t) + c[1]
        plot(x,y,'b',linewidth=2)

    imshow(im)
    if circle:
        for p in locs:
            draw_circle(p[:2],p[2])
    else:
        plot(locs[:,0],locs[:,1],'ob')
    axis('off')

 

if __name__ == '__main__':
    imname = (r'D:\\tz1.jpg')               #待处理图像路径
    im=Image.open(imname)
    process_image(imname,'test.sift')
    l1,d1 = read_features_from_file('test.sift')           #l1为兴趣点坐标、尺度和方位角度 l2是对应描述符的128 维向
    figure()
    gray()
    plot_features(im,l1,circle = True)
    title('sift-features')
    show()