• 技术文章 >Python技术 >Python基础教程

    python中Harris角点检测

    小妮浅浅小妮浅浅2021-08-28 09:21:54原创3618

    基本思想

    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
    上一篇:python使用send启动生成器 下一篇:python字典键的两个特性

    相关文章推荐

    • python join()合并DataFrame的操作• python concat方法的作用• python Unittest的组成• python中单向通信TCP服务器的搭建• python中客户端通信的实现流程• python列表元素的获取和查看• python列表清除元素的四种方式• python元组有哪些获取元素的方法• python字符的获取方式• python处理字符串的常见方法• python字符串的多行输出

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网