1. 程式人生 > >深度學習----SIFT特徵(詳解)

深度學習----SIFT特徵(詳解)

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)
降取樣後得到一系列不斷尺寸縮小的影象。顯然,一個傳統的金字塔中,每一層的影象是其上一層影象長、高的各一半。多解析度的影象金字塔雖然生成簡單,但其本質是降取樣,影象的區域性特徵則難以保持,也就是無法保持特徵的尺度不變性。

2.2 高斯尺度空間

1、我們還可以通過影象的模糊程度來模擬人在距離物體由遠到近時物體在視網膜上成像過程,距離物體越近其尺寸越大影象也越模糊,這就是高斯尺度空間,使用不同的引數模糊影象(解析度不變),是尺度空間的另一種表現形式。
2、我們知道影象和高斯函式進行卷積運算能夠對影象進行模糊,使用不同的“高斯核”可得到不同模糊程度的影象。一副影象其高斯尺度空間可由其和不同的高斯卷積得到:

L(x,y,σ)=G(x,y,σ)I(x,y)

其中,G(x,y,σ)是高斯核函式。G(x,y,σ)是高斯核函式。

G(x,y,σ)=12πσ2ex2+y22σ2

σ 稱為尺度空間因子,它是高斯正態分佈的標準差,反映了影象被模糊的程度,其值越大影象越模糊,對應的尺度也就越大。L(x,y,σ)代表著影象的高斯尺度空間。
構建尺度空間的目的是為了檢測出在不同的尺度下都存在的特徵點,而檢測特徵點較好的運算元是Δ2G(高斯拉普拉斯,LoG),

2=2x2+2y2

使用LoG雖然能較好的檢測到影象中的特徵點,但是其運算量過大,通常可使用DoG(差分高斯,Difference of Gaussina)來近似計算LoG[Marr and Hidreth]。
設kk為相鄰兩個高斯尺度空間的比例因子,則DoG的定義:

D(x,y,σ)=[G(x,y,kσ)G(x,y,σ)]I(x,y)=L(x,y,kσ)L(x,y,σ)

其中,L(x,y,σ)L(x,y,σ)是影象的高斯尺度空間。

從上式可以知道,將相鄰的兩個高斯空間的影象相減就得到了DoG的響應影象。為了得到DoG影象,先要構建高斯尺度空間,而高斯的尺度空間可以在影象金字塔降取樣的基礎上加上高斯濾波得到,也就是對影象金字塔的每層影象使用不同的引數σσ進行高斯模糊,使每層金字塔有多張高斯模糊過的影象。降取樣時,金字塔上邊一組影象的第一張是由其下面一組影象倒數第三張降取樣得到。

易知,高斯金字塔有多組,每組又有多層。一組中的多個層之間的尺度是不一樣的(也就是使用的高斯引數σσ是不同的),相鄰兩層之間的尺度相差一個比例因子kk。如果每組有SS層,則k=21Sk=21S。上一組影象的最底層影象是由下一組中尺度為2σ2σ的影象進行因子為2的降取樣得到的(高斯金字塔先從底層建立)。高斯金字塔構建完成後,將相鄰的高斯金字塔相減就得到了DoG金字塔。

高斯金字塔的組數一般是

o=[log2min(m,n)]a

o表示高斯金字塔的層數,m,n分別是影象的行和列。減去的係數aa可以在0−log2min(m,n)之間的任意值,和具體需要的金字塔的頂層影象的大小有關。
高斯模糊引數σσ(尺度空間),可由下面關係式得到

σ(o,s)=σ02o+sS

其中o為所在的組,s為所在的層,σ0為初始的尺度,S為每組的層數。
在Lowe的演算法實現中σ0=1.6,omin=−1,S=3σ0=1.6,omin=−1,S=3,omin=−1omin=−1就是首先將原影象的長和寬各擴充套件一倍。
從上面可以得知同一組內相鄰層的影象尺度關係

σs+1=kσs=21Sσs
相鄰組之間的尺度關係
σo+1=2σo

2.3 高斯金字塔構建示例

以一個512×512512×512的影象I為例,構建高斯金字塔步驟:(從0開始計數,倒立的金字塔)
3、金字塔的組數,log2512=9,減去因子3,構建的金字塔的組數為6。取每組的層數為3。
4、構建第0組,將影象的寬和高都增加一倍,變成1024×10241024×1024(I0)。
第0層