特征提取算法(3)——SIFT特征提取算子


目錄:

前言

1、高斯尺度空間GSS

2、高斯差分DOG

  • 用DoG檢測特征點
  • GSS尺度選擇

3、圖像金字塔建立

  • 用前一個octave中的倒數第三幅圖像生成下一octave中的第一幅圖像
  • 每層octave為什么生成s+3幅圖像

4、高斯核性質在SIFT中的應用

5、除去不好的特征點

6、給特征點賦值一個128維方向參數

7、根據SIFT進行Match

8、補充


前言

SIFT算子是一種檢測局部特征的算法,通過求一幅圖中的特征點及其有關尺寸scale和方向orientation的描述子得到特征,進行圖像特征點匹配,獲得了良好效果。每個特征點的SIFT特征是128維向量,因此計算量巨大。

不變性:具有尺寸和旋轉不變性,即改變旋轉角度、圖像亮度、拍攝視角,仍然能夠得到好的檢測效果。

改進型:PCA-SIFT,如名稱所說“主成分SIFT特征”,主要提取了128維特征向量中的20個特征,大大減少了計算。

高斯尺度空間(GSS - Gauss Scale Space)

這是一個初始化操作,尺度空間理論目的是模擬圖像數據的多尺度特征。唯一能產生尺度空間的核為高斯核函數(高斯卷積核是實現尺度變換的唯一線性核,所以我們將圖像的尺度空間表示成一個函數L(x,y,σ),它是由一個變尺度的高斯函數G(x,y,σ)與圖像I(x,y)卷積產生的。即:

其中 G(x,y,σ) 是尺度可變高斯函數 :

(x,y)是空間坐標,是尺度坐標。σ大小決定圖像的平滑程度,大尺度對應圖像的概貌特征,小尺度對應圖像的細節特征。大的σ值對應粗糙尺度(低分辨率),反之,對應精細尺度(高分辨率)。

高斯差分(DOG - Difference of Gauss)

為了有效的在尺度空間檢測到穩定的關鍵點,提出了高斯差分尺度空間(DOG scale-space)。利用不同尺度的高斯差分核與圖像卷積生成。

不同σ下圖像尺度空間:

關於尺度空間的理解說明:2kσ中的2是必須的,尺度空間是連續的。在 Lowe的論文中 ,將第0層的初始尺度定為1.6(最模糊),圖片的初始尺度定為0.5(最清晰)。在檢測極值點前對原始圖像的高斯平滑以致圖像丟失高頻信息,所以 Lowe 建議在建立尺度空間前首先對原始圖像長寬擴展一倍,以保留原始圖像信息,增加特征點數量。尺度越大圖像越模糊。 

為什么用DoG來檢測特征點?

Lindeberg證明用σ2標准化的高斯拉普拉斯(∇2G, LOG, Laplacian of Gauss)有着真正的尺度無關的特性,而Mikolajczyk發現,相比於其他一系列函數(比如梯度,Hessian,Harris角點函數等),用σ2標准化的高斯拉普拉斯(σ22G)有着更穩定的圖像特征,因此σ22G函數是我們理想的尋找特征點的函數。而在此,我們利用DoG來近似σ22G。

  通過熱傳導方程也可以幫助我們理解DoG與σ22G之間的近似關系。由熱傳導方程可知(通常用t=σ2):

對上式進行有限差分運算得:

因此

DoG = G(x, y, kσ) − G(x, y, σ) ≈ (k − 1)σ22G

而常數項(k - 1)並不會影響極值的位置。所以DoG是σ22G的近似。

對於使用DoG來近似σ22G,有如下優點:

  1. σ22G需要使用兩個方向的高斯二階微分卷積核,而DoG直接使用高斯卷積核,省去了對卷積核的生成的運算量。

  2. DoG保留了各個高斯尺度空間的圖像,這樣,在生成某一空間尺度的特征時,可以直接尺度空間圖像,而無需重新再次生成該尺度的圖像。

GSS尺度選擇

DoG近似於(k − 1)σ22G,對於常數k,即為相鄰高斯尺度空間的兩幅圖像的尺度倍數,Lowe在文中提到,The approximation error will go to zero as k goes to 1, but in practice we have found that the approximation has almost no impact on the stability of extrema detection or localization for even significant differences in scale, such as k = √2. 文中提到k值大小對於極值的檢測沒有什么影響。那么k究竟取多大呢?  

  We choose to divide each octave of scale space (i.e., doubling of σ) into an integer number, s, of intervals, so k = 21/s. We must produce s + 3 images in the stack of blurred images for each octave, so that final extrema detection covers a complete octave. Adjacent image scales are subtracted to produce the difference-of-Gaussian images shown on the right. Once a complete octave has been processed, we resample the Gaussian image that has twice the initial value of σ (it will be 2 images from the top of the stack) by taking every second pixel in each row and column. The accuracy of sampling relative to σ is no different than for the start of the previous octave, while computation is greatly reduced.

圖像金字塔建立

對於一幅圖像I,建立其在不同尺度(scale)的圖像,也成為子八度(octave),這是為了scale-invariant,也就是在任何尺度都能夠有對應的特征點,第一個子八度的scale為原圖大小,后面每個octave為上一個octave降采樣的結果,即原圖的1/4(長寬分別減半),構成下一個子八度(高一層金字塔)。

用前一個octave中的倒數第三幅圖像生成下一octave中的第一幅圖像?

根據圖像金字塔可以看出來,同一octave相鄰圖像之間尺度為k倍的關系。由圖像看出每層octave產生了5副圖像,所以s=2,令k = 21/s = 21/2完成一層octave的處理后,對2σ的高斯圖像進行二分重采樣,得到下一個octave的第一幅圖像。尺度大小為2σ的高斯函數模糊的圖像總是處於該octave的倒數第三幅,總共一層octave為s+3幅圖像,第n層即為knσ0(其中 n = 0,1,...,s,s+1,s+2.  k = 21/s),當n等於s時,knσ0 = 2σ0,第s層即為倒數第三層。

由圖片size決定建幾個塔,每塔幾層圖像(S一般為3-5層)。0塔的第0層是原始圖像(或你double后的圖像),往上每一層是對其下一層進行Laplacian變換(高斯卷積,其中σ值漸大,例如可以是σ, k*σ, k*k*σ…),直觀上看來越往上圖片越模糊。塔間的圖片是降采樣關系,例如1塔的第0層可以由0塔的第3層down sample得到,然后進行與0塔類似的高斯卷積操作。

LoG近似DoG找到關鍵點(檢測DOG尺度空間極值點)

為了尋找尺度空間的極值點,每一個采樣點要和它所有的相鄰點比較,看其是否比它的圖像域和尺度域的相鄰點大或者小。

如圖所示,中間的檢測點和它同尺度的8個相鄰點和上下相鄰尺度對應的9×2個點共26個點比較,以確保在尺度空間和二維圖像空間都檢測到極值點。 一個點如果在DOG尺度空間本層以及上下兩層的26個領域中是最大或最小值時,就認為該點是圖像在該尺度下的一個特征點,如圖所示。

同一組中的相鄰尺度(由於k的取值關系,肯定是上下層)之間進行尋找

s=3的情況

在極值比較的過程中,每一組圖像的首末兩層是無法進行極值比較的,為了滿足 尺度變化的連續性,我們在每一組圖像的頂層繼續用高斯模糊生成了 3 幅圖像,高斯金字塔有每組S+3層圖像。DOG金字塔每組有S+2層圖像。

由上圖可以看出,是S=3的情況。因此GSS中倒數第三幅尺度與下一個octave第一幅尺度相同,由圖中紅色矩形中的尺度度應為DoG中極值檢測的圖像。將各層紅色矩形框的尺度依次排序,可發現其為以k = 21/s(即k = 21/3)為等比的連續尺度。所以極值檢測是在一個連續變化的尺度空間中進行的。

每層octave為什么生成s+3幅圖像

假設s=3,也就是每個塔里有3層,則k=21/s=21/3,那么按照上圖可得Gauss Space和DoG space 分別有3個(s個)和2個(s-1個)分量,在DoG space中,1st-octave兩項分別是σ,kσ; 2nd-octave兩項分別是2σ,2kσ;由於無法比較極值,我們必須在高斯空間繼續添加高斯模糊項,使得形成σ,kσ,k2σ,k3σ,k4σ,這樣就可以選擇DoG space中的中間三項kσ,k2σ,k3σ(只有左右都有才能有極值),那么下一octave中(由上一層降采樣獲得)所得三項即為2kσ,2k2σ,2k3σ,其首項2kσ=2i/3=24/3。剛好與上一octave末項k3σ=23/3尺度變化連續起來,所以每次要在Gaussian space添加3項,每組(塔)共S+3層圖像,相應的DoG金字塔有S+2層圖像。

高斯核性質在SIFT中的應用

對於二維高斯卷積,有如下性質:

  1. 距離高斯核中心3σ距離外的系數很小,相對於3σ內的系數值可以忽略不計,所以只用(6σ + 1)*(6σ + 1)的面積計算卷積即可。
  2. 線性可分,二維高斯核卷積(計算次數O(n2*M*N))效果等於水平和豎直方向的兩個一維高斯核(計算次數O(n*M*N) + O(n*M*N)))累積處理的效果。n*n為濾波器大小,M*N圖像大小
  3. 對一幅圖像進行多次連續高斯模糊的效果與一次更大的高斯模糊可以產生同樣的效果,大的高斯模糊的半徑是所用多個高斯模糊半徑平方和的平方根。例如,使用半徑分別為 6 和 8 的兩次高斯模糊變換得到的效果等同於一次半徑為 10 (勾股定理)的高斯模糊效果。根據這個關系,使用多個連續較小的高斯模糊處理不會比單個高斯較大處理時間要少。

