1. 程式人生 > >特徵提取演算法--Sift

特徵提取演算法--Sift

SIFT(Scale-invariant feature transform)是一種檢測區域性特徵的演算法,它在空間尺度中對一副圖尋找極值點,並提取出其位置、尺度、旋轉不變數等描述子得到特徵並進行影象特徵點匹配,用來偵測與描述影像中的區域性性特徵。
它是基於物體上的一些區域性特徵SIFT特徵是影象的區域性特徵,其對旋轉、尺度縮放、亮度變化保持不變性,對視角變化、仿射變換、噪聲也保持一定程度的穩定性;使用 SIFT特徵描述對於部分物體遮蔽的偵測率也相當高,甚至只需要3個以上的SIFT物體特徵就足以計算出位置與方位。

目標的自身狀態、場景所處的環境和成像器材的成像特性等因素影響影象配準/目標識別跟蹤的效能。sift可以解決這些問題:
1. 目標的旋轉、縮放、平移(RST)
2. 影象仿射/投影變換(視點viewpoint)
3. 光照影響(illumination)
4. 目標遮擋(occlusion)
5. 雜物場景(clutter)
6. 噪聲
SIFT在影象的不變特徵提取方面擁有無與倫比的優勢,但並不完美,仍然存在:
1. 實時性不高。
2. 有時特徵點較少。
3. 對邊緣光滑的目標無法準確提取特徵點。
等缺點,如下圖7.1所示,對模糊的影象和邊緣平滑的影象,檢測出的特徵點過少,對圓更是無能為力。近來不斷有人改進,其中最著名的有SURF和CSIFT。
這裡寫圖片描述


1).
SIFT演算法的實質是在不同的尺度空間上查詢關鍵點(特徵點),並計算出關鍵點的方向。SIFT所查詢到的關鍵點是一些十分突出,不會因光照,仿射變換和噪音等因素而變化的點,如角點、邊緣點、暗區的亮點及亮區的暗點等。
Lowe將SIFT演算法分解為如下幾步:
1. 輸入影象,建議做double(width*=2, height*=2, size*=4), 並高斯過濾進行平滑。
2. 由圖片size決定建幾個塔,每塔幾層影象(一般3-5層)。0塔的第0層是原始影象(或你double後的影象),往上每一層是對其下一層進行Laplacian變換(高斯卷積,其中sigma值漸大,例如可以是sigma, k*sigma, k*k*sigma…),直觀上看來越往上圖片越模糊。塔間的圖片是降取樣關係,例如1塔的第0層可以由0塔的第3層down sample得到,然後進行與0塔類似的高斯卷積操作。
3. 構建DoG金字塔。DoG金字塔由上一步生成的Gauss金字塔計算得到,塔數相同,每塔層數少1,因為DoG的每一層由Gauss的相鄰兩層相減得到。
4. 在DoG塔裡進行極值點檢測,並根據使用者預設的對比度閾值、主曲率閾值去除不合法特徵點。極值點檢測用的Non-Maximal Suppression,即在3*3*3個點中進行灰度值比較,最小或最大才過關。
5. 計算每個特徵點的尺度。注意塔間尺度關係,sigma*2.0^(octvs+intvl/intvls)
6. 計算每個特徵點的梯度模值和方向。用特徵點周圍一個矩陣區域(patch)內的點來描述該特徵點,用的直方圖進行模值統計並尋找主方向,主方向可以不止一個。
7. 最後要生成64D或128D的特徵描述符了。對齊主方向,計算方向直方圖2D陣列,假如每個直方圖有8bin,那麼64D(2*2*8bin)或128D(4*4*8bin)。

