OpenCV 4.12.0
開源計算機視覺
載入中...
搜尋中...
無匹配項
使用 FLANN 進行特徵匹配

上一個教程: 特徵描述
下一個教程: Features2D + 單應性查詢已知物件

原始作者Ana Huamán
相容性OpenCV >= 3.0

目標

在本教程中,您將學習如何

警告
你需要 OpenCV contrib modules 才能使用 SURF 特徵(替代方案包括 ORB、KAZE 等特徵)。

理論

經典的特徵描述符(SIFT、SURF 等)通常使用歐幾里德距離(或 L2 範數)進行比較和匹配。由於 SIFT 和 SURF 描述符表示鄰域中定向梯度的直方圖(SURF 的 Haar 小波響應),因此歐幾里德距離的替代方案是基於直方圖的度量(\( \chi^{2} \),Earth Mover’s Distance (EMD) 等)。

Arandjelovic 等人在 [14] 中提出了擴充套件到 RootSIFT 描述符

使用平方根 (Hellinger) 核代替標準歐幾里德距離來測量 SIFT 描述符之間的相似性,可以顯著提高管道所有階段的效能。

二進位制描述符(ORB、BRISK 等)使用 漢明距離 進行匹配。此距離等效於計算二進位制字串的不同元素的數量(應用 XOR 運算後的總體計數)

\[ d_{hamming} \left ( a,b \right ) = \sum_{i=0}^{n-1} \left ( a_i \oplus b_i \right ) \]

為了過濾匹配,Lowe 在 [176] 中提出使用距離比率測試來嘗試消除錯誤匹配。計算所考慮的關鍵點的兩個最近匹配項之間的距離比率,當此值低於閾值時,它是一個好的匹配。實際上,該比率有助於區分模糊匹配(兩個最近鄰居之間的距離比率接近 1)和良好區分的匹配。下圖來自 SIFT 論文,說明了基於最近鄰距離比率測試的匹配正確的機率。

替代或附加的過濾測試是

  • 交叉檢查測試(如果特徵 \( f_b \) 是 \( I_b \) 中 \( f_a \) 的最佳匹配,並且特徵 \( f_a \) 是 \( I_a \) 中 \( f_b \) 的最佳匹配,則好匹配 \( \left( f_a, f_b \right) \))
  • 幾何測試(消除不適合幾何模型的匹配,例如 RANSAC 或用於平面物件的魯棒單應性)

程式碼

解釋

結果

  • 這是使用距離比率測試進行 SURF 特徵匹配的結果