其中,性質3有助我們更快速的生成GSS。雖然兩個小半徑處理時間並不會比單個高斯較大半徑處理的時間少,但相對於原圖像,我們已經有一個小半徑模糊過的圖像,即可用另一小半徑在現成的圖像上進行模糊得到較大半徑的模糊效果。例如尺度為σ0的圖像已經存在,我們要得到尺度為kσ0的圖像,即可只使用尺度為[(kσ0)2-(σ0)2]1/2的核在尺度為σ0的圖像上進行模糊,即可得到尺度為kσ0模糊的圖像,同理可得到高斯尺度空間各層的圖像,使得高斯尺度空間生產得更快

除去不好的特征點

去掉DoG局部曲率非常不對稱的像素。通過擬和三維二次函數以精確確定關鍵點的位置和尺度(達到亞像素精度),同時去除低對比度的關鍵點和不穩定的邊緣響應點(因為DoG算子會產生較強的邊緣響應),以增強匹配穩定性、提高抗噪聲能力,在這里使用近似Harris Corner檢測器。

空間尺度函數泰勒展開式:

泰勒公式:

對上式求導,並令其為0,得到精確的位置, 得:

去除低對比度的點,求極值點處函數值,只取前兩項可得:

,則特征點就保留下來,否則丟棄。

