计算机视觉——图像匹配(1)

通常来讲,图像匹配的重要的两个步骤就是寻找兴趣点和肯定描述子信息。数组

如下是经过Harris角点检测的方法来检测兴趣点app

 1 #Harris角点检测实现
 2 from scipy.ndimage import filters  3 import numpy as np  4 from matplotlib import pyplot as plt  5 def compute_harris_response(im,sigma=3):  6     """
 7  在一幅灰度图像中,对每个像素计算Harris角点检测器响应函数  8  :param im: 图像数组  9  :param sigma: 高斯滤波器的参数  10  :return: 商数指示器  11     """
 12 #计算x,y方向上的导数
 13     imx=np.zeros(im.shape)  14     filters.gaussian_filter(im,(sigma,sigma),(0,1),imx)  15     imy=np.zeros(im.shape)  16     filters.gaussian_filter(im,(sigma,sigma),(1,0),imy)  17 #计算Harris矩阵的份量
 18     wxx=filters.gaussian_filter(imx*imx,sigma)  19     wyy=filters.gaussian_filter(imy*imy,sigma)  20     wxy=filters.gaussian_filter(imx*imy,sigma)  21 #计算特征值和迹
 22     wdet=wxx*wyy-wxy**2
 23     wtr=wxx+wyy  24     return wdet/wtr  25 def get_harris_points(harrisim,min_dst=10,threshold=0.2):  26     """
 27 
 28  :param harrisim: 像素值为Harris响应函数值的图像  29  :param min_dst: 分割角点和图像的最小像素数目  30  :param threshold: 阀值  31  :return: 角点集合  32     """
 33 #寻找高于阀值的候选角点
 34     corner_threshold=harrisim.max()*threshold  35     #大于阀值的harris响应函数值被认为是可能的角点,并在harrism_t矩阵中相应的位置1,其他地方置0
 36     harrisim_t=(harrisim>corner_threshold)*1
 37 #获得候选角点的坐标
 38     coords=np.array(harrisim_t.nonzero()).T  39 
 40 #获得候选点的响应值
 41     candidate_values=[harrisim_t[c[0],c[1]] for c in coords]  42 #对候选点按照harris响应值进行排序
 43     index=np.argsort(candidate_values)  44 #将可行点的位置保存在数组allowed_locations中
 45     allowed_locations=np.zeros(harrisim.shape)  46     #为了确保××××步可以实现
 47     allowed_locations[min_dst:-min_dst,min_dst:-min_dst]=1
 48 #按照min_distance原则,选择最佳harris点
 49     filtered_coords=[]  50     for i in index:  51         if allowed_locations[coords[i,0],coords[i,1]]==1.0:  52  filtered_coords.append(coords[i])  53             allowed_locations[(coords[i][0]-min_dst):(coords[i][0]+min_dst),(coords[i][1]-min_dst):(coords[i][1]+min_dst)]=0  54     return filtered_coords  55 
 56 #绘制图像中检测到的角点
 57 def plot_harris_points(image,filterd_coords):  58  plt.figure()  59  plt.gray()  60  plt.imshow(image)  61     plt.plot([p[1] for p in filterd_coords],[p[0] for p in filterd_coords],'*')  62     plt.axis('off')  63  plt.show() 

下图为经过Harris角点检测方法获得的结果函数

相关文章
相关标签/搜索