VLFeat

介绍

VLFeat开源库实现了流行的计算机视觉算法,这些算法专门用于图像理解以及局部特征提取和匹配。 算法包括费舍尔向量,VLAD,SIFT,MSER,k均值,分层k均值,聚集信息瓶颈,SLIC超像素,快速移位超像素,大规模SVM训练等。 它是用C编写的,以提高效率和兼容性,并在MATLAB中提供了易于使用的接口,并在全文中提供了详细的文档。 它支持Windows,Mac OS X和Linux。

下载

VLFeat0.9.20,官方下载链接下载www.vlfeat.org.

PCV

介绍

PCV是基于Jan Erik Solem的《用Python编程计算机视觉》一书的纯Python计算机视觉库。
需要有Python 2.6+(最好是py2的版本)

下载

官方下载链接下载https://github.com/jesolem/PCV.

配置到python库中

将下载的文件压缩包进行解压。
打开cmd或者是Anaconda的命令行,执行如下指令:
(1)执行cd命令,转到你所解压到的PCV的文件夹中。
(2)输入python setup.py install。
(3)重启命令行,输入import PCV,如果没有报错,则说明PCV库安装成功。
(Note:也可以先不配置到python库中,直接跳过)

可能出现的问题

点击sift.exe文件运行
在这里插入图片描述
此时我的电脑报出由于找不到VCOMP100DLL,无法继续执行代码。重新安装程序可能会解决此问题
那么就可以下载对应的dll文件:
下载链接https://cn.dllfiles.com/vcomp100.dll.html
64位系统对应64位,下载后放入C:\Windows\SysWOW64和C:\Windows\System32

配置项目

移动PCV

直接将解压之后pcv-master里的PCV移动到自己的pycharm项目下。
例如:
在这里插入图片描述
在这里插入图片描述

更改.\PCV\localdescriptors\sift.py

将.\PCV\localdescriptors\sift.py中变量cmmd进行更改。如下图所示,sift.exe后面有一个空格

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("E:\\vlfeat-0.9.20\\bin\\win64\\sift.exe "+imagename+" --output="+resultname+
                " "+params)
    os.system(cmmd)
    print 'processed', imagename, 'to', resultname

测试

数据

在这里插入图片描述
在这里插入图片描述

现在项目下建立如下文件夹之后开始运行代码:
在这里插入图片描述

运行代码

# -*- coding: utf-8 -*-
from PIL import Image
from pylab import *
import sys
from PCV.localdescriptors import sift

if len(sys.argv) >= 3:
    im1f, im2f = sys.argv[1], sys.argv[2]
else:
    im1f = 'a.jpg'
    im2f = 'b.jpg'

im1 = array(Image.open(im1f))
im2 = array(Image.open(im2f))

sift.process_image(im1f, 'out_sift_9.txt')
l1, d1 = sift.read_features_from_file('out_sift_9.txt')
figure()
gray()
subplot(121)
sift.plot_features(im1, l1, circle=False)

sift.process_image(im2f, 'out_sift_10.txt')
l2, d2 = sift.read_features_from_file('out_sift_10.txt')
subplot(122)
sift.plot_features(im2, l2, circle=False)

matches = sift.match_twosided(d1, d2)
print('{} matches'.format(len(matches.nonzero()[0])))


figure()
gray()
sift.plot_matches(im1, im2, l1, l2, matches, show_below=True)
show()

运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