ORB 描述子
ORB,即定向 FAST 與旋轉 BRIEF(Oriented FAST and Rotated BRIEF),由 Ethan Rublee 與 Willow Garage 的同事於 2011 年發表,目的是給開源社群一個快速、免費、可替代受專利保護之 SIFT 與 SURF 的方案。它的設計哲學很務實:取兩個既有的廉價元件,即 FAST 角點偵測器與 BRIEF 二進位描述子,並修正它們最大的兩個弱點,也就是 FAST 沒有方向或尺度、且 BRIEF 不具旋轉不變性。其回報是一個能在幾微秒內完成比對、並能在手機或機器人上輕鬆即時運行的描述子,這就是為什麼 ORB 成為 OpenCV 的預設特徵,以及熱門的 ORB-SLAM 系統內部的引擎。
在偵測方面,ORB 在影像金字塔上運行 FAST(一個只檢查候選點周圍一圈像素是否一致地比中心更亮或更暗的角點偵測器,極為快速)以取得粗略的尺度不變性,並以 Harris 反應保留最強的角點。接著它用強度質心(intensity centroid)為每個關鍵點賦予方向:計算區塊強度的質量中心,從關鍵點中心指向該質心的向量便定義出一個參考角度。這是一個廉價但有效、讓描述子能感知旋轉的方法。
在描述方面,ORB 使用一個經導向、學習過的 BRIEF 版本。原始 BRIEF 用一串位元描述一個區塊,每個位元記錄在平滑後的區塊中,某個預選像素是否比另一個預選像素更亮。ORB 在取樣前先把這組測試點對依關鍵點的方向旋轉(旋轉 BRIEF,rBRIEF),使位元串在旋轉下保持一致。然而旋轉這些測試會讓位元更相關、鑑別力更低,因此 ORB 額外透過在訓練資料上的貪婪搜尋,學出一組 256 個高變異且互不相關的測試對。輸出是一個 256 位元的二進位描述子,以漢明距離(Hamming distance,相異位元的數目)比較,CPU 只需幾道指令即可算出。
ORB 的優勢是速度、每個位元零記憶體額外負擔、自由的授權,以及良好的旋轉不變性;其弱點是對大尺度與視角變化的不變性弱於 SIFT,且在困難的寬基線比對上精度較低。每當吞吐量重要時它就是正確的預設選擇,例如視覺里程計、SLAM、行動裝置上的擴增實境,以及受限硬體上的全景拼接。若要在極端變換下追求最高準確度,學習式偵測器與描述子如今勝過它,但 ORB 在速度、簡潔與寬鬆授權上的組合,使它至今無所不在。
像 ORB 這樣的二進位描述子必須用漢明距離而非歐氏距離來比對,並且受惠於專用的索引(例如 LSH),而非為實數向量設計的 kd-tree。搞錯距離度量是一個經典的初學者錯誤,會悄無聲息地摧毀比對品質。