2).構建尺度空間
SIFT演算法是在不同的尺度空間上查詢關鍵點,而尺度空間的獲取需要使用高斯模糊來實現,高斯卷積核是實現尺度變換的唯一變換核,並且是唯一的線性核。
高斯模糊是一種影象濾波器,它使用正態分佈(高斯函式)計算模糊模板,並使用該模板與原影象做卷積運算,達到模糊影象的目的。
N維空間正態分佈方程為:這裡寫圖片描述
其中,是正態分佈的標準差,值越大,影象越模糊(平滑)。r為模糊半徑,模糊半徑是指模板元素到模板中心的距離。如二維模板大小為m*n,則模板上的元素(x,y)對應的高斯計算公式為:
這裡寫圖片描述
理論上來講,影象中每點的分佈都不為零,這也就是說每個畫素的計算都需要包含整幅影象。在實際應用中,在計算高斯函式的離散近似時,在大概3σ距離之外的畫素都可以看作不起作用,這些畫素的計算也就可以忽略。通常,影象處理程式只需要計算(6σ+1)x(6σ+1)的矩陣就可以保證相關畫素影響。
根據σ的值,計算出高斯模板矩陣的大小(6σ+1)x(6σ+1),計算高斯模板矩陣的值,與原影象做卷積,即可獲得原影象的平滑(高斯模糊)影象。為了確保模板矩陣中的元素在[0,1]之間,需將模板矩陣歸一化。高斯模板是中心對稱的。
這裡寫圖片描述


使用二維的高斯模板達到了模糊影象的目的,但是會因模板矩陣的關係而造成邊緣影象缺失(2.3 b,c),越大,缺失畫素越多,丟棄模板會造成黑邊(2.3 d)。更重要的是當變大時,高斯模板(高斯核)和卷積運算量將大幅度提高。根據高斯函式的可分離性,可對二維高斯模糊函式進行改進。
高斯函式的可分離性是指使用二維矩陣變換得到的效果也可以通過在水平方向進行一維高斯矩陣變換加上豎直方向的一維高斯矩陣變換得到。從計算的角度來看,這是一項有用的特性,因為這樣只需要(nxMxN)+(mxMxN)次計算,而二維不可分的矩陣則需要(nxmxMxN)次計算,其中,m,n為高斯矩陣的維數,M,N為二維影象的維數。
兩次一維的高斯卷積將消除二維高斯矩陣所產生的邊緣, 對用模板矩陣超出邊界的部將不做卷積計算,只在影象之內的部分做卷積。
這裡寫圖片描述

尺度空間
尺度空間使用高斯金字塔表示。Tony Lindeberg指出尺度規範化的LoG(Laplacion of Gaussian)運算元具有真正的尺度不變性,Lowe使用高斯差分金字塔近似LoG運算元,在尺度空間檢測穩定的關鍵點。
尺度空間理論的基本思想是:在影象資訊處理模型中引入一個被視為尺度的引數,通過連續變化尺度引數獲得多尺度下的尺度空間表示序列,對這些序列進行尺度空間主輪廓的提取,並以該主輪廓作為一種特徵向量,實現邊緣、角點檢測和不同解析度上的特徵提取等。
尺度空間方法將傳統的單尺度影象資訊處理技術納入尺度不斷變化的動態分析框架中,更容易獲取影象的本質特徵。尺度空間中各尺度影象的模糊程度逐漸變大,能夠模擬人在距離目標由近到遠時目標在視網膜上的形成過程。
尺度空間滿足視覺不變性。該不變性的視覺解釋如下:當我們用眼睛觀察物體時,一方面當物體所處背景的光照條件變化時,視網膜感知影象的亮度水平和對比度是不同的,因此要求尺度空間運算元對影象的分析不受影象的灰度水平和對比度變化的影響,即滿足灰度不變性和對比度不變性。另一方面,相對於某一固定座標系,當觀察者和物體之間的相對位置變化時,視網膜所感知的影象的位置、大小、角度和形狀是不同的,因此要求尺度空間運算元對影象的分析和影象的位置、大小、角度以及仿射變換無關,即滿足平移不變性、尺度不變性、歐幾里德不變性以及仿射不變性。
一個影象的尺度空間,定義為一個變化尺度的高斯函式與原影象的卷積。
這裡是卷積運算
這裡是卷積運算,(x, y)代表影象的畫素位置。σ是尺度空間因子,值越小表示影象被平滑的越少,相應的尺度也就越小。大尺度對應於影象的概貌特徵,小尺度對應於影象的細節特徵。

高斯金字塔的構建
尺度空間在實現時使用高斯金字塔表示,高斯金字塔的構建分為兩部分:
1. 對影象做不同尺度的高斯模糊;
2. 對影象做降取樣(隔點取樣)。
這裡寫圖片描述

