Python计算机视觉编程练习1:Python 调用 SIFT
Python 调用 VLFeat 接口最近,一直在抽空学习 Python计算机视觉编程,因为目前还没有一本较为完整且适合初学者来使用的Python计算机视觉教程,所以前前后后遇到了不少的问题,每次遇到调试代码出错,甚是头疼,完全找不到解决的思路,有时候耗费了我很多的精力和时间。暂时打算以系列博文来记录一下我学习中遇到的一些问题,方便后来人。说明:Matlab,VS 调用VLFeat 就不用参
Python 调用 VLFeat 接口
最近,一直在抽空学习 Python计算机视觉编程,因为目前还没有一本较为完整且适合初学者来使用的 Python计算机视觉教程,所以前前后后遇到了不少的问题,每次遇到调试代码出错,甚是头疼,完全找不到解决的思路,有时候耗费了我很多的精力和时间。暂时打算以系列博文来记录一下我学习中遇到的一些问题,方便后来人。
#####说明:Matlab,VS 调用VLFeat 就不用参考本文了,VLFeat 工具包中 readme 和官网上有详细教程。本文针对官网上没有提到的 Python 调用VLFeat 情况。
VLFeat 以及 SIFT 相关资源
实现平台:Win64 + Pycharm/anaconda ( 同时我也安装了 anaconda ,因为它自带了很完整的库,无需自己去费时费力的去安装)
VLFeat工具包: 官方下载链接,如果打开速度较慢的话,也可以使用我上传的这个CSDN下载链接。VLFeat 工具包中含有大量的完整的代码实现,如下图。
SIFT:这个就不得不提到大牛 Lowe 了。因为接下来实现的就是调用他写的 SIFT demo。提上链接,供大家参详,SIFT主页。本文使用 的 是VLFeat 工具包(内含SIFT),所以这个你不用下载。当然你如果不想使用VLFeat工具包,直接使用这个也行,链接奉上CSDN下载链接。
开始正题
###**1.**下载VLFeat 工具包并解压。
按照下图的路径一次打开,显然我们将要使用的就是 win32/win64根据你自己的系统选择。我是windows7 64位操作系统,自然选择 win64这个文件夹。
###**2.**调用VLFeat。(方法二,较为简单,我采用了方法二)
方法一:把 VLFaet 添加到环境变量中。
方法二:把Win64文件夹直接复制到自己的Python工程项目中。我在项目中新建了一个名为VLFeat的文件夹,将复制的win64文件家直接粘贴在这个新建的文件中。
###**3.**代码调整
主要使用到三个py文件,我已经上传了。使用说明:下载上面三个py文件,放在一起,用Pycharm 打开 test5_sift.py。
sift.py
test5_sift.py
harris.py harris角点检测就是顺带放在里面做对比玩的。。。你也可以不用,在 test5_sift.py 中,将对应的代码删掉就行了。
####test5_sift.py部分代码事例
#python
#!/usr/bin/env python
# -*- coding:utf-8 -*-
'Image process module'
from PIL import Image
from pylab import *
"""
我这边已经是按照自己的习惯,都已经改为包和文件了,如果你想使用本程序,请根据#号的提示,做相应的修改。我的sift.py 和 harris.py 均在PCV/localdescriptors/路径下,所以下面两句的 import 导入你都要修改。
"""
from PCV.localdescriptors import sift #这是我导入的方式,你的就改为 import sift
from PCV.localdescriptors import harris #这是我导入的方式,你的就改为 import harris
imname = ('/Python-PCV/Test/test.jpg') #路径替换为自己测试图片的路径
im = array(Image.open(imname).convert('L'))
sift.process_image(imname,'test.sift')
l1,d1 = sift.read_features_from_file('test.sift')
figure()
gray()
subplot(131)
"""
图1 :SIFT特征
"""
sift.plot_features(im,l1,circle = False)
title('sift-features')
subplot(132)
"""
图2 :使用圆圈表示特征尺度的SIFT特征
"""
sift.plot_features(im,l1,circle = True)
title('sift_features_det')
harrisim = harris.compute_harris_response(im)
filtered_coords = harris.get_harris_points(harrisim,6,0.1)
subplot(133)
"""
图3 :harris角点检测的结果
"""
imshow(im)
plot([p[1]for p in filtered_coords],[p[0] for p in filtered_coords])
axis('off')
title('harris')
show()
####sift.py部分代码事例
#python
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')
im.save('tmp.pgm')
imagename = 'tmp.pgm'
"""
下面cmmd中的"E:\Python-PCV\VLFeat\win64\sift.exe "路径修改为步骤2中的路径下的sift.exe。
务必注意,sift.exe后面还有一个空格不能丢!!!
"""
cmmd = str("E:\Python-PCV\VLFeat\win64\sift.exe "+imagename+" --output="+resultname+
" "+params)
os.system(cmmd)
print 'processed', imagename, 'to', resultname
###**4.**修改好了,那就跑一跑呗。
在pycharm打开的test5_sift.py中,使用快捷键:Shift+F10,运行代码。效果如下。
###****5.2016/11/09更新:针对 test.sift 不存在问题1
个别win 7 64位操作系统,使用win64下的sift,可能会出现查找不到test.sift。
其实很简单,做个简单的替换就行了,上面的使用VLFeat就是个简单例子,你也可以尝试Lowe大牛的sift.
解决方案:
(1)使用win32代替VLFeat/win64
cmmd = str("D:\PCV\VLFeat\win32\sift.exe "+imagename+" --output="+resultname+
" "+params)
(2)使用大牛 Lowe 的sift。原理一样的,解压、拷贝,然后在sift.py中修改路径
cmmd = str("D:\PCV\VLFeat\siftDemoV4\siftWin32.exe "+imagename+" --output="+resultname+
" "+params)
###****6.2019/03/19更新:针对 test.sift 不存在问题2
部分网友找不到win32。我贴个官方链接:下载以前的老版本:vlfeat-0.9.20-bin.tar.gz
http://www.vlfeat.org/download/
更多推荐
所有评论(0)