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

   

    

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基础教程

本文教程操作环境:windows7系统、Python 3.9.1,DELL G3电脑。

以上是 python中Harris角点检测 的全部内容, 来源链接: utcz.com/z/545042.html

回到顶部