1.SIFT概述
SIFT的全稱是Scale Invariant Feature Transform,尺度不變特徵變換,由加拿大教授David G.Lowe提出的。SIFT特徵對旋轉、尺度縮放、亮度變化等保持不變性,是一種非常穩定的局部特徵。
1.1 SIFT算法具的特點
- 圖像的局部特徵,對旋轉、尺度縮放、亮度變化保持不變,對視角變化、仿射變換、噪聲也保持一定程度的穩定性。
- 獨特性好,信息量豐富,適用於海量特徵庫進行快速、準確的匹配。
- 多量性,即使是很少幾個物體也可以產生大量的SIFT特徵
- 高速性,經優化的SIFT匹配算法甚至可以達到實時性
- 擴招性,可以很方便的與其他的特徵向量進行聯合。
1.2 SIFT特徵檢測的步驟
有4個主要步驟
1. 尺度空間的極值檢測 搜索所有尺度空間上的圖像,通過高斯微分函數來識別潛在的對尺度和選擇不變的興趣點。
2. 特徵點定位 在每個候選的位置上,通過一個擬合精細模型來確定位置尺度,關鍵點的選取依據他們的穩定程度。
3. 特徵方向賦值 基於圖像局部的梯度方向,分配給每個關鍵點位置一個或多個方向,後續的所有操作都是對於關鍵點的方向、尺度和位置進行變換,從而提供這些特徵的不變性。
4. 特徵點描述 在每個特徵點周圍的鄰域內,在選定的尺度上測量圖像的局部梯度,這些梯度被變換成一種表示,這種表示允許比較大的局部形狀的變形和光照變換。
2. 尺度空間
在一定的範圍內,無論物體是大還是小,人眼都可以分辨出來。然而計算機要有相同的能力卻不是那麼的容易,在未知的場景中,計算機視覺並不能提供物體的尺度大小,其中的一種方法是把物體不同尺度下的圖像都提供給機器,讓機器能夠對物體在不同的尺度下有一個統一的認知。在建立統一認知的過程中,要考慮的就是在圖像在不同的尺度下都存在的特徵點。
2.1 多分辨率圖像金字塔
在早期圖像的多尺度通常使用圖像金字塔表示形式。圖像金字塔是同一圖像在不同的分辨率下得到的一組結果,其生成過程一般包括兩個步驟:
1. 對原始圖像進行平滑
2. 對處理後的圖像進行降採樣(通常是水平、垂直方向的1/2)
降採樣後得到一系列不斷尺寸縮小的圖像。顯然,一個傳統的金字塔中,每一層的圖像是其上一層圖像長、高的各一半。多分辨率的圖像金字塔雖然生成簡單,但其本質是降採樣,圖像的局部特徵則難以保持,也就是無法保持特徵的尺度不變性。
2.2 高斯尺度空間
我們還可以通過圖像的模糊程度來模擬人在距離物體由遠到近時物體在視網膜上成像過程,距離物體越近其尺寸越大圖像也越模糊,這就是高斯尺度空間,使用不同的參數模糊圖像(分辨率不變),是尺度空間的另一種表現形式。
我們知道圖像和高斯函數進行卷積運算能夠對圖像進行模糊,使用不同的“高斯核”可得到不同模糊程度的圖像。一副圖像其高斯尺度空間可由其和不同的高斯卷積得到:
其中,
構建尺度空間的目的是爲了檢測出在不同的尺度下都存在的特徵點,而檢測特徵點較好的算子是
使用LoG雖然能較好的檢測到圖像中的特徵點,但是其運算量過大,通常可使用DoG(差分高斯,Difference of Gaussina)來近似計算LoG[Marr and Hidreth]。
設
其中,
從上式可以知道,將相鄰的兩個高斯空間的圖像相減就得到了DoG的響應圖像。爲了得到DoG圖像,先要構建高斯尺度空間,而高斯的尺度空間可以在圖像金字塔降採樣的基礎上加上高斯濾波得到,也就是對圖像金字塔的每層圖像使用不同的參數
易知,高斯金字塔有多組,每組又有多層。一組中的多個層之間的尺度是不一樣的(也就是使用的高斯參數
高斯金字塔的組數一般是
高斯模糊參數
其中
在Lowe的算法實現中
從上面可以得知同一組內相鄰層的圖像尺度關係
相鄰組之間的尺度關係
2.3 高斯金字塔構建示例
以一個
1. 金字塔的組數,
2. 構建第0組,將圖像的寬和高都增加一倍,變成
3. 構建第1組,對
4.
5. 構建第o組,第s層
高斯金字塔構建成功後,將每一組相鄰的兩層相減就可以得到DoG金字塔.
3. DoG空間極值檢測
爲了尋找尺度空間的極值點,每個像素點要和其圖像域(同一尺度空間)和尺度域(相鄰的尺度空間)的所有相鄰點進行比較,當其大於(或者小於)所有相鄰點時,改點就是極值點。如圖所示,中間的檢測點要和其所在圖像的
從上面的描述中可以知道,每組圖像的第一層和最後一層是無法進行比較取得極值的。爲了滿足尺度變換的連續性,在每一組圖像的頂層繼續使用高斯模糊生成3幅圖像,高斯金字塔每組有
3.1 尺度變化的連續性
設
4. 刪除不好的極值點(特徵點)
通過比較檢測得到的DoG的局部極值點實在離散的空間搜索得到的,由於離散空間是對連續空間採樣得到的結果,因此在離散空間找到的極值點不一定是真正意義上的極值點,因此要設法將不滿足條件的點剔除掉。可以通過尺度空間DoG函數進行曲線擬合尋找極值點,這一步的本質是去掉DoG局部曲率非常不對稱的點。
要剔除掉的不符合要求的點主要有兩種:
1. 低對比度的特徵點
2. 不穩定的邊緣響應點
4.1 剔除低對比度的特徵點
候選特徵點x,其偏移量定義爲
由於x是D(x)的極值點,所以對上式求導並令其爲0,得到
然後再把求得的
設對比度的閾值爲T,若
4.2 剔除不穩定的邊緣響應點
在邊緣梯度的方向上主曲率值比較大,而沿着邊緣方向則主曲率值較小。候選特徵點的DoG函數D(x)的主曲率與
其中,
爲了避免求具體的值,可以使用
其中,
設
上式的結果與兩個特徵值的比例有關,和具體的大小無關,當兩個特徵值想等時其值最小,並且隨着
如果上式成立,則剔除該特徵點,否則保留。(Lowe論文中取
5. 求取特徵點的主方向
經過上面的步驟已經找到了在不同尺度下都存在的特徵點,爲了實現圖像旋轉不變性,需要給特徵點的方向進行賦值。利用特徵點鄰域像素的梯度分佈特性來確定其方向參數,再利用圖像的梯度直方圖求取關鍵點局部結構的穩定方向。
找到了特徵點,也就可以得到該特徵點的尺度
計算以特徵點爲中心、以
計算得到梯度方向後,就要使用直方圖統計特徵點鄰域內像素對應的梯度方向和幅值。梯度方向的直方圖的橫軸是梯度方向的角度(梯度方向的範圍是0到360度,直方圖每36度一個柱共10個柱,或者沒45度一個柱共8個柱),縱軸是梯度方向對應梯度幅值的累加,在直方圖的峯值就是特徵點的主方向。在Lowe的論文還提到了使用高斯函數對直方圖進行平滑以增強特徵點近的鄰域點對關鍵點方向的作用,並減少突變的影響。爲了得到更精確的方向,通常還可以對離散的梯度直方圖進行插值擬合。具體而言,關鍵點的方向可以由和主峯值最近的三個柱值通過拋物線插值得到。在梯度直方圖中,當存在一個相當於主峯值80%能量的柱值時,則可以將這個方向認爲是該特徵點輔助方向。所以,一個特徵點可能檢測到多個方向(也可以理解爲,一個特徵點可能產生多個座標、尺度相同,但是方向不同的特徵點)。Lowe在論文中指出
15%的關鍵點具有多方向,而且這些點對匹配的穩定性很關鍵。
得到特徵點的主方向後,對於每個特徵點可以得到三個信息
6. 生成特徵描述
通過以上的步驟已經找到了SIFT特徵點位置、尺度和方向信息,下面就需要使用一組向量來描述關鍵點也就是生成特徵點描述子,這個描述符不只包含特徵點,也含有特徵點周圍對其有貢獻的像素點。描述子應具有較高的獨立性,以保證匹配率。
特徵描述符的生成大致有三個步驟:
1. 校正旋轉主方向,確保旋轉不變性。
2. 生成描述子,最終形成一個128維的特徵向量
3. 歸一化處理,將特徵向量長度進行歸一化處理,進一步去除光照的影響。
爲了保證特徵矢量的旋轉不變性,要以特徵點爲中心,在附近鄰域內將座標軸旋轉
旋轉後以主方向爲中心取
與求主方向不同,此時每個種子區域的梯度直方圖在0-360之間劃分爲8個方向區間,每個區間爲45度,即每個種子點有8個方向的梯度強度信息。
在實際的計算過程中,爲了增強匹配的穩健性,Lowe建議
對每個關鍵點使用
4×4 共16個種子點來描述,這樣一個關鍵點就可以產生128維的SIFT特徵向量。
通過對特徵點周圍的像素進行分塊,計算塊內梯度直方圖,生成具有獨特性的向量,這個向量是該區域圖像信息的一種抽象,具有唯一性。
7. 總結
SIFT特徵以其對旋轉、尺度縮放、亮度等保持不變性,是一種非常穩定的局部特徵,在圖像處理和計算機視覺領域有着很重要的作用,其本身也是非常複雜的,下面對其計算過程做一個粗略總結。
- DoG尺度空間的極值檢測。 首先是構造DoG尺度空間,在SIFT中使用不同參數的高斯模糊來表示不同的尺度空間。而構造尺度空間是爲了檢測在不同尺度下都存在的特徵點,特徵點的檢測比較常用的方法是
Δ2G (高斯拉普拉斯LoG),但是LoG的運算量是比較大的,Marr和Hidreth曾指出,可以使用DoG(差分高斯)來近似計算LoG,所以在DoG的尺度空間下檢測極值點。 - 刪除不穩定的極值點。主要刪除兩類:低對比度的極值點以及不穩定的邊緣響應點。
- * 確定特徵點的主方向*。以特徵點的爲中心、以
3×1.5σ 爲半徑的領域內計算各個像素點的梯度的幅角和幅值,然後使用直方圖對梯度的幅角進行統計。直方圖的橫軸是梯度的方向,縱軸爲梯度方向對應梯度幅值的累加值,直方圖中最高峯所對應的方向即爲特徵點的方向。 - 生成特徵點的描述子。 首先將座標軸旋轉爲特徵點的方向,以特徵點爲中心的
16×16 的窗口的像素的梯度幅值和方向,將窗口內的像素分成16塊,每塊是其像素內8個方向的直方圖統計,共可形成128維的特徵向量。