去除不穩定的邊緣響應點,一個定義不好的高斯差分算子的極值在橫跨邊緣的地方有較大的主曲率,而在垂直邊緣的方向有較小的主曲率。主曲率通過一個2×2 的Hessian矩陣H求出:

導數由采樣點相鄰差估計得到。D的主曲率和H的特征值成正比,令α為較大特征值,β為較小的特征值,則:

令α=γβ,則:

 (r + 1)2/r的值在兩個特征值相等的時候最小,隨着r的增大而增大,因此,為了檢測主曲率是否在某域值r下,只需檢測:

if )/ αβ> (r+1)2/r, throw it out.   在Lowe的文章中,取r=10

6、給特征點賦值一個128維方向參數

上一步中確定了每幅圖中的特征點,為每個特征點計算一個方向,依照這個方向做進一步的計算, 利用關鍵點鄰域像素的梯度方向分布特性為每個關鍵點指定方向參數,使算子具備旋轉不變性。

為(x,y)處梯度的模值和方向公式。其中L所用的尺度為每個關鍵點各自所在的尺度。

至此,圖像的關鍵點已經檢測完畢,每個關鍵點有三個信息:位置,所處尺度、方向,由此可以確定一個SIFT特征區域。

在實際計算時,我們在以關鍵點為中心的鄰域窗口內采樣,並用直方圖統計鄰域像素的梯度方向。梯度直方圖的范圍是0~360度,其中每45度一個柱,總共8個柱, 或者每10度一個柱,總共36個柱。Lowe論文中還提到要使用高斯函數對直方圖進行平滑,減少突變的影響。直方圖的峰值則代表了該關鍵點處鄰域梯度的主方向,即作為該關鍵點的方向

