在上一篇中我講述了圖像金字塔(高斯金字塔和拉普拉斯金字塔)。這了篇中介紹在SIFT檢測中用到的DoG高斯差分算子。
此處的高斯金字塔的形成過程上前文的高斯金字塔稍有不同。
在SIFT關鍵角點檢測中,在不同的尺度空間不能使用相同的窗口檢測SIFT極值點。對小的角點要用小的窗口,對大的角點只能使用大的窗口。爲了達 到這個目的我們要使用尺度空間濾波器。
尺度空間濾波器:尺度空間濾波器可以使用一些列具有 不同方差 σ 的高斯卷積核構成。使用具有不同方差值 σ 的高斯拉普拉斯算子 (LoG)對圖像進行卷積,LoG 由於具有不同的方差值 σ 所以可以用來檢測不 同大小的斑點(當 LoG 的方差 σ 與斑點直徑相等時能夠使斑點完全平滑。
簡 單來說,方差 σ 就是一個尺度變換因子。例如,使用一個小方差 σ 的高斯 卷積核是可以很好的檢測出小的角點,而使用大方差 σ 的高斯卷積核時可以很 好的檢測出大的角點。所以我們可以在尺度空間和二維平面中檢測到局部最大 值,如(x,y,σ), 這表示在 σ 尺度中(x,y)點可能是一個關鍵點。
高斯金字塔的詳細構建過程:
1) 先將原圖像擴大一倍之後作爲高斯金字塔的第1組第1層,將第1組第1層圖像經高斯卷積(其實就是高斯平滑或稱高斯濾波)之後作爲第1組金字塔的第2層,高斯卷積函數爲:
對於參數σ,在Sift算子中取的是固定值1.6。
2)將σ乘以一個比例係數k,等到一個新的平滑因子σ=k*σ,用它來平滑第1組第2層圖像,結果圖像作爲第3層。
3) 如此這般重複,最後得到L層圖像,在同一組中,每一層圖像的尺寸都是一樣的,只是平滑係數不一樣。它們對應的平滑係數分別爲:0,σ,kσ,k^2σ,k^3σ……k^(L-2)σ。
4) 將第1組倒數第三層圖像作比例因子爲2的降採樣(如只取奇數行或奇數列),得到的圖像作爲第2組的第1層,然後對第2組的第1層圖像做平滑因子爲σ的高斯平滑,得到第2組的第2層,就像步驟2中一樣,如此得到第2組的L層圖像,同組內它們的尺寸是一樣的,對應的平滑係數分別爲:0,σ,kσ,k^2σ,k^3σ……k^(L-2)σ。但是在尺寸方面第2組是第1組圖像的一半。
這樣反覆執行,就可以得到一共O組,每組L層,共計O*L個圖像,這些圖像一起就構成了高斯金字塔。
注:高斯方差σ的大小與窗口的大小存在一個倍數關係:窗口大小等於 6 倍方差加 1,所以方差的大小也決定了窗口大小。
LoG 的計算量非常大,所以 SIFT 算法使用高斯差分算子(DoG)來對 LoG 做近似。DoG 就是這組具有不同分辨率的圖像金字塔中相鄰的兩層之間的差值。
附1:LoG算子
附1:DoG算子
——————————————————————————————————————————————
在 DoG 搞定之後,就可以在不同的尺度空間和 2D 平面中搜索局部最大 值了。對於圖像中的一個像素點而言,它需要與自己周圍的 8 鄰域,以及尺度 空間中上下兩層中的相鄰的 18(2x9)個點相比(共27個點相比)。如果是局部最大值,它就可能是一個關鍵點。基本上來說關鍵點是圖像在相應尺度空間中的最好代表。如 下圖所示:
在同一組中,每一層圖像的尺寸都是一樣的,只是平滑係數不一樣。它們對應的平滑係數分別爲:0,σ,kσ,k^2σ,k^3σ……k^(L-2)σ。
SIFT算法的作者在文章中給出了 SIFT 參數的經驗值:octaves=4(通過降低採樣從而減小圖像尺寸,構成尺寸減小的圖像金字塔4 層),尺度空間 爲 5,也就是每個尺寸使用 5 個不同方差的高斯核進行卷積,初始方差是 1.6, k 等於 √2 等。