影象的金字塔模型是指,將原始影象不斷降階取樣,得到一系列大小不一的影象,由大到小,從下到上構成的塔狀模型。原影象為金子塔的第一層,每次降取樣所得到的新影象為金字塔的一層(每層一張影象),每個金字塔共n層。金字塔的層數根據影象的原始大小和塔頂影象的大小共同決定,其計算公式如下:
這裡寫圖片描述
其中M,N為原影象的大小,t為塔頂影象的最小維數的對數值。如,對於大小為512*512的影象,金字塔上各層影象的大小如表3.1所示,當塔頂影象為4*4時,n=7,當塔頂影象為2*2時,n=8。
這裡寫圖片描述
為了讓尺度體現其連續性,高斯金字塔在簡單降取樣的基礎上加上了高斯濾波。將影象金字塔每層的一張影象使用不同引數做高斯模糊,使得金字塔的每層含有多張高斯模糊影象,將金字塔每層多張影象合稱為一組(Octave),金字塔每層只有一組影象,組數和金字塔層數相等,每組含有多張(也叫層Interval)影象。另外,降取樣時,高斯金字塔上一組影象的初始影象(底層影象)是由前一組影象的倒數第三張影象隔點取樣得到的。
為了在每組中檢測S個尺度的極值點,則DOG金字塔每組需S+2層影象,而DOG金字塔由高斯金字塔相鄰兩層相減得到,則高斯金字塔每組需S+3層影象,實際計算時S在3到5之間。

高斯差分金字塔
高斯差分函式的極大值和極小值同其它的特徵提取函式,例如:梯度,Hessian或Harris角特徵比較,能夠產生最穩定的影象特徵。使用更高效的高斯差分運算元進行極值檢測。為了有效的在尺度空間檢測到穩定的關鍵點,提出了高斯差分尺度空間(DOG scale-space)。利用不同尺度的高斯差分核與影象卷積生成。
這裡寫圖片描述
在實際計算時,使用高斯金字塔每組中相鄰上下兩層影象相減,得到高斯差分影象,進行極值檢測。
這裡寫圖片描述
這裡寫圖片描述
尺度空間的所有取值,i為octave的塔數(第幾個塔),s為每塔層數

構建尺度空間需確定的引數
σ—尺度空間座標
O—組(octave)數
S— 組內層數
在上述尺度空間中,O和S, σ的關係如下:
這裡寫圖片描述
其中σ0是基準層尺度,o為組octave的索引,s為組內層的索引。關鍵點的尺度座標σ就是按關鍵點所在的組和組內的層計算得到。
將第0層的初始尺度定為1.6(最模糊),圖片的初始尺度定為0.5(最清晰)。在檢測極值點前對原始影象的高斯平滑以致影象丟失高頻資訊,所以 Lowe 建議在建立尺度空間前首先對原始影象長寬擴充套件一倍來生成第-1組,以保留原始影象資訊,增加特徵點數量。尺度越大影象越模糊。 我們假定初始的輸入影象為了抗擊混淆現象,已經對其進行σ-1=0.5的高斯模糊,如果輸入影象的尺寸用雙線性插值擴大一倍,那麼相當於σ-1=1。

k為組內總層數的倒數,即這裡寫圖片描述
在構建高斯金字塔時,組內每層的尺度座標按如下公式計算:
這裡寫圖片描述
其中σ0初始尺度,lowe取σ0=1.6 ,S=3; s為組內的層索引,不同組相同層的組內尺度座標σ(s)相同,組內下一層影象是由前一層影象按σ(s)進行高斯模糊所得。
上式用於一次生成組內不同尺度的高斯影象,而在計算組內某一層影象的尺度時,直接使用如下公式進行計算:
這裡寫圖片描述
該組內尺度在方向分配和特徵描述時確定取樣視窗的大小,就是確定那個高斯函式的σ值。
則構成高斯差分金字塔的公式:
這裡寫圖片描述
對於一幅影象I,建立其在不同尺度(scale)的影象,也稱為組(octave),這是為了scale-invariant,也就是在任何尺度都能夠有對應的特徵點,第一個組的scale為原圖大小,後面每個octave為上一個octave降取樣的結果,即原圖的1/4(長寬分別減半),構成下一個組(高一組金字塔)。

