SIFT 描述子
SIFT,即尺度不變特徵轉換(Scale-Invariant Feature Transform),由 David Lowe 於 1999 年提出、2004 年詳述,是讓「在尺度、旋轉與視角大幅變化下仍可靠地比對影像」變得實用的突破,並主宰電腦視覺超過十年。這個名稱涵蓋一整套流程:偵測關鍵點、為每個關鍵點指定方向與尺度,並以一個經工程設計、力求可重複的向量來描述局部區塊。它歷久彌新的啟示是:不變性是在每個階段被刻意建構出來的,而非僅僅期望它出現。
偵測使用高斯差的尺度空間極值,這賦予每個關鍵點一個位置與內在尺度(如此描述子便會在一個大小與特徵相稱的區塊上計算,從而獲得尺度不變性)。候選極值透過擬合二次式被精修到次像素精度,不穩定的點則被丟棄:低對比的點被剔除,而位於邊緣上的點(其中一個主曲率佔主導,透過 Hessian 特徵值之比偵測)也被剔除,因為它們定位不佳。每個存活的關鍵點接著從局部梯度方向的直方圖(以梯度大小加權)中被指定一個主方向;把描述子座標框旋轉到這個方向,正是賦予旋轉不變性的關鍵。
描述子本身就是那著名的 128 維向量。在關鍵點周圍、一個大小隨關鍵點縮放且座標軸旋轉到關鍵點方向的區域中,SIFT 鋪上一個 4×4 的子區域網格。在每個子區域中,它把梯度方向建成 8 個分格的直方圖,以梯度大小及一個會降低遠離中心之梯度權重的高斯來加權。把 4 乘 4 乘 8 疊起來就得到 128 個數。這個向量接著被正規化為單位長度以抵消均勻的對比變化,其較大的項被截斷(以限制少數強梯度的影響,例如來自非線性光照),再重新正規化。使用方向直方圖而非原始像素,正是讓 SIFT 能容忍小幾何扭曲與光照變化的原因。
實務上,SIFT 描述子以歐氏距離的最近鄰來比對,並用 Lowe 的比值測試過濾(只有當最近鄰明顯比次近鄰更近時才接受該配對),存活下來的配對再餵入以 RANSAC 進行的幾何驗證。SIFT 極具獨特性且相當穩健,代價是比 ORB 等二進位描述子更慢、更耗記憶體。SIFT 一度受專利束縛,於 2020 年專利到期後變得可自由使用,並重回 OpenCV 主線。雖然學習式描述子(HardNet、SOSNet)與端到端比對器(SuperPoint 加 SuperGlue)如今在困難基準上勝過它,SIFT 仍是一個強而可解釋的基準線,並在運動恢復結構與 3D 重建中持續廣泛使用。
4×4×8=128 這幾個數字並非任意:4×4 的空間網格給予對微小對位誤差的一些容忍度,8 個方向分格粗略量化梯度方向,Lowe 發現這個粒度正是獨特性與穩健性之間的甜蜜點。更粗會喪失鑑別力;更細則對微小變形變得脆弱。