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

一般来说,图像匹配的重要的两个步骤就是寻找兴趣点和确定描述子信息。

以下是通过Harris角点检测的方法来检测兴趣点

  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角点检测方法得到的结果

转载于:https://www.cnblogs.com/tangweijqxx/p/8520962.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值