3). LoG近似DoG找到關鍵點<檢測DOG尺度空間極值點>
為了尋找尺度空間的極值點,每一個取樣點要和它所有的相鄰點比較,看其是否比它的影象域和尺度域的相鄰點大或者小。如圖所示,中間的檢測點和它同尺度的8個相鄰點和上下相鄰尺度對應的9×2個點共26個點比較,以確保在尺度空間和二維影象空間都檢測到極值點。 一個點如果在DOG尺度空間本層以及上下兩層的26個領域中是最大或最小值時,就認為該點是影象在該尺度下的一個特徵點,如圖所示。
這裡寫圖片描述
同一組中的相鄰尺度(由於k的取值關係,肯定是上下層)之間進行尋找
這裡寫圖片描述
為了在每組中檢測S個尺度的極值點滿足尺度變化的連續性,則DOG金字塔每組需S+2層影象,而DOG金字塔由高斯金字塔相鄰兩層相減得到,則高斯金字塔每組需S+3層影象,實際計算時S在3到5之間。當然這樣產生的極值點並不全都是穩定的特徵點,因為某些極值點響應較弱,而且DOG運算元會產生較強的邊緣響應。
這裡寫圖片描述
使用Difference of Gaussian影象的極大極小值近似尋找特徵點.DOG運算元計算簡單,是尺度歸一化的LoG運算元的近似,有關DOG尋找特徵點的介紹及方法詳見http://blog.csdn.net/abcjennifer/article/details/7639488,極值點檢測用的Non-Maximal Suppression。

除去不好的特徵點
這一步本質上要去掉DoG局部曲率非常不對稱的畫素。以上方法檢測到的極值點是離散空間的極值點,通過擬和三維二次函式以精確確定關鍵點的位置和尺度(達到亞畫素精度),同時去除低對比度的關鍵點和不穩定的邊緣響應點(因為DoG運算元會產生較強的邊緣響應),以增強匹配穩定性、提高抗噪聲能力,在這裡使用近似Harris Corner檢測器。
離散空間的極值點並不是真正的極值點,圖4.1顯示了二維函式離散空間得到的極值點與連續空間極值點的差別。利用已知的離散空間點插值得到的連續空間極值點的方法叫做子畫素插值(Sub-pixel Interpolation)。
這裡寫圖片描述
為了提高關鍵點的穩定性,需要對尺度空間DoG函式進行曲線擬合。利用DoG函式在尺度空間的Taylor展開式(擬合函式)為:
這裡寫圖片描述
其中這裡寫圖片描述,。求導並讓方程等於零,可以得到極值點的偏移量為:
這裡寫圖片描述
在已經檢測到的特徵點中,要去掉低對比度的特徵點和不穩定的邊緣響應點。去除低對比度的點:把公式(2)代入公式(1),即在DoG Space的極值點處D(x)取值,只取前兩項可得:
這裡寫圖片描述
其中這裡寫圖片描述,代表相對插值中心的偏移量,當它在任一維度上的偏移量大於0.5時(即x或y或),意味著插值中心已經偏移到它的鄰近點上,所以必須改變當前關鍵點的位置。同時在新的位置上反覆插值直到收斂;也有可能超出所設定的迭代次數或者超出影象邊界的範圍,此時這樣的點應該刪除,在Lowe中進行了5次迭代。另外,這裡寫圖片描述過小的點易受噪聲的干擾而變得不穩定,所以將小於某個經驗值(Lowe論文中使用0.03,Rob Hess等人實現時使用0.04/S)的極值點刪除。同時,在此過程中獲取特徵點的精確位置(原位置加上擬合的偏移量)以及尺度(這裡寫圖片描述)。

邊緣響應的去除
一個定義不好的高斯差分運算元的極值在橫跨邊緣的地方有較大的主曲率,而在垂直邊緣的方向有較小的主曲率。主曲率通過一個2×2 的Hessian矩陣H求出:
這裡寫圖片描述
D的主曲率和H的特徵值成正比,H的特徵值α和β代表x和y方向的梯度,令α為較大特徵值,β為較小的特徵值,則
這裡寫圖片描述
第一個公式表示矩陣H對角線元素之和,第二個表示矩陣H的行列式。
這裡寫圖片描述
這裡寫圖片描述
(r + 1)2/r的值在兩個特徵值相等的時候最小,隨著r的增大而增大,即在某一個方向的梯度值越大,而在另一個方向的梯度值越小,而邊緣恰恰就是這種情況。所以為了剔除邊緣響應點,需要讓該比值小於一定的閾值,因此,為了檢測主曲率是否在某域值r下,只需檢測
這裡寫圖片描述
if (α+β)/ αβ> (r+1)2/r, throw it out. 在Lowe的文章中,取r=10。
這裡寫圖片描述

