iT邦幫忙

2025 iThome 鐵人賽

DAY 24
0
佛心分享-IT 人自學之術

OpwnCV影像處理新手村系列 第 24

🚀 DAY 24:進階特徵點檢測與描述(Feature Detection & Description)|ORB

  • 分享至 

  • xImage
  •  

在 DAY23 我們學會了 SIFT,雖然效果非常好,但因為專利授權問題與運算速度較慢,在許多即時應用中並不理想。

今天要介紹的 ORB(Oriented FAST and Rotated BRIEF),它結合了 FAST 與 BRIEF 的優點,提供高效能、免專利限制的特徵檢測與描述方法,非常適合即時電腦視覺應用(例如 SLAM、AR、即時物體追蹤)。


📌 ORB 的特點

  • 速度快:比 SIFT / SURF 更適合即時影像處理。
  • 免專利限制:可自由用於商業應用。
  • 旋轉與部分尺度不變性:能處理旋轉與部分縮放情況。
  • 描述子:使用二進制描述子(Binary Descriptor),比對速度快且節省記憶體。

ORB 綜合了 FAST 的快速角點偵測與 BRIEF 的高效描述子,並針對旋轉與尺度進行改良,成為目前主流的即時特徵點方法。


🖼 測試圖片準備

與 DAY23 相同,準備兩張圖片(同一場景但縮放或旋轉不同),例如 box.jpgbox_in_scene.jpg

import cv2
import numpy as np

# 讀取兩張圖片
img1 = cv2.imread("box.jpg")
img2 = cv2.imread("box_in_scene.jpg")

img1_gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
img2_gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)

cv2.imshow("Original img1", img1_gray)
cv2.imshow("Original img2", img2_gray)

# 將以下程式碼放在所有顯示語句的最後面
cv2.waitKey()
cv2.destroyAllWindows()

說明:
灰階影像能簡化計算,並保留角點偵測所需的亮度資訊。
在特徵點檢測前,通常會先進行去雜訊(如高斯模糊),以提升檢測品質。

原圖灰階


📌 程式範例:ORB 關鍵點檢測

# 建立 ORB 物件
orb = cv2.ORB_create()

# 偵測關鍵點與描述子
kp1, des1 = orb.detectAndCompute(img1_gray, None)
kp2, des2 = orb.detectAndCompute(img2_gray, None)

# 繪製關鍵點
img1_kp = cv2.drawKeypoints(img1_gray, kp1, None, color=(0,255,0), flags=0)
img2_kp = cv2.drawKeypoints(img2_gray, kp2, None, color=(0,255,0), flags=0)

cv2.imshow("ORB Keypoints - img1", img1_kp)
cv2.imshow("ORB Keypoints - img2", img2_kp)

🖼 你會看到圖片上標示出綠色的 ORB 特徵點。

ORB關鍵點檢測

程式說明:

  • ORB_create():建立 ORB 特徵點偵測器。
  • detectAndCompute():同時偵測關鍵點與計算二進制描述子。
  • drawKeypoints():將偵測到的特徵點標示於影像上。

📌 程式範例:ORB 特徵匹配

# 建立 BFMatcher(使用漢明距離)
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)

# 匹配特徵
matches = bf.match(des1, des2)

# 依照距離排序
matches = sorted(matches, key=lambda x: x.distance)

# 繪製前 20 個最佳匹配
img_matches = cv2.drawMatches(img1_gray, kp1, img2_gray, kp2, matches[:20], None, flags=2)

cv2.imshow("ORB Matching", img_matches)

ORB特徵匹配


🎯 今日結語

  1. ORB 是 SIFT / SURF 的快速替代方案,非常適合即時應用。
  2. 它的特徵描述子是二進制型態,匹配速度快且記憶體需求小。
  3. 雖然在準確度上略遜於 SIFT,但在速度和實用性上更有優勢。
  4. 實務上可根據需求選擇合適方法,並搭配前處理提升效果

上一篇
🚀 DAY 23:進階特徵點檢測與描述(Feature Detection & Description)|SIFT
系列文
OpwnCV影像處理新手村24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言