近來發現,只看論文是不行的,論文看完了,當時可能明白的馬馬虎虎,過幾天在遇到這個東西,又忘記了,還是寫點東西,記錄下吧。
SIFT,即尺度不變特徵變換(Scale-invariant feature transform,SIFT),該算法具有尺度不變性,對於旋轉角度,圖像亮度或拍攝角度改變具有一定的不變性。sift的一個重要方面在於,它能夠產生大量的特徵,這些特徵在尺度和座標上能夠很好的覆蓋圖片區域。
1、構造尺度空間
目的主要是模擬圖像的多尺度特徵,在lowe的論文中指出:關鍵點檢測的第一步就是識別出座標和尺度,檢測將會在相同圖片的不同視角小重複進行
座標檢測對於圖片的尺度變化具有不變性,可以使用一個連續的尺度空間函數查找所有可能的平穩特徵來實現。Koenderink (1984) and Lindeberg (1994)證明了高斯卷積核是實現尺度變換的唯一的線性核,尺度空間被定義爲由一個可變尺度的高斯與輸入圖像進行卷積,公式如下:
(*代表的是卷積操作)
同時G函數其實就是二維正態分佈,(x,y)是圖像座標,σ大小決定圖像的平滑程度,大尺度對應圖像的概貌特徵,小尺度對應圖像的細節特徵。大的σ值對應粗糙尺度(低分辨率),反之,對應精細尺度(高分辨率)。爲了有效的在尺度空間檢測到穩定的關鍵點,提出了高斯差分尺度空間(DOG scale-space)。利用不同尺度的高斯差分核與圖像卷積生成。[1]公式如下:
由圖片size決定建幾個塔,每塔幾層圖像(S一般爲3-5層)。0塔的第0層是原始圖像(或你double後的圖像),往上每一層是對其下一層進行Laplacian變換(高斯卷積,其中σ值漸大,例如可以是σ,
k*σ, k*k*σ…),直觀上看來越往上圖片越模糊。塔間的圖片是降採樣關係,例如1塔的第0層可以由0塔的第3層down
sample得到,然後進行與0塔類似的高斯卷積操作。(這段話來自Rachel
Zhang的專欄)
上圖中左邊列每一層都代表一個高斯尺度空間,左邊列的每兩個相鄰層,也就是兩張圖進行相減操作即可得到右邊的高斯查分尺度空間(DOG)。對於一幅圖像I,建立其在不同尺度(scale)的圖像,也稱爲子八度(octave),first octave代表的是第一個子八度,對於尺度空間,第一個子八度就是原圖的大小,第二個子八度(second ),後面的每一個子八度爲上一個子八度的降採樣結果,即原圖的1/4,長寬各減半。
另外,不同的高斯函數提供對尺度歸一化的高斯拉普拉斯算子有無限逼近能力。Mikolajczyk (2002)發現相對於其他一系列可能的圖像函數(例如梯度,Hessian等),2∇2G的最大和最小值能夠產生最平穩的圖像特徵。高斯差分尺度空間D和2∇2G之間耳朵關係如下:
,把G看做是σ的函數的時候,令kσ≈σ,則有:
(導數定義)
因此就有:
This shows that when the difference-of-Gaussian function has scales differing by a constant
factor it already incorporates the 2 scale normalization required for the scale-invariant
2、檢測DOG尺度空間極值點
尺度空間中的極值點即爲圖像在改尺度空間下的特徵點,要找到尺度空間中的極值點,每一個樣本點要與其所有相鄰的點進行比較,如上圖中的x號的點,除了需要與本層的8個臨近點進行比較外,還需要與和它相鄰的上下兩層的18個節點進行比較,也就是說總共需要與26個臨近點進行比較,以確定最小值或最大值,即爲特徵點。這個過程可以再一階導數等於0的點進行尋找。
3、LoG近似DoG找到關鍵點<檢測DOG尺度空間極值點>
(圖來自Rachel Zhang的專欄)
s=3代表每塔有3層,要求的是極值,根據極值的定義,只有左右兩邊都有纔可以進行比較確定極值,所以當s=3的時候此時,第一層的和第三層是沒有辦法進行比較的,此時採用的是在每一組圖像的頂層繼續用高斯模糊生成了 3 幅圖像,高斯金字塔有每組S+3層圖像。DOG金字塔每組有S+2層圖像(每相鄰兩層高斯金字塔構成一層DOG金字塔。這裏涉及到尺度變換的連續性,我直接複製Rachel Zhang的專欄,她寫的非常容易理解: