特徵檢測

认真的六六發表於2024-10-09

Shi-Tomasi 角點檢測和追蹤的良好特徵

Shi-Tomasi 角落探測器,使用到函式:cv.goodFeaturesToTrack()

它透過 Shi-Tomasi 方法(或 Harris 角點檢測,如果你指定它)在影像中找到 N 個最佳的角點。像往常一樣,影像應該是灰度影像。然後指定要查詢的角點數量。然後指定質量等級,該等級是 0-1 之間的值,所有低於這個質量等級的角點都將被忽略。最後設定檢測到的兩個角點之間的最小歐氏距離。

該函式選定質量等級最高的角點(即排序後的第一個角點),忽略該角點最小距離範圍內的其餘角點,以此類推最後返回 N 個最佳的角點。

 1 import numpy as np
 2 import cv2 as cv
 3 from matplotlib import pyplot as plt
 4 
 5 img = cv.imread(r'C:\Users\19225\PycharmProjects\test\src\user\static\9.png')
 6 gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
 7 corners = cv.goodFeaturesToTrack(gray, 25, 0.01, 10)
 8 corners = np.int0(corners)
 9 for i in corners:
10     x, y = i.ravel()
11     cv.circle(img, (x, y), 3, 255, -1)
12 plt.imshow(img), plt.show()

OpenCV 中的 FAST 特徵點檢測器

它可以像 OpenCV 中的任何其他特徵點檢測器一樣呼叫。如果需要,您可以指定閾值,是否應用非最大值抑制,要使用的鄰域等。

對於鄰域,定義了三個標誌,cv.FAST_FEATURE_DETECTOR_TYPE_5_8,cv.FAST_FEATURE_DETECTOR_TYPE_7_12 和 cv.FAST_FEATURE_DETECTOR_TYPE_9_16。

 1 import numpy as np
 2 import cv2 as cv
 3 from matplotlib import pyplot as plt
 4 
 5 img = cv.imread(r'C:\Users\19225\PycharmProjects\test\src\user\static\9.png', 0)
 6 # Initiate FAST object with default values
 7 fast = cv.FastFeatureDetector_create()
 8 # find and draw the keypoints
 9 kp = fast.detect(img, None)
10 img2 = cv.drawKeypoints(img, kp, None, color=(255, 0, 0))
11 # Print all default params
12 print("Threshold: {}".format(fast.getThreshold()))
13 print("nonmaxSuppression:{}".format(fast.getNonmaxSuppression()))
14 print("neighborhood: {}".format(fast.getType()))
15 print("Total Keypoints with nonmaxSuppression: {}".format(len(kp)))
16 cv.imwrite('fast_true.png', img2)
17 # Disable nonmaxSuppression
18 fast.setNonmaxSuppression(0)
19 kp = fast.detect(img, None)
20 print("Total Keypoints without nonmaxSuppression: {}".format(len(kp)))
21 img3 = cv.drawKeypoints(img, kp, None, color=(255, 0, 0))
22 cv.imwrite(r'C:\Users\19225\PycharmProjects\test\src\user\static\2.jpg', img3)
23 cv.imshow('fast_false.png', img3)
24 cv.imshow('fast_true.png', img2)
25 cv.waitKey(0)

相關文章