ORB(Oriented FAST and Rotated BRIEF)是一種圖像特征檢測和描述算法,結合了 FAST 關鍵點檢測器和 BRIEF 描述子的優點。ORB 算法具有良好的性能,特別適用于實時應用,如目標追蹤、相機定位等。
以下是 ORB 算法的一般步驟:
-
FAST 關鍵點檢測器: 使用 FAST(Features from Accelerated Segment Test)算法檢測圖像中的關鍵點。FAST 是一種高效的角點檢測算法。
-
Harris 角點響應計算: 對 FAST 檢測到的關鍵點使用 Harris 角點響應進行篩選。
-
非極大值抑制: 在圖像中選擇具有最大角點響應的關鍵點。
-
Oriented BRIEF 描述子計算: 在關鍵點周圍計算描述子,為了提高描述子的魯棒性,引入方向信息。
-
描述子匹配: 使用描述子進行關鍵點匹配。
cv2.ORB_create
是 OpenCV 中用于創建 ORB(Oriented FAST and Rotated BRIEF)檢測器和描述器的函數。ORB 是一種用于圖像特征檢測和描述的算法,結合了 FAST 關鍵點檢測器和 BRIEF 描述子的優點。
基本的使用方式如下:
orb = cv2.ORB_create([, nfeatures[, scaleFactor[, nlevels[, edgeThreshold[, firstLevel[, WTA_K[, scoreType[, patchSize[, fastThreshold]]]]]]]]])
其中方括號表示可選參數,具體的參數說明如下:
nfeatures
: 保留的關鍵點數量,默認為 500。scaleFactor
: 圖像金字塔的縮放因子,默認為 1.2。nlevels
: 圖像金字塔的層數,默認為 8。edgeThreshold
: 邊緣閾值,用于過濾不穩定的邊緣關鍵點,默認為 31。firstLevel
: 圖像金字塔的第一層索引,默認為 0。WTA_K
: 用于計算描述子的像素點的數量,可以是 2、3或 4,默認為 2。scoreType
: 評分類型,可以是cv2.ORB_HARRIS_SCORE
或cv2.ORB_FAST_SCORE
,默認為cv2.ORB_HARRIS_SCORE
。patchSize
: BRIEF 描述子的窗口大小,默認為 31。fastThreshold
: FAST 關鍵點檢測的閾值,默認為 20。
在 OpenCV 中,可以使用 cv2.ORB_create
函數創建 ORB 檢測器和描述器。以下是一個簡單的示例:
import cv2
import numpy as np
import matplotlib.pyplot as plt# 讀取圖像
img = cv2.imread(r"C:\Users\mzd\Desktop\opencv\images.jpg", cv2.IMREAD_GRAYSCALE)
# 創建 ORB 檢測器和描述器
orb = cv2.ORB_create()
# 檢測關鍵點并計算描述子
keypoints, descriptors = orb.detectAndCompute(img, None)
# 在圖像上繪制關鍵點
img_with_keypoints = cv2.drawKeypoints(img, keypoints, None, color=(0, 255, 0), flags=0)# 顯示原圖和帶有關鍵點的圖像
plt.figure(figsize=(10, 5))plt.subplot(121), plt.imshow(img, cmap='gray')
plt.title('Original Image'), plt.axis('off')plt.subplot(122), plt.imshow(cv2.cvtColor(img_with_keypoints, cv2.COLOR_BGR2RGB))
plt.title('Image with ORB Keypoints'), plt.axis('off')plt.show()
在這個示例中,我們使用了 cv2.ORB_create
創建了一個 ORB 檢測器和描述器,然后使用 detectAndCompute
方法在圖像中檢測關鍵點并計算描述子。最后,通過 drawKeypoints
方法在圖像上繪制關鍵點,并使用 Matplotlib 顯示原圖和帶有關鍵點的圖像。
ORB 算法的優點之一是其計算速度較快,適用于實時應用。