直方圖中的峰值就是主方向,其他的達到最大值80%的方向可作為輔助方向

 

該步中將建立所有scale中特征點的描述子(128維)

關鍵點描述子的生成

通過對關鍵點周圍圖像區域分塊,計算塊內梯度直方圖,生成具有獨特性的向量,這個向量是該區域圖像信息的一種抽象,具有唯一性。

首先將坐標軸旋轉為關鍵點的方向,以確保旋轉不變性。以關鍵點為中心取8×8的窗口。

16*16的圖中其中1/4的特征點梯度方向及scale,右圖為其加權到8個主方向后的效果。

圖左部分的中央為當前關鍵點的位置,每個小格代表關鍵點鄰域所在尺度空間的一個像素,利用公式求得每個像素的梯度幅值與梯度方向,箭頭方向代表該像素的梯度方向,箭頭長度代表梯度模值,然后用高斯窗口對其進行加權運算。

圖中藍色的圈代表高斯加權的范圍(越靠近關鍵點的像素梯度方向信息貢獻越大)。然后在每4×4的小塊上計算8個方向的梯度方向直方圖,繪制每個梯度方向的累加值,即可形成一個種子點,如圖右部分示。此圖中一個關鍵點由2×2共4個種子點組成,每個種子點有8個方向向量信息。這種鄰域方向性信息聯合的思想增強了算法抗噪聲的能力,同時對於含有定位誤差的特征匹配也提供了較好的容錯性。

同理,計算keypoint周圍的16*16的window中每一個像素的梯度,而且使用高斯下降函數降低遠離中心的權重。

每個4*4的1/16象限中,通過加權梯度值加到直方圖8個方向區間中的一個,計算出一個梯度方向直方圖。

這樣就可以對每個feature形成一個4*4*8=128維的描述子,每一維都可以表示4*4個格子中一個的scale/orientation. 將這個向量歸一化之后,就進一步去除了光照的影響。

7、根據SIFT進行Match

生成了A、B兩幅圖的描述子,(分別是k1*128維和k2*128維),就將兩圖中各個scale(所有scale)的描述子進行匹配,匹配上128維即可表示兩個特征點match上了。實際計算中,為了增強匹配的穩健性,Lowe建議對每個關鍵點使用4×4共16個種子點來描述,這樣對於一個關鍵點就可以產生128個數據,即最終形成128維的SIFT特征向量。此時SIFT特征向量已經去除了尺度變化、旋轉等幾何變形因素的影響,再繼續將特征向量的長度歸一化,則可以進一步去除光照變化的影響。 

當兩幅圖像的SIFT特征向量生成后,下一步我們采用關鍵點特征向量的歐式距離來作為兩幅圖像中關鍵點的相似性判定度量。取圖像1中的某個關鍵點,並找出其與圖像2中歐式距離最近的前兩個關鍵點,在這兩個關鍵點中,如果最近的距離除以次近的距離少於某個比例閾值,則接受這一對匹配點。降低這個比例閾值,SIFT匹配點數目會減少,但更加穩定。

為了排除因為圖像遮擋和背景混亂而產生的無匹配關系的關鍵點,Lowe提出了比較最近鄰距離與次近鄰距離的方法,距離比率ratio小於某個閾值的認為是正確匹配。因為對於錯誤匹配,由於特征空間的高維性,相似的距離可能有大量其他的錯誤匹配,從而它的ratio值比較高。Lowe推薦ratio的閾值為0.8。但作者對大量任意存在尺度、旋轉和亮度變化的兩幅圖片進行匹配,結果表明ratio取值在0. 4~0. 6之間最佳,小於0. 4的很少有匹配點,大於0. 6的則存在大量錯誤匹配點。(如果這個地方你要改進,最好給出一個匹配率和ration之間的關系圖,這樣才有說服力)作者建議ratio的取值原則如下:

