python培训之Harris角点检测

发布时间:2023-02-08 09:39:38 人气:40 作者:多测师

  python中Harris角点检测

  基本思想

  1、选择在图像上任意方向的固定窗口进行滑动,如果灰度变化较大,则认为该窗口内部存在角点。

  2、步骤,读图并将其转换为灰度图。估计响应函数。根据响应值选择角度。画出原始图上的检测角点。

  实例

  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

python培训之Harris角点检测

  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学习指路:请关注多测师。https://www.e70w.com/xwzx/




返回列表
在线客服
联系方式

热线电话

17727591462

上班时间

周一到周五

二维码
线