給特徵點賦值一個128維方向引數
確定了每幅圖中的特徵點,為每個特徵點計算一個方向,依照這個方向做進一步的計算, 利用關鍵點鄰域畫素的梯度方向分佈特性為每個關鍵點指定方向引數,使運算元具備旋轉不變性。需要利用影象的區域性特徵為給每一個關鍵點分配一個基準方向。使用影象梯度的方法求取區域性結構的穩定方向。對於在DOG金字塔中檢測出的關鍵點點,採集其所在高斯金字塔影象3σ鄰域視窗內畫素的梯度和方向分佈特徵。梯度的模值和方向如下:
這裡寫圖片描述
L為關鍵點所在的尺度空間值,按Lowe的建議,梯度的模值m(x,y)按這裡寫圖片描述 的高斯分佈加成,按尺度取樣的3σ原則,鄰域視窗半徑為這裡寫圖片描述
在完成關鍵點的梯度計算後,使用直方圖統計鄰域內畫素的梯度和方向。梯度直方圖將0~360度的方向範圍分為36個柱(bins),其中每柱10度。如圖5.1所示,直方圖的峰值方向代表了關鍵點的主方向,(為簡化,圖中只畫了八個方向的直方圖)。隨著距中心點越遠的領域其對直方圖的貢獻也響應減小.Lowe論文中還提到要使用高斯函式對直方圖進行平滑,減少突變的影響。
這裡寫圖片描述
方向直方圖的峰值則代表了該特徵點處鄰域梯度的方向,以直方圖中最大值作為該關鍵點的主方向。為了增強匹配的魯棒性,只保留峰值大於主方向峰值80%的方向作為該關鍵點的輔方向。因此,對於同一梯度值的多個峰值的關鍵點位置,在相同位置和尺度將會有多個關鍵點被建立但方向不同。僅有15%的關鍵點被賦予多個方向,但可以明顯的提高關鍵點匹配的穩定性。實際程式設計實現中,就是把該關鍵點複製成多份關鍵點,並將方向值分別賦給這些複製後的關鍵點,並且,離散的梯度方向直方圖要進行插值擬合處理,來求得更精確的方向角度值,檢測結果如圖5.2所示。
這裡寫圖片描述
至此,將檢測出的含有位置、尺度和方向的關鍵點即是該影象的SIFT特徵點。
通過對關鍵點周圍影象區域分塊,計算塊內梯度直方圖,生成具有獨特性的向量,這個向量是該區域影象資訊的一種抽象,具有唯一性。

4)關鍵點特徵描述
接下來就是為每個關鍵點建立一個描述符,用一組向量將這個關鍵點描述出來,使其不隨各種變化而改變,比如光照變化、視角變化等等。這個描述子不但包括關鍵點,也包含關鍵點周圍對其有貢獻的畫素點,並且描述符應該有較高的獨特性,以便於提高特徵點正確匹配的概率。
SIFT描述子是關鍵點鄰域高斯影象梯度統計結果的一種表示。通過對關鍵點周圍影象區域分塊,計算塊內梯度直方圖,生成具有獨特性的向量,這個向量是該區域影象資訊的一種抽象,具有唯一性。
Lowe建議描述子使用在關鍵點尺度空間內4*4的視窗中計算的8個方向的梯度資訊,共4*4*8=128維向量表徵。表示步驟如下:

  1. 確定計算描述子所需的影象區域
    特徵描述子與特徵點所在的尺度有關,因此,對梯度的求取應在特徵點對應的高斯影象上進行。將關鍵點附近的鄰域劃分為d*d(Lowe建議d=4)個子區域,每個子區域做為一個種子點,每個種子點有8個方向。每個子區域的大小與關鍵點方向分配時相同,即每個區域有這裡寫圖片描述 個子畫素,為每個子區域分配邊長為這裡寫圖片描述的矩形區域進行取樣(個子畫素實際用邊長為這裡寫圖片描述的矩形區域即可包含,但由式這裡寫圖片描述這裡寫圖片描述不大,為了簡化計算取其邊長為這裡寫圖片描述並且取樣點宜多不宜少)。考慮到實際計算時,需要採用雙線性插值,所需影象視窗邊長為這裡寫圖片描述 。在考慮到旋轉因素(方便下一步將座標軸旋轉到關鍵點的方向),如下圖所示,實際計算所需的影象區域半徑為:
    這裡寫圖片描述計算結果四捨五入取整。
    這裡寫圖片描述

  2. 將座標軸旋轉為關鍵點的方向,以確保旋轉不變性,如6.2所示。
    這裡寫圖片描述
    旋轉後鄰域內取樣點的新座標為:這裡寫圖片描述

  3. 將鄰域內的取樣點分配到對應的子區域內,將子區域內的梯度值分配到8個方向上,計算其權值。
    旋轉後的取樣點座標在半徑為radius的圓內被分配到這裡寫圖片描述的子區域,計算影響子區域的取樣點的梯度和方向,分配到8個方向上。
    旋轉後的取樣點這裡寫圖片描述落在子區域的下標為這裡寫圖片描述
    Lowe建議子區域的畫素的梯度大小按的高斯加權計算,即
    這裡寫圖片描述
    其中a,b為關鍵點在高斯金字塔影象中的位置座標。
  4. 插值計算每個種子點八個方向的梯度。
    這裡寫圖片描述
    所得采樣點在子區域中的下標這裡寫圖片描述(圖中藍色視窗內紅色點)線性插值,計算其對每個種子點的貢獻。如圖中的紅色點,落在第0行和第1行之間,對這兩行都有貢獻。對第0行第3列種子點的貢獻因子為dr,對第1行第3列的貢獻因子為1-dr,同理,對鄰近兩列的貢獻因子為dc和1-dc,對鄰近兩個方向的貢獻因子為do和1-do。則最終累加在每個方向上的梯度大小為:
    這裡寫圖片描述
    其中k,m,n為0或為1。
    這裡寫圖片描述
    圖左部分的中央為當前關鍵點的位置,每個小格代表關鍵點鄰域所在尺度空間的一個畫素,利用公式求得每個畫素的梯度幅值與梯度方向,箭頭方向代表該畫素的梯度方向,箭頭長度代表梯度模值,然後用高斯視窗對其進行加權運算。
    圖中藍色的圈代表高斯加權的範圍(越靠近關鍵點的畫素梯度方向資訊貢獻越大)。然後在每4×4的小塊上計算8個方向的梯度方向直方圖,繪製每個梯度方向的累加值,即可形成一個種子點,如圖右部分示。此圖中一個關鍵點由2×2共4個種子點組成,每個種子點有8個方向向量資訊。這種鄰域方向性資訊聯合的思想增強了演算法抗噪聲的能力,同時對於含有定位誤差的特徵匹配也提供了較好的容錯性。
    這裡寫圖片描述
    計算keypoint周圍的16*16的window中每一個畫素的梯度,而且使用高斯下降函式降低遠離中心的權重。我們將特徵點周圍16*16的視窗分解為16個4*4的子視窗。在每個4*4的子視窗中,計算出梯度的大小和方向,並用一個8個bin的直方圖來統計子視窗的平均方向,梯度方向在0-44度範圍的畫素點被放到第一個bin中,45-89度範圍的畫素點被放到下一個bin中,依此類推。同樣加入到bin中的量依賴於該畫素點梯度的大小。與之前不同的是,加入的量不僅與畫素點的梯度大小相關,而且還依賴離特徵點的距離,這樣遠離特徵點的畫素點會加入較少的量到直方圖中。這通過一個高斯加權函式來實現,這個函式生成一個加權值(像一個二維的鐘形曲線),用它乘以16*16的視窗中每個畫素點的梯度大小,得到加權後的梯度大小,距離特徵點越遠,要加入直方圖的畫素點的梯度大小越小。
    這樣每個4*4的子視窗都對應一個8 bin的直方圖,且直方圖中加入的值是畫素的用高斯加權後的梯度大小,而特徵點周圍16*16的視窗中包含16個4*4的子視窗,共有16*8=128個數,然後將這128個數組成的向量進行單位化,單位化後的128維向量就是SIFT的描述子。

  5. 如上統計的4*4*8=128個梯度資訊即為該關鍵點的特徵向量。特徵向量形成後,為了去除光照變化的影響,需要對它們進行歸一化處理,對於影象灰度值整體漂移,影象各點的梯度是鄰域畫素相減得到,所以也能去除。得到的描述子向量為這裡寫圖片描述,歸一化後的特徵向量為這裡寫圖片描述
    這裡寫圖片描述

  6. 描述子向量門限。對於一些非線性的光照變化,SIFT並不具備不變性,但由於這類變化影響的主要是梯度的幅值變化,對梯度的方向影響較小,因此作者通過限制梯度幅值的值來減少這類變化造成的影響。相機飽和度變化對造成某些方向的梯度值過大,而對方向的影響微弱。因此設定門限值(向量歸一化後,一般取0.2)截斷較大的梯度值。然後,再進行一次歸一化處理,提高特徵的鑑別性。

  7. 按特徵點的尺度對特徵描述向量進行排序。
    至此,SIFT特徵描述向量生成。