ratio=0. 4 對於准確度要求高的匹配;
ratio=0. 6 對於匹配點數目要求比較多的匹配; 
ratio=0. 5 一般情況下。
也可按如下原則:當最近鄰距離<200時ratio=0. 6,反之ratio=0. 4。ratio的取值策略能排分錯誤匹配點。

 

8、補充

(1)局部特征

局部特征從總體上說是圖像或在視覺領域中一些有別於其周圍的地方,通常描述一塊區域,具有高度可區分性

局部特征的好壞直接會決定着后面分類、識別是否會得到一個好的結果。

(2)局部特征需要具備的特性

重復性
可區分性
准確性
數量以及效率
不變性
(3)局部特征提取算法SIFT
SIFT算法由D.G.Lowe 1999年提出,2004年完善總結。后來Y.Ke將其描述子部分 用PCA代替直方圖的方式,對其進行改進。

在尺度空間尋找極值點,提取位置,尺度,旋轉不變量;

SIFT特征是圖像的局部特征,其對旋轉、尺度縮放、亮度變化保持不變性,對視角變化、仿射變換、噪聲也保持一定程度的穩定性;

獨特性好,信息量豐富,適用於在海量特征數據庫中進行快速、准確的匹配;

多量性,即使少數的幾個物體也可以產生大量SIFT特征向量;

可擴展性,可以很方便的與其他形式的特征向量進行聯合;

(4)尺度空間理論

目的是模擬圖像數據的多尺度特征;

其基本思想是在視覺信息圖像信息處理模型中引入一個被視為尺度的參數, 通過連續變化尺度參數獲得不同尺度下的視覺處理信息, 然后綜合這些信息以深入地挖掘圖像的本質特征。

(5)描述子生成過程

以極值點為中心,以此點所處於的高斯尺度sigma值作為半徑因子。對於遠離中心點的梯度值降低對其所處區域的直方圖的貢獻,防止一些突變的影響。對於遠離中心點的梯度值降低對其所處區域的直方圖的貢獻,防止一些突變的影響。

(6)歸一化處理

在求出4*4*8的128維特征向量后,此時SIFT特征向量已經去除了尺度變化、旋轉等幾何變形因素的影響。而圖像的對比度變化相當於每個像素點乘上一個因子,光照變化是每個像素點加上一個值,但這些對圖像歸一化的梯度沒有影響。因此將特征向量的長度歸一化,則可以進一步去除光照變化的影響。對於一些非線性的光照變化,SIFT並不具備不變性,但由於這類變化影響的主要是梯度的幅值變化,對梯度的方向影響較小,因此作者通過限制梯度幅值的值來減少這類變化造成的影響。

(7)PCA-SIFT算法

PCA-SIFT與標准SIFT有相同的亞像素位置,尺度和主方向。但在第4步計算描述子的設計,采用的主成分分析的技術。

下面介紹一下其特征描述子計算的部分:

用特征點周圍的41×41的像斑計算它的主元,並用PCA-SIFT將原來的2×39×39維的向量降成20維,以達到更精確的表示方式。

它的主要步驟為,對每一個關鍵點:在關鍵點周圍提取一個41×41的像斑於給定的尺度,旋轉到它的主方向 ;計算39×39水平和垂直的梯度,形成一個大小為3042的矢量;用預先計算好的投影矩陣n×3042與此矢量相乘;這樣生成一個大小為n的PCA-SIFT描述子。

(8)128維關鍵點描述子生成步驟

1、確定計算描述子所需要的圖像區域

描述子梯度方向直方圖由關鍵點所在尺度的模糊圖像計算產生。圖像區域半徑為:

σ(sigma)是關鍵點所在的octave的尺度,d=4

 2、將坐標移動至關鍵點主方向

旋轉后的新坐標為:

θ是旋轉的角度

3、在圖像半徑區域內對每個像素點求梯度幅值和方向,然后對每個梯度幅值乘以高斯權重參數,生成方向直方圖。

4、每個4x4的區域內得到一個2x2的描述子,即2x2的區域得到一個描述子(種子點)。一共得到16個描述子。

5、描述子向量元素門限化后規范化

方向直方圖每個方向上的梯度幅值限制在一定門限值以下(門限值一般取0.2)。

規范化:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM