博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
计算机视觉——图像匹配(1)
阅读量:7242 次
发布时间:2019-06-29

本文共 2253 字,大约阅读时间需要 7 分钟。

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

以下是通过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

你可能感兴趣的文章
java学习------异常
查看>>
Android - Activity定制横屏(landscape)显示
查看>>
JavaScript提高:005:ASP.NET使用easyUI TABS标签显示问题
查看>>
ELK
查看>>
程序员们、PD们,你敢这样在家办公吗?
查看>>
shader 例子学习
查看>>
hive优化分享
查看>>
java中Action层、Service层和Dao层的功能区分
查看>>
命令模式
查看>>
HTML滚动字幕代码参数详解及Js间隔滚动代码
查看>>
android中DatePicker和TimePicker的使用
查看>>
ByteArrayXXXputStream、InputStream的read()方法
查看>>
J-LINK V8固件烧录指导
查看>>
F# 3.0新特性简介
查看>>
如何用VB6 创建 DCOM Client/Server Application
查看>>
C#获取打印机状态
查看>>
斜率优化DP
查看>>
Sql2005+:sp_MS_marksystemobject 数据库DB执行上下文
查看>>
运行命令大全
查看>>
Google管理员工具最新更新:强化的站点错误报告
查看>>