图像局部描述符
本文工作
Harris
- 角点检测
- 在图像间寻找对应点
SIFT
- 检测关键点
- 描述子匹配
- 地理标记图像匹配
工具包的安装
- vlfeat
- Graphviz
- pydot
检测感兴趣点
对比Harris和SIFT,将Harris角点检测的显示在了图像的最后,这两种算法选择了不同的坐标。
# -*- coding: utf-8 -*-
from PIL import Image
from pylab import *
from PCV.localdescriptors import sift
from PCV.localdescriptors import harris
# 添加中文字体支持
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=14)
imname = 'E:\\study_work\\python\\images\\school4.jpg'
im = array(Image.open(imname).convert('L'))
sift.process_image(imname, 'school.sift')
l1, d1 = sift.read_features_from_file('school.sift')
figure()
gray()
subplot(131)
sift.plot_features(im, l1, circle=False)
title(u'SIFT特征',fontproperties=font)
subplot(132)
sift.plot_features(im, l1, circle=True)
title(u'用圆圈表示SIFT特征尺度',fontproperties=font)
# 检测harris角点
harrisim = harris.compute_harris_response(im)
subplot(133)
filtered_coords = harris.get_harris_points(harrisim, 6, 0.1)
imshow(im)
plot([p[1] for p in filtered_coords], [p[0] for p in filtered_coords], '*')
axis('off')
title(u'Harris角点',fontproperties=font)
show()
描述子匹配
Harris
Harris角点检测器可以给出图像中检测到兴趣点,但它并没有提供在图像间对兴趣点进行比较的方法,我们需要在每个角点添加描述子,以及对这些描述子进行比较。
# -*- coding: utf-8 -*-
from pylab import *
from PIL import Image
from PCV.localdescriptors import harris
from PCV.tools.imtools import imresize
"""
This is the Harris point matching example in Figure 2-2.
"""
# Figure 2-2下面的图
im1 = array(Image.open("E:\\study_work\\python\\images\\school11.jpg").convert("L"))
im2 = array(Image.open("E:\\study_work\\python\\images\\school12.jpg").convert("L"))
# resize加快匹配速度
im1 = imresize(im1, (im1.shape[1]/2, im1.shape[0]/2))
im2 = imresize(im2, (im2.shape[1]/2, im2.shape[0]/2))
wid =