SIFT講解(SIFT的特徵點選取以及描述是重點)

SIFT是什麼?

SIFT ,即尺度不變特徵變換( Scale-invariant feature transform,SIFT) ,一種特徵描述方法。具有
尺度魯棒性
旋轉魯棒性
光照魯棒性

SIFT本身包括了特徵點篩選及特徵點描述的步驟。

尺度空間理論

尺度空間
效果
SIFT的特徵點篩選目的:尋找在不同尺度空間下的極值點,保證這些特徵點在放大或者縮小的條件下均存在。
(這一特點與Harris檢測特徵點比較的話發現,Harris對尺度變換的魯棒性較差)
SIFT的特徵點篩選方法:DoG近似LoG。
LoG(Laplacian of Gaussian) :使用不同sigma獲得不同的尺度空間圖像,然後通過Laplacian算子獲得極值。這一運算過程可以用DoG(Difference-of-Gaussian)近似。拉普拉斯其實就是二階導數,產生的零交叉點就是我們所要獲取的極值。
關於LoG與DoG的更多知識可以轉到:圖像分割-LOG檢測器和DOG檢測器
DoG步驟:
DoG步驟
得到的結果與LoG結果非常相似,在DoG結果圖中,我們用亮度表達差分值的大小。在紋理比較豐富、邊緣區域具有比較大的值。
理解:高斯卷積核其實是一種加權的平均。在灰度變化不劇烈的地區,一個像素值的大小和周圍像素值得大小基本相等,所以不管加權的參數是哪樣,得到的加權結果其實是相似的,所以做差分之後這種區域的差分值會很小。灰度變化劇烈的地區則反之,差分值會很大。

SIFT特徵點提取

在SIFT特徵點選取中所用到的DoG:
DOG
這時候就出現了一個問題:隨着sigma的增加,它需要更大的高斯窗口進行平滑模糊處理。(sigma越大高斯函數越扁平)會使無法處理的區域增加,同時計算量增加。在空間濾波中我們學習到,3* 3模板進行卷積時對圖像最外一層像素是無法處理的,5*5是周圍兩層像素。
解決方法:圖像金字塔,回顧知識:Opencv——圖像金字塔與圖像尺寸縮放
圖像金字塔
當k增加到2時,我們將圖像縮小爲1/2尺寸,這叫降採樣。再使用sigma0的模板處理。我們發現,圖像縮小了二分之一,而sigma卻沒有改變。重複該操作,進行降採樣。同一個Octave的圖像具有相同的尺寸。
在圖像金字塔處理之後,我們將就是檢測DoG極值了。
描述
關於獲取一個octave的圖像的詳細過程可以參考文章最末的原理講解,那個是十分詳細的。
這樣得出來的極值的性質如何?
極值性質
當然這些得到的極值點是候選點。在得到候選點之後就要對候選點的特徵進行描述,以達到匹配的目的。

SIFT特徵點描述

使用梯度值對特徵點進行表述,計算像素的梯度值和梯度方向。相對像素的亮度值,梯度對光照具有更好的魯棒性。
當圖像處於一個剛體狀態時(沒有劇烈形變),某像素與它周圍像素的關係應該是近乎恆定的。對一個區域進行描述的話得到的描述子將更加穩定。
我們先假設一個候選點:
候選點
然後計算它周圍一定區域的梯度值,比如8*8區域。
梯度值
1、將得到的角度值進行36等分。
2、在特徵點對應的尺度空間計算梯度值。
3、利用高斯覈對梯度進行計算權重。
也就是說該像素周圍像素的權重由兩個值決定:一個是本身梯度大小、第二個是離考察像素點的距離。
取決因素
建立一個36維的直方圖,每次累加的值就是它的權重
直方圖
其實到了這一步已經可以很好地描述了。
但是注意,此刻的角度計算得到的是一個絕對角度,是與水平方向成的角度。當圖像旋轉後顯然這種描述方法就有問題了。
解決方法:獲取一個具有代表性的方向作爲主方向。通常選擇梯度值最大的那個角度分量作爲主方向,獲得更具有旋轉魯棒性的描述方法。
主方向
主方向
選擇完主方向後,將周圍圖像以主方向計算相對角度。這樣就算圖像進行旋轉,主方向也會進行旋轉,相對角度保持相對恆定狀態。
代碼實現可以參考第二個鏈接。
要是想要調用Opencv庫函數,則要參考毛星雲的《Opencv3編程入門的》417頁,
我在我的Opencv安裝包中沒有找到這個nonfree文件夾,以後再解決這個問題。網上大部分調庫代碼也需要一些自己添加庫。
在這裏插入圖片描述
參考鏈接:

SIFT算法詳解
基於C++和OpenCv的SIFT_圖像局部特徵檢測算法代碼的實現
《數字圖像處理PPT.李竹版》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章