Brook_icv《SIFT特徵詳解》難點的輔助閱讀內容

在我學習SIFT時,遇到了我認爲整理得最好的一篇文章Brook_icv《SIFT特徵詳解》。作者文字嚴謹,閱讀略帶美感,讓人舒服,以致於我改變以前的寫作方式,嘗試一種新的方式,即以大牛的文章作爲學習的主體內容,而對於文章中不懂的內容將梳理後嘗試呈現在本文中,以輔助理解。

學友閱讀本文,需要先閱讀Brook_icv《SIFT特徵詳解》一文,這篇文章足夠優秀,仔細閱讀,學友會有大收穫。
另,輔助閱讀的另一篇文章是SIFT算法詳解,集大成之者。

因爲我本文大多是個人理解與總結,所以有興趣的學友,不妨閱讀試試。

1 “3.1尺度變化的連續性”節的補充內容

在這一節我明白了尺度變化的連續性,最關心的是DoG(高斯差分空間)中從第0組到最後一組能夠進行極值檢測的所有的層,任意相鄰層之間的尺度比例保持在一個k值。
在這裏插入圖片描述
2.2節中指出,對於一張圖像,我們可以通過公式計算高斯空間的組數O(octave),但沒有指出如何確定每一組的層數S,並且在高斯空間和高斯差分空間每組層數發生了變化(相差一),因此S到底指代什麼?

我認爲S指的是高斯差分空間中能夠在極值檢測中取得極值的層數,換句話說,排除了高斯差分空間每組的首層與末尾層,雖然兩者參與了極值檢測,但是隻是作爲被比較的對象,比較的過程並不是以他們爲中心

因此,反推知,高斯差分空間中每組的層數是(S+2),而高斯空間中每組的層數是(S+3)。因此在每一層要準備S+3個尺度[σ,kσ,k2σ,k3σ,k4σ,k5σ][σ,kσ,k^2σ,k^3σ,k^4σ,k^5\sigma],最終取得極值的S個層對應[kσ,k2σ,k3σ][kσ,k^2σ,k^3σ]

2 “4.刪除不好的極值點(特徵點)”

如果有誰希望在此得到輔助的解釋,我想我是辦不到的。
因爲我理解不了曲線擬合的過程,以及“離散空間找到的極值點不一定是真正意義上的極值點”這樣的說法。

不過,我瞭解到在Harris角點檢測中也遇到的問題解決思路:
1. 對於一個二維的圖像函數(比如,DoG空間函數和Harris中的自相似函數),如果直接求解,基本解不出來,間接的求其近似值的方式是通過泰勒的一階展開式或者二階展開式。在SIFT中就用這種思路來剔除低對比度的特徵點,Harris用來簡化自相似函數的求解複雜度。參考Harris角點檢測數學計算過程
2. 二維函數常常會轉化爲矩陣的形式來求解,矩陣的現實意義豐富多彩且易懂(二次型的意義是什麼?有什麼應用? - 馬同學的回答 - 知乎 )。比如說,一個簡單的二維矩陣意味着圖像的拉伸,圖像的旋轉,而在涉及到矩陣的維度發生增加減少時又表達着圖像的投影。一個矩陣可以包含多種運動類型,而通過正交操作和特徵值分解,可以實現對拉伸動作和旋轉動作的分解,同時矩陣分解後得到的正交矩陣單純地意味着圖像的旋轉操作,對角矩陣單純地意味着圖像地拉伸,而對角矩陣中地特徵值又是圖像問題解決思路的重點。比如在SIFT中兩個特徵值β1,β2\beta1 ,\beta2的相加的平方(β1,β2)2(\beta1 ,\beta2)^2與兩個特徵值的乘積(β1β2)(\beta1· \beta2)的比值通過與某個閾值的比較,來判斷該邊緣響應點是否足夠穩定,或者說是否達到我們希望達到的穩定程度。這點與Harris的特徵值得用法十分相似,不同點在於Harris中與某個閾值比較的是
β1β2k(β1,β2)2{\beta1 \beta2}-k·{(\beta1 ,\beta2)^2}
而SIFT中是:(β1,β2)2β1β2\frac {(\beta1 ,\beta2)^2} {\beta1 \beta2},是不是十分地類似呢?

3 “5. 求取特徵點的主方向”節的補充內容

“高斯差分空間的構造”和“極值點篩選”過程,是爲了找到一張圖像在不同尺度下都存在的特徵點(關鍵點),實現圖像的尺度不變性

不太確切的圖
圖中的星星視爲找到的共同的特徵點。

而這節“求取特徵點的主方向”是爲了實現圖像的旋轉不變性。

方式是:利用特徵點鄰域像素的梯度分佈特性來確定其方向參數,再利用圖像的梯度直方圖求取關鍵點局部結構的穩定方向。

這裏的實現流程是:

  • 確定每個特徵點的鄰域大小:以特徵點爲中心、以3*1.5σ爲半徑的區域。
  • 計算該鄰域中各個像素點的(包括中心特徵點)的梯度(大小與方向),而梯度的計算,通常是由其所在位置的周圍的一個小局部鄰居像素的值所決定,且運用算子輔助計算,而這裏的梯度計算**似乎得到了簡化,只需要每個像素點的右邊和下面的鄰居點即可得到。**但不管如何,這一步結束會得到每個特徵點3σ\sigma鄰域內所有像素點的梯度大小與梯度方向。
  • 以每個特徵點爲基本統計單位,統計每個特徵點鄰域中所有像素點的梯度方向與大小。統計的規則是,第一步分組,因爲梯度方向範圍是0-360,所以將360默認分爲8份[0-45,45-90,90-135,135-180,180-225,225-270,270-315,315-360]。將處於相同區間的像素點歸爲一組。第二步組內sum加和,每個組內的像素點的梯度的大小(或稱爲幅度)進行累加。
    參考
    更加具體的是
    參考2
  • 對統計圖像進行多種策略的分析處理,目的只有一個,確定某個特徵點其最有可能的主方向。爲了達到最可能,因此進行了多種策略的安排
    比如,首先,使用高斯函數對直方圖進行平滑以增強特徵點近的鄰域點對關鍵點方向的作用,並減少突變的影響。其次,爲了得到更精確的方向,通常還可以對離散的梯度直方圖進行插值擬合。接着,關鍵點的方向可以由和主峯值最近的三個柱值通過拋物線插值得到。最後,當存在一個相當於主峯值80%能量的柱值時,則可以將這個方向認爲是該特徵點輔助方向
  • 最終返回的是每個特徵點的三個信息:位置,尺度和方向其實我有 疑問,這個方向是個範圍還是近似取了某個具體的角度值!

以下是我的另一個疑問
因爲每個特徵點會由位置/尺度和方向三個信息組成,因此,假設高斯金字塔一共6組,每組3層,則對於每個特徵點,它會存在18個位置、方向和尺度不會完全一致的組合形式。(我沒有看過源碼,只是憑空猜測。)
不太確切的圖

4 “6. 生成特徵描述” 節的補充內容

用一張圖來表達補充的內容:

  • 每個特徵點的SIFT特徵向量的形式如何?
  • 在Lowe的實驗論文中和實際生產中,一般每個特徵點的鄰域大小是多少?
    在這裏插入圖片描述

如有錯誤,請不吝賜教。

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