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

    python中Harris角点检测

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

    基本思想

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

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

    实例

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    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()

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    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学习网