5)根據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的取值策略能排分錯誤匹配點。

6)PCA-SIFT演算法
  •PCA-SIFT與標準SIFT有相同的亞畫素位置,尺度和主方向。但在第4步計算描述子的設計,採用的主成分分析的技術。
  •下面介紹一下其特徵描述子計算的部分:
  •用特徵點周圍的41×41的像斑計算它的主元,並用PCA-SIFT將原來的2×39×39維的向量降成20維,以達到更精確的表示方式。
  •它的主要步驟為,對每一個關鍵點:在關鍵點周圍提取一個41×41的像斑於給定的尺度,旋轉到它的主方向 ;計算39×39水平和垂直的梯度,形成一個大小為3042的向量;用預先計算好的投影矩陣n×3042與此向量相乘;這樣生成一個大小為n的PCA-SIFT描述子。

相關推薦

特徵提取演算法--Sift

SIFT(Scale-invariant feature transform)是一種檢測區域性特徵的演算法,它在空間尺度中對一副圖尋找極值點,並提取出其位置、尺度、旋轉不變數等描述子得到特徵並進行影象特徵點匹配,用來偵測與描述影像中的區域性性特徵。 它是基於物

影象處理中,SIFT,FAST,MSER,STAR等特徵提取演算法的比較與分析(利用openCV實現)

