SIFT (Scale-Invariant Feature Transform) 產生的特徵對旋轉、尺度具不變性,對光照、視角變化具部分不變性。主要四階段:
尺度空間 L(x,y,σ) = G(x,y,σ) * I(x,y)。DoG 近似 LoG (Laplacian of Gaussian):
D(x,y,σ) = L(x,y,kσ) - L(x,y,σ) ≈ (k-1) σ² ∇²G
σ₀=1.6, S=3, O=log₂(min(W,H))-2。輸入影像先雙線性放大 2 倍(等效 σ=1.0),再以 σ₀=1.6 建立第 0 組第 0 層。每個候選點與同層 8 鄰域 + 上下層各 9 點共 26 點比較,確為局部極大/極小才保留。搜尋範圍:各組第 1 ~ S 層。
泰勒展開至二階:
X̂ = -H⁻¹ ∇D (偏移向量)
D(X̂) = D(0) + ½ ∇Dᵀ X̂ (插值極值)
|X̂| > 0.5 → 移動中心點重新插值,直到收斂或超過迭代上限/邊界則捨棄。|D(X̂)| < 0.03(假設灰度 0~1)→ 對比度過低,捨棄。Hessian 矩陣 H = [[Dxx, Dxy], [Dxy, Dyy]]。特徵值比率 r = λ_max/λ_min。
檢查 Tr(H)² / Det(H) < (r+1)²/r。Lowe 建議 r=10 → 門檻 121/10=12.1。超過者為邊緣點,捨棄。
σ_total = σ₀ × 2^{o + (s + σ_sub)/S}。若輸入影像曾放大 2 倍,最終尺度除以 2。
3 × 1.5 × σ 範圍內計算梯度幅值/角度。4×4 子區域,每子區域 4×4 像素(間距 m×σ, m=3)。4×4×8 = 128 維。o 後的尺度?0.03 在代碼中實為 0.03/S,除以間隔數 S 的理論依據?本文整理自「UnderTheHood」博客,原文出處:https://underthehood.blog.51cto.com/2531780/658350 | 基於 OpenCV 2.3 / Rob Hess 開源實作