SIFT算法原理
SIFT算法
SIFT即尺度不變特征變換,是用于圖像處理領域的一種描述。這種描述具有尺度不變性,可在圖像中檢測出關鍵點,是一種局部特征描述子。
一、SIFT算法特點:
1、具有較好的穩定性和不變性,能夠適應旋轉、尺度縮放、亮度的變化,能在一定程度上不受視角變化、仿射變換、噪聲的干擾。
2、區分性好,能夠在海量特征數據庫中進行快速準確的區分信息進行匹配
3、多量性,就算只有單個物體,也能產生大量特征向量
4、高速性,能夠快速的進行特征向量匹配
5、可擴展性,能夠與其它形式的特征向量進行聯合
二、SIFT算法實質
在不同的尺度空間上查找關鍵點,并計算出關鍵點的方向。
三、SIFT算法實現特征匹配主要有以下三個流程:
1、提取關鍵點:關鍵點是一些十分突出的不會因光照、尺度、旋轉等因素而消失的點,比如角點、邊緣點、暗區域的亮點以及亮區域的暗點。此步驟是搜索所有尺度空間上的圖像位置。通過高斯微分函數來識別潛在的具有尺度和旋轉不變的興趣點。
2、定位關鍵點并確定特征方向:在每個候選的位置上,通過一個擬合精細的模型來確定位置和尺度。關鍵點的選擇依據于它們的穩定程度。然后基于圖像局部的梯度方向,分配給每個關鍵點位置一個或多個方向。所有后面的對圖像數據的操作都相對于關鍵點的方向、尺度和位置進行變換,從而提供對于這些變換的不變性。
3. 通過各關鍵點的特征向量,進行兩兩比較找出相互匹配的若干對特征點,建立景物間的對應關系。
四、尺度空間
1、概念
尺度空間即試圖在圖像領域中模擬人眼觀察物體的概念與方法。例如:觀察一顆樹,關鍵在于我們想要觀察是樹葉子還是整棵樹:如果是一整棵樹(相當于大尺度情況下觀察),那么就應該去除圖像的細節部分。如果是樹葉(小尺度情況下觀察),那么就該觀察局部細節特征。
SIFT算法在構建尺度空間時候采取高斯核函數進行濾波,使原始圖像保存最多的細節特征,經過高斯濾波后細節特征逐漸減少來模擬大尺度情況下的特征表示。
利用高斯核函數進行濾波的主要原因有兩個:
(1)高斯核函數是唯一的尺度不變核函數。
(2)DoG核函數可以近似為LoG函數,這樣可以使特征提取更加簡單。同時,David. Lowe作者在論文中提出將原始圖像進行2倍上采樣后濾波能夠保留更多的信息便于后續特征提取與匹配。其實尺度空間圖像生成就是當前圖像與不同尺度核參數σ進行卷積運算后產生的圖像。
2、表示
L(x, y, σ) ,定義為原始圖像 I(x, y)與一個可變尺度的2維高斯函數G(x, y, σ) 卷積運算。
*表示卷積運算,(x,y)代表圖像的像素位置。是尺度空間因子,值越小表示圖像被平滑的越少,相應的尺度也就越小。大尺度對應于圖像的概貌特征,小尺度對應于圖像的細節特征。
五、高斯金字塔的構建
1、概念
尺度空間在實現時使用高斯金字塔表示,高斯金字塔的構建分為兩步:
(1)對圖像做高斯平滑;
(2)對圖像做降采樣。
圖像的金字塔模型是指將原始圖像不斷降階采樣,得到一系列大小不一的圖像,由大到小,從下到上構成的塔狀模型。原圖像為金子塔的第一層,每次降采樣所得到的新圖像為金字塔的一層(每層一張圖像),每個金字塔共n層。為了讓尺度體現其連續性,高斯金字塔在簡單降采樣的基礎上加上了高斯濾波。如上圖所示,將圖像金字塔每層的一張圖像使用不同參數做高斯模糊,Octave表示一幅圖像可產生的圖像組數,Interval表示一組圖像包括的圖像層數。另外,降采樣時,高斯金字塔上一組圖像的初始圖像(底層圖像)是由前一組圖像的倒數第三張圖像隔點采樣得到的。
2、表示
高斯圖像金字塔共o組、s層,則有
σ:尺度空間坐標;s:sub-level層坐標;σ0:初始尺度;S:每組層數(一般為3~5)
組內和組間尺度:
i:金字塔組數;n:每一組的層數
六、DOG空間極值檢測
1、DOG函數
2、DoG高斯差分金字塔
(1)對應DOG算子,需構建DOG金字塔。
可以通過高斯差分圖像看出圖像上的像素值變化情況。(如果沒有變化,也就沒有特征。特征必須是變化盡可能多的點。)DOG圖像描繪的是目標的輪廓。
(2)DOG局部極值檢測
特征點是由DOG空間的局部極值點組成的。為了尋找DoG函數的極值點,每一個像素點要和它所有的相鄰點比較,看其是否比它的圖像域和尺度域的相鄰點大或者小。特征點是由DOG空間的局部極值點組成的。為了尋找DoG函數的極值點,每一個像素點要和它所有的相鄰點比較,看其是否比它的圖像域和尺度域的相鄰點大或者小。如下圖,中間的檢測點和它同尺度的8個相鄰點和上下相鄰尺度對應的9×2個點共26個點比較,以確保在尺度空間和二維圖像空間都檢測到極值點。
(2)去除邊緣效應
在邊緣梯度的方向上主曲率值比較大,而沿著邊緣方向則主曲率值較小。候選特征點的DoG函數D(x)的主曲率與2×2Hessian矩陣H的特征值成正比。
其中,是候選點鄰域對應位置的差分求得的。
H的特征值α和β代表x和y方向的梯度
表示矩陣H對角線元素之和,表示矩陣H的行列式。假設是α較大的特征值,而是β較小的特征值,令,則
該值在兩特征值相等時達最小。Lowe論文中建議閾值T為1.2,即
時保留關鍵點,反之剔除
七、關鍵點方向分配
1、通過尺度不變性求極值點,需要利用圖像的局部特征為給每一個關鍵點分配一個基準方向,使描述子對圖像旋轉具有不變性。對于在DOG金字塔中檢測出的關鍵點,采集其所在高斯金字塔圖像3σ鄰域窗口內像素的梯度和方向分布特征。梯度的模值和方向如下:
2、本算法采用梯度直方圖統計法,統計以關鍵點為原點,一定區域內的圖像像素點確定關鍵點方向。在完成關鍵點的梯度計算后,使用直方圖統計鄰域內像素的梯度和方向。梯度直方圖將0~360度的方向范圍分為36個柱,其中每柱10度。如下圖所示,直方圖的峰值方向代表了關鍵點的主方向,方向直方圖的峰值則代表了該特征點處鄰域梯度的方向,以直方圖中最大值作為該關鍵點的主方向。為了增強匹配的魯棒性,只保留峰值大于主方向峰值80%的方向作為該關鍵點的輔方向。
八、關鍵點描述
對于每一個關鍵點,都擁有位置、尺度以及方向三個信息。為每個關鍵點建立一個描述符,用一組向量將這個關鍵點描述出來,使其不隨各種變化而改變,比如光照變化、視角變化等等。這個描述子不但包括關鍵點,也包含關鍵點周圍對其有貢獻的像素點,并且描述符應該有較高的獨特性,以便于提高特征點正確匹配的概率。
Lowe實驗結果表明:描述子采用4×4×8=128維向量表征,綜合效果最優(不變性與獨特性)。
九、關鍵點匹配
1、分別對模板圖(參考圖,reference image)和實時圖(觀測圖,
observation image)建立關鍵點描述子集合。目標的識別是通過兩點集內關鍵點描述子的比對來完成。具有128維的關鍵點描述子的相似性度量采用歐式距離。
3、匹配可采取窮舉法完成,但所花費的時間太多。所以一般采用kd樹的數據結構來完成搜索。搜索的內容是以目標圖像的關鍵點為基準,搜索與目標圖像的特征點最鄰近的原圖像特征點和次鄰近的原圖像特征點。
Kd樹如下如所示,是個平衡二叉樹
十、總結
SIFT特征具有穩定性和不變性,在圖像處理和計算機視覺領域有著很重要的作用,其本身也是非常復雜的,由于接觸SIFT不是很久,對其中的相關知識了解還很不足,經多方查閱參考,寫得此文,內容還不夠詳盡,望多多見諒。以下是SIFT算法的粗略總結。
1、DoG尺度空間的極值檢測。
2、刪除不穩定的極值點。
3、確定特征點的主方向
4、生成特征點的描述子進行關鍵點匹配。
參考資料
SIFT算法詳解
https://blog.csdn.net/zddblog/article/details/7521424
SIFT算法系列之尺度空間
https://blog.csdn.net/Small_Munich/article/details/79968229
SIFT特征詳解
https://www.cnblogs.com/wangguchangqing/p/4853263.html
總結
- 上一篇: C语言中auto,register,ex
- 下一篇: 网络层:IP协议详解(IP协议真的得看这