本人為研究生,最近的研究方向是物體識別。所以就將常用的幾種特徵提取方式做了一個簡要的實驗和分析。這些實驗都是藉助於openCV在vs2010下完成的。基本上都是使用的openCV中內建的一些功能函式。 1. SIFT演算法 尺度不變特徵轉換(Scale-inva

SIFT,SURF,ORB,FAST,BRISK 特徵提取演算法比較

SIFT,SURF,ORB,FAST 特徵提取演算法比較 影象處理的基礎就是要進行特徵點的提取,feature(interest points) detect 的方法也在不斷的進步,邊檢測,角點檢測,直線檢測,圓檢測,SIFT特徵點檢測,同時描述符也在發展

opencv 特徵提取演算法 SIFT SURF ORB FAST LBP學習(一)

opencv 特徵點提取演算法 SIFT SURF ORB FAST LBP學習 特徵點: 又稱興趣點、關鍵點,它是影象中突出且具有代表意義的一些點,通過這些點我們可以用來表徵、識別影象、進行影象配準、進行3D重建等 旋轉不變性和尺度不變性 角點:

SIFT特徵提取演算法

學到SIFT看到了參考了最下面的四篇文章,最後綜合起來,根據自己的理解,按著自己的想法,手敲了下面的內容,感覺好長,不過希望對大家有用。           SIFT(Scale-inv

opencv 特徵提取演算法 SIFT SURF ORB FAST LBP學習(二)

MainActivity.java: ... public int doFeatureDetect(int detect_type) { int length0, length1; Mat img_object

特徵提取演算法提取二進位制後面的特徵資料,使用Java流實現

幫別人解決一個問題:在搞圖片特徵相似度檢索的東西,特徵提取演算法提取出來的二進位制特徵資料,想要讀取二進位制檔案的每一行固定位之後的資料有啥好的辦法沒? 首先讀取二進位制檔案,考慮到使用位元組流,但是不能解決如何判斷換行的問題,綜上,本人是先使用BufferedReader流讀取一行的資料,

影象演算法之七:特徵提取演算法之LBP

     【2016/9/29】今天重點學習了紋理特徵提取演算法LBP,這個演算法可以用於紋理特徵提取和人臉識別,應用比較廣泛。首先介紹LBP演算法的原理,然後是LBP特徵的提取步驟,最後使用OpenCV實現了這個演算法。        LBP(Local Binary

特徵檢測】ORB特徵提取演算法

簡介         ORB的全稱是ORiented Brief,是文章ORB: an efficient alternative to SIFT or SURF中提出的一種新的角點檢測與特徵描述演算

OpenCV的ORB特徵提取演算法

看到OpenCV2.3.1裡面ORB特徵提取演算法也在裡面了,套用給的SURF特徵例子程式改為ORB特徵一直提示錯誤,型別不匹配神馬的,由於沒有找到示例程式,只能自己找答案。(ORB特徵論文:ORB: an efficient alternative to SIFT or S

特徵檢測】BRISK特徵提取演算法

// construct the image pyramids(構造影象金字塔) void BriskScaleSpace::constructPyramid(const cv::Mat& image) { // set correct size: pyramid_.clear();

【影象特徵提取7】SURF特徵提取演算法

本文大量參考了:http://blog.csdn.net/cxp2205455256/article/details/41311013;並且在此部落格的基礎之上,增加了一些新的內容。 一、SURF演算法的概述        SURF,英文的全稱為Speed Up Ro

特徵提取演算法

特徵提取是指將機器學習演算法不能識別的原始資料轉化為演算法可以識別的特徵的過程。比如說,文字是由一系列文字組成的,這些文字在經過分詞後會形成一個詞語集合,對於這些詞語集合(原始資料),機器學習演算法是不能直接使用的,我們需要將它們轉化成機器學習演算法可以識別的數值特徵(固

NLP中的語言模型及文字特徵提取演算法

本文以基本語言模型為邏輯主線,漫談NLP中兩個核心問題,即文字表示(Text Representation)與文字特徵提取(Feature Engineering)。通過本文你會發現,NLP的一部分經典演算法以及目前的發展都能夠通過文字表示串聯在一起,有個

特徵提取演算法簡單學習筆記

特徵提取:利用已有的特徵計算出一個抽象程度更高的特徵集,也指計算得到某個特徵的演算法特徵選擇:嘗試從初始的特徵集T中選擇對文字描述效果最好的特徵子集T’(重點是“選擇”)我的理解:特徵提取:需要進行特徵變換,改變向量空間特徵選擇:選擇,保留原始特徵意義------------

影象演算法之六:特徵提取演算法之LoG

1、產生:       Laplace運算元對通過影象進行操作實現邊緣檢測的時,對離散點和噪聲比較敏感。於是,首先對影象進行高斯暖卷積濾波進行降噪處理,再採用Laplace運算元進行邊緣檢測,就可

SURF特徵提取演算法原文翻譯與理解(上)

    SURF的優點以及與其他特徵提取演算法的比較前面總結過了,而且通過實際的使用發現演算法的穩定性著實很好,這裡分享一下對Speeded Up Robust Features原文的翻譯和理解,文章是去年翻譯的,那時候剛開始看特徵提取所以翻譯的比較細,才疏學淺,有的地方可

OpenCv學習筆記11--SURF特徵提取演算法

此opencv系列部落格只是為了記錄本人對<<opencv3計算機視覺-pyhton語言實現>>的學習筆記,所有程式碼在我的github主頁https://github.com/RenDong3/OpenCV_Notes. 歡迎star,不定時更新.

一些常用的語音特徵提取演算法

前言   語言是一種複雜的自然習得的人類運動能力。成人的特點是通過大約100塊肌肉的協調運動,每秒發出14種不同的聲音。說話人識別是指軟體或硬體接收語音訊號,識別語音訊號中出現的說話人,然後識別說話人的能力。特徵提取是通過將語音波形以相對最小的資料速率轉換為引數表示形式進行後續處理和分析來實現的。因此,可接

特徵提取與檢測(二) --- SIFT演算法

        SIFT(Scale-invariant feature transform)是一種檢測區域性特徵的演算法,該演算法通過求一幅圖中的特徵點(interest points,or corner points)及其有關scale 和 orien