SIFT和SURF的替换算法——ORB (Oriented FAST and Rotated BRIEF 快速定向和旋转)
SIFT和SURF的替代算法——ORB (Oriented FAST and Rotated BRIEF 快速定向和旋轉
- 1. 效果圖
- 2. 源碼
- 參考
1. 用于關鍵點檢測和描述的SIFT(Scale-Invariant Feature Transform 尺度不變特征變換),但它相對較慢
2. 加速版的SIFT——SURF(Speeded-Up Robust Features 加速魯棒特征)
3. SURF的優化版——BRIEF(Binary Robust Independent Elementary Features 二進制魯棒獨立基本特征)
這篇博客將繼續介紹特征檢測的算法:SIFT和SURF的替換算法,FAST和BRIEF的融合算法——ORB (Oriented FAST and Rotated BRIEF 快速定向和旋轉) 。
-
ORB比SURF和SIFT快得多,ORB描述符比SURF工作得更好,是用于全景拼接等低功耗設備的理想選擇。
-
在計算成本、匹配性能以及主要專利方面,ORB是SIFT和SURF的良好替代品。SIFT和SURF是專利算法,需要為它的使用付費。但ORB不需要。
-
ORB基本上是快速關鍵點檢測器和簡短描述符的融合,經過許多修改以提高性能。首先利用FAST算法尋找關鍵點,然后利用Harris角點測度在關鍵點中找到前N個點。它還使用金字塔生成多尺度特征。另一方面,FAST不能計算方向以及旋轉不變性,作者均作出了優化和修改。
-
ORB在所有可能的二進制測試中進行貪婪搜索,以找到方差高、均值接近0.5且不相關的測試。結果稱為rBRIEF。對于描述符匹配,對傳統LSH進行了改進,使用多探針LSH。
1. 效果圖
原始圖如下:
ORB 只繪制關鍵點,忽略大小和方向,效果圖如下:
ORB繪制關鍵點,大小和方向效果圖如下:
2. 源碼
# OpenCV中的ORB (Oriented FAST and Rotated BRIEF) 快速定向和旋轉。
#
# ORB比SURF和SIFT快得多,ORB描述符比SURF工作得更好,是用于全景拼接等低功耗設備的理想選擇。
# 在計算成本、匹配性能以及主要專利方面,ORB是SIFT和SURF的良好替代品。SIFT和SURF是專利算法,需要為它的使用付費。但ORB不需要。
#
# ORB基本上是快速關鍵點檢測器和簡短描述符的融合,經過許多修改以提高性能。首先利用FAST算法尋找關鍵點,然后利用Harris角點測度在關鍵點中找到前N個點。它還使用金字塔生成多尺度特征。另一方面,FAST不能計算方向以及旋轉不變性,作者均作出了優化和修改。
# ORB在所有可能的二進制測試中進行貪婪搜索,以找到方差高、均值接近0.5且不相關的測試。結果稱為rBRIEF。對于描述符匹配,對傳統LSH進行了改進,使用多探針LSH。import cv2
from matplotlib import pyplot as pltorigin = cv2.imread('images/simple.jpg')
# origin = cv2.imread('images/simple.jpg', 0)
plt.imshow(cv2.cvtColor(origin, cv2.COLOR_BGR2RGB))
plt.xticks([])
plt.yticks([])
plt.title('origin')
plt.show()img = origin.copy()# 初始化ORB檢測器
orb = cv2.ORB_create()# 使用ORB尋找關鍵點
# print(orb.detectAndCompute(img, None))
kp = orb.detect(img, None)# 計算ORB描述符
kp, des = orb.compute(img, kp)# 僅繪制關鍵點位置,而忽略圓的大小和方向
img2 = cv2.drawKeypoints(img, kp, img, color=(0, 255, 0), flags=0)
plt.imshow(cv2.cvtColor(img2, cv2.COLOR_BGR2RGB))
plt.xticks([])
plt.yticks([])
plt.title('orb res')
plt.show()# 繪制關鍵點位置、大小和方向
img2 = cv2.drawKeypoints(img, kp, img, color=(0, 255, 0), flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
plt.imshow(cv2.cvtColor(img2, cv2.COLOR_BGR2RGB))
plt.xticks([])
plt.yticks([])
plt.title('orb size orientation res')
plt.show()
參考
- https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_orb/py_orb.html#orb
總結
以上是生活随笔為你收集整理的SIFT和SURF的替换算法——ORB (Oriented FAST and Rotated BRIEF 快速定向和旋转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV中的二进制鲁棒独立基本特征—
- 下一篇: OpenCV中的特征匹配(Feature