Harris特征匹配和SIFT特征匹配处理

1、比较Harris角点和SIFT特征的不同

Harris特征匹配和SIFT特征匹配处理_第1张图片
对一幅图像提取SIFT特征,可以看到,两个算法所选择的特征点的位置不同。

2、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("../data/crans_1_small.jpg").convert("L"))
#im2= array(Image.open("../data/crans_2_small.jpg").convert("L"))

# Figure 2-2下面的图
im1 = array(Image.open("D:/picture/07.jpg").convert("L"))
im2 = array(Image.open("D:/picture/08.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 = 5
harrisim = harris.compute_harris_response(im1, 5)
filtered_coords1 = harris.get_harris_points(harrisim, wid+1)
d1 = harris.get_descriptors(im1, filtered_coords1, wid)

harrisim = harris.compute_harris_response(im2, 5)
filtered_coords2 = harris.get_harris_points(harrisim, wid+1)
d2 = harris.get_descriptors(im2, filtered_coords2, wid)

print ('starting matching')
matches = harris.match_twosided(d1, d2)

figure()
gray() 
harris.plot_matches(im1, im2, filtered_coords1, filtered_coords2, matches)
show()


出现了如下的报错:
在这里插入图片描述
出错原因是因为参数是要求为整数,所以将/改成//就可以了。
如图:
在这里插入图片描述
结果是这个样子的:
Harris特征匹配和SIFT特征匹配处理_第2张图片
可以看到匹配出现了很多的错误,虽然在建筑物上面的特征点有正确匹配到,但是旁边的树成了很大的干扰因素。

3、SIFT特征匹配

SIFT匹配结果是这样的:
Harris特征匹配和SIFT特征匹配处理_第3张图片
结果的match为什么只有两条连接呢,我觉得可能是使用对称匹配条件,去除了不正确的匹配,反而把好的匹配也去除掉了。
所以我将match_twosided()函数改成了match()函数,运行结果如下图:
Harris特征匹配和SIFT特征匹配处理_第4张图片

你可能感兴趣的:(Harris特征匹配和SIFT特征匹配处理)