sift全景圖拼接完整的專案[翻譯][未完待續]
阿新 • • 發佈:2018-12-11
本文全文翻譯自http://ppwwyyxx.com/2016/How-to-Write-a-Panorama-Stitcher/。這是一個關於作者如何編寫OpenPano演算法的一個總結,OpenPano是一個開源的全景拼接軟體。相關程式碼在github上。
SIFT Feature 特徵運算元
Lowe 的SIFT[1]演算法實現放在feature/目錄下。這個演算法的流程和一些結果在這一章裡做簡單的介紹。
Scale Space & DOG Space 尺度空間&差分高斯空間
- 首先,一個尺度空間(Scale Space)由 S×O 個灰度尺度圖組成。最初的圖片被調整成O種不同大小(即層級,octaves),每一層加上S個不同sigma的高斯模糊。
- 由於不同大小尺寸的圖片上檢測特徵點,這些特徵點將具備尺度不變性。
- 高斯模糊通過兩個一維卷積實現,而不是一個二維卷積。這將顯著地加速該計算過程。
- 在每個層級(octave),計算每兩個相鄰的高斯模糊後圖片的差值,可以構建一個
差分高斯空間(DOG)
。DOG空間由(S−1)×O 個灰度圖組成
Extrema Detection 特徵提取
- 在DOG空間中,通過比較相鄰的三個方向26個畫素來檢測所有的極大或極小值:x,y,sigma。
- 然後使用
拋物線插補(parabolic interpolation)
去搜索精確的(x,y,σ)位置。為了去得到更多有區別的特徵點,低對比度(設定DOG影象中的閾值畫素值)和邊緣的點(設定主曲率閾值)不被接受。結果如下:
- Orientation Assignment 方向分配
- 首先,在尺度空間計算每個點的
梯度和方向
。 - 在之前的流程中檢測到的每個關鍵點,根據他們的
梯度幅度值
作為權重,將它的相鄰點的方向將累積起來並建立一個方向直方圖
, - 直方圖的峰值對應的方向被選為關鍵點的主方向。
Descriptor Representation 特徵描述
- Lowe建議[1]選擇關鍵點附近的16點來為每個店建立一個方向直方圖並且合成為一個SIFT特徵。每個直方圖使用8個從0到360度的不同的格子。因此,結果特徵是一個128位浮點向量。因為每個關鍵點的主方向是已知的,利用相對於主方向的相對方向,這個特徵是旋轉不變的。
- 利用論文[2]的建議,利用一個簡單修改的SIFT——RootSIFT,魯棒性更強。
Feature Matching 特徵匹配
-
這個128維描述子的
歐氏距離
是兩幅圖之間特徵匹配的 距離標尺。 -
如果一個點和他最近鄰和次近鄰的點之間的距離是相似的會被認定是不可信的而被拒絕。
-
特徵匹配被認為是最耗時的一步。所以使用FLANN library去特徵向量中查詢兩個最臨近特徵。Intel SSE intrinsics被用來加速去計算兩個特徵向量的歐氏距離。
Transformation Estimation
未完待續