gpt4 book ai didi

python 实现Harris角点检测算法

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章python 实现Harris角点检测算法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

算法流程:

  1. 将图像转换为灰度图像
  2. 利用Sobel滤波器求出 海森矩阵 (Hessian matrix) :

python 实现Harris角点检测算法

  • 将高斯滤波器分别作用于Ix²、Iy²、IxIy
  • 计算每个像素的 R= det(H) - k(trace(H))²。det(H)表示矩阵H的行列式,trace表示矩阵H的迹。通常k的取值范围为[0.04,0.16]。
  • 满足 R>=max(R) * th 的像素点即为角点。th常取0.1。

Harris算法实现:

?
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
 
 
# Harris corner detection
def Harris_corner(img):
 
     ## Grayscale
     def BGR2GRAY(img):
         gray = 0.2126 * img[..., 2 ] + 0.7152 * img[..., 1 ] + 0.0722 * img[..., 0 ]
         gray = gray.astype(np.uint8)
         return gray
 
     ## Sobel
     def Sobel_filtering(gray):
         # get shape
         H, W = gray.shape
 
         # sobel kernel
         sobely = np.array((( 1 , 2 , 1 ),
                         ( 0 , 0 , 0 ),
                         ( - 1 , - 2 , - 1 )), dtype = np.float32)
 
         sobelx = np.array((( 1 , 0 , - 1 ),
                         ( 2 , 0 , - 2 ),
                         ( 1 , 0 , - 1 )), dtype = np.float32)
 
         # padding
         tmp = np.pad(gray, ( 1 , 1 ), 'edge' )
 
         # prepare
         Ix = np.zeros_like(gray, dtype = np.float32)
         Iy = np.zeros_like(gray, dtype = np.float32)
 
         # get differential
         for y in range (H):
             for x in range (W):
                 Ix[y, x] = np.mean(tmp[y : y + 3 , x : x + 3 ] * sobelx)
                 Iy[y, x] = np.mean(tmp[y : y + 3 , x : x + 3 ] * sobely)
            
         Ix2 = Ix * * 2
         Iy2 = Iy * * 2
         Ixy = Ix * Iy
 
         return Ix2, Iy2, Ixy
 
 
     # gaussian filtering
     def gaussian_filtering(I, K_size = 3 , sigma = 3 ):
         # get shape
         H, W = I.shape
 
         ## gaussian
         I_t = np.pad(I, (K_size / / 2 , K_size / / 2 ), 'edge' )
 
         # gaussian kernel
         K = np.zeros((K_size, K_size), dtype = np. float )
         for x in range (K_size):
             for y in range (K_size):
                 _x = x - K_size / / 2
                 _y = y - K_size / / 2
                 K[y, x] = np.exp( - (_x * * 2 + _y * * 2 ) / ( 2 * (sigma * * 2 )))
         K / = (sigma * np.sqrt( 2 * np.pi))
         K / = K. sum ()
 
         # filtering
         for y in range (H):
             for x in range (W):
                 I[y,x] = np. sum (I_t[y : y + K_size, x : x + K_size] * K)
                
         return I
 
     # corner detect
     def corner_detect(gray, Ix2, Iy2, Ixy, k = 0.04 , th = 0.1 ):
         # prepare output image
         out = np.array((gray, gray, gray))
         out = np.transpose(out, ( 1 , 2 , 0 ))
 
         # get R
         R = (Ix2 * Iy2 - Ixy * * 2 ) - k * ((Ix2 + Iy2) * * 2 )
 
         # detect corner
         out[R > = np. max (R) * th] = [ 255 , 0 , 0 ]
 
         out = out.astype(np.uint8)
 
         return out
 
    
     # 1. grayscale
     gray = BGR2GRAY(img)
 
     # 2. get difference image
     Ix2, Iy2, Ixy = Sobel_filtering(gray)
 
     # 3. gaussian filtering
     Ix2 = gaussian_filtering(Ix2, K_size = 3 , sigma = 3 )
     Iy2 = gaussian_filtering(Iy2, K_size = 3 , sigma = 3 )
     Ixy = gaussian_filtering(Ixy, K_size = 3 , sigma = 3 )
 
     # 4. corner detect
     out = corner_detect(gray, Ix2, Iy2, Ixy)
 
     return out
 
 
# Read image
img = cv.imread( "../qiqiao.jpg" ).astype(np.float32)
 
# Harris corner detection
out = Harris_corner(img)
 
cv.imwrite( "out.jpg" , out)
cv.imshow( "result" , out)
cv.waitKey( 0 )
cv.destroyAllWindows()

实验结果:

原图:

python 实现Harris角点检测算法

Harris角点检测算法检测结果:

python 实现Harris角点检测算法

以上就是python 实现Harris角点检测算法的详细内容,更多关于python Harris角点检测算法的资料请关注我其它相关文章! 。

原文链接:https://www.cnblogs.com/wojianxin/p/12574909.html 。

最后此篇关于python 实现Harris角点检测算法的文章就讲到这里了,如果你想了解更多关于python 实现Harris角点检测算法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com