http://blog.csdn.net/fengbingchun/article/details/5869028
SIFT算子(Scale Invariant Feature Transform)是David Lowe提出的一種基於尺度空間的、對圖像縮放、旋轉甚至仿射變換保持不變性的圖像局部特征描述算子。SIFT特征提取的是極其細微、大量的特征點,即時少數物體、物體的一小部分也可以產生大量特征向量。
SIFT算法如果不考慮實時要求,是一個比較好的用於圖像配准的算法,而且僅3個匹配的SIFT關鍵點就足以確定匹配關系。
SIFT算法用於圖像配准的整個執行流程大致為:
(1)、讀入初始圖像,是圖像轉換成double類型,並使其灰度值歸一化到[0, 1]之間;
(2)、高斯濾波、線性插值,使圖像放大一倍;
(3)、產生高斯金字塔和高斯差分金字塔圖像序列,這是最耗時的一步;Lowe建議高斯金字塔一般選擇4階,每階選擇5層。
(4)、檢測高斯差分金字塔尺度空間極值點、去除低對比度和邊緣不穩定的特征點,選取較小的曲率閾值或選取較大的對比度閾值均可以減少特征點的個數;應選取合適的閾值,如果圖像本身太大,特征點太多,會導致內存溢出;
(5)、計算特征點幅值和方向序列;
(6)、在特征點中尋找關鍵點,建立梯度方向直方圖,得到每個關鍵點的位置、尺度和方向;
(7)、產生關鍵點描述子序列;
(8)、根據產生的關鍵點描述子序列,基於歐氏距離初步得到關鍵點對:尋找與目標關鍵點歐式距離最近的前兩個關鍵點,用這兩個關鍵點中最近的距離與此近的距離的比值作為最近點的相似度度量similarity,如果similarity小於某個比例閾值,則接受這一對匹配點;
(9)、用hough變換對初步得到的關鍵點對進行再一次計算,得到最終的初始關鍵點對;
(10)、用RANSAC算法對初始關鍵點對進行精確匹配,剔除錯誤的匹配點,得到最終的匹配點。