python中Harris角点检测
- 更新时间:2021-06-15 13:47:08
- 编辑:惠婧文
给寻找编程代码教程的朋友们精选了相关的编程文章,网友瞿乐游根据主题投稿了本篇教程内容,涉及到python、Harris相关内容,已被194网友关注,内容中涉及的知识点可以在下方直接下载获取。
参考资料
- Python游戏编程入门 PDF 电子书 / 41.6 MB / 李强 推荐度:
- Python网络爬虫从入门到实践 PDF 电子书 / 154.1 MB / 唐松/陈智铨 推荐度:
- Python机器学习算法 PDF 电子书 / 30.1 MB / 赵志勇 推荐度:
- Python渗透测试编程技术:方法与实践 PDF 电子书 / 167.2 MB / 李华峰 推荐度:
- Python Web开发实战 PDF 电子书 / 72.7 MB / 董伟明 推荐度:
正文内容
码农之家最近发表了一篇名为《python中Harris角点检测》的py文章,好东西应该跟大家分享,把代码经过测试发布到这里,为了大家阅读方便。
1、基本思想
选择在图像上任意方向的固定窗口进行滑动,如果灰度变化较大,则认为该窗口内部存在角点。
2、步骤
读图并将其转换为灰度图。
估计响应函数。
根据响应值选择角度。
画出原始图上的检测角点。
3、实例
from pylab import * from numpy import * from scipy.ndimage import filters def compute_harris_response(im,sigma=3): """ Compute the Harris corner detector response function for each pixel in a graylevel image. """ # derivatives imx = zeros(im.shape) filters.gaussian_filter(im, (sigma,sigma), (0,1), imx) imy = zeros(im.shape) filters.gaussian_filter(im, (sigma,sigma), (1,0), imy) # compute components of the Harris matrix Wxx = filters.gaussian_filter(imx*imx,sigma) Wxy = filters.gaussian_filter(imx*imy,sigma) Wyy = filters.gaussian_filter(imy*imy,sigma) # determinant and trace Wdet = Wxx*Wyy - Wxy**2 Wtr = Wxx + Wyy return Wdet / Wtr def get_harris_points(harrisim,min_dist=10,threshold=0.1): """ Return corners from a Harris response image min_dist is the minimum number of pixels separating corners and image boundary. """ # find top corner candidates above a threshold corner_threshold = harrisim.max() * threshold harrisim_t = (harrisim > corner_threshold) * 1 # get coordinates of candidates coords = array(harrisim_t.nonzero()).T # ...and their values candidate_values = [harrisim[c[0],c[1]] for c in coords] # sort candidates (reverse to get descending order) index = argsort(candidate_values)[::-1] # store allowed point locations in array allowed_locations = zeros(harrisim.shape) allowed_locations[min_dist:-min_dist,min_dist:-min_dist] = 1 # select the best points taking min_distance into account filtered_coords = [] for i in index: if allowed_locations[coords[i,0],coords[i,1]] == 1: filtered_coords.append(coords[i]) allowed_locations[(coords[i,0]-min_dist):(coords[i,0]+min_dist), (coords[i,1]-min_dist):(coords[i,1]+min_dist)] = 0 return filtered_coords def plot_harris_points(image,filtered_coords): """ Plots corners found in image. """ figure() gray() imshow(image) plot([p[1] for p in filtered_coords], [p[0] for p in filtered_coords],'*') axis('off') show()
from PIL import Image from numpy import * # 这就是为啥上述要新建一个的原因,因为现在就可以import import Harris_Detector from pylab import * from scipy.ndimage import filters # filename im = array(Image.open(r" ").convert('L')) harrisim=Harris_Detector.compute_harris_response(im) filtered_coords=Harris_Detector.get_harris_points(harrisim) Harris_Detector.plot_harris_points(im,filtered_coords)
以上就是python中Harris角点检测的方法,希望对大家有所帮助。更多Python学习指路:python基础教程
相关教程
-
python爬虫多少线程合适
在Python爬虫中使用多线程可以很好的提高爬虫的效率,但是线程并不是越多越好,需要根据实际情况确定线程的数量。
发布时间:2019-06-26
-
Python定义一个跨越多行的字符串的多种方法小结
今天小编就为大家分享一篇Python定义一个跨越多行的字符串的多种方法小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
发布时间:2019-06-03