尺度不變特征_第1頁
尺度不變特征_第2頁
尺度不變特征_第3頁
尺度不變特征_第4頁
尺度不變特征_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、SIFT特征分析與源碼解讀分類:機器視覺與模式識別2013-11-1922:2810人閱讀評論(0)收藏舉報目錄(?)+sift(Scale-invariantfeaturetransform)是一種檢測局部特征的算法,該算法通過求一幅圖中的特征點(interestpoints,orcornerpoints)及其有關(guān)scale和orientation的描述子得到特征并進行圖像特征點匹配,獲得了良好效果,詳細解析如下:算法描述SIFT特征不只具有尺度不變性,即使改變旋轉(zhuǎn)角度,圖像亮度或拍攝視角,仍然能夠得到好的檢測效果。整個算法分為以下幾個部分:構(gòu)建尺度空間這是一個初始化操作,尺度空間理論目的是

2、模擬圖像數(shù)據(jù)的多尺度特征。高斯卷積核是實現(xiàn)尺度變換的唯一線性核,于是一副二維圖像的尺度空間定義為:G(其中G(x,y,。)是尺度可變高斯函數(shù)(x,y)是空間坐標,是尺度坐標。o大小決定圖像的平滑程度,大尺度對應(yīng)圖像的概貌特征,小尺度對應(yīng)圖像的細節(jié)特征。大的o值對應(yīng)粗糙尺度(低分辨率),反之,對應(yīng)Dy.o=(G(耳4辰T)一G(足J(巧訥=L(x.y,k(j)一y,a).精細尺度(高分辨率)。為了有效的在尺度空間檢測到穩(wěn)定的關(guān)鍵點,提出了高斯差分尺度空間(DOGscale-space)。利用不同尺度的高斯差分核與圖像卷積生成。G(2ktjyAGCTG(2b)*下圖所示不同o下圖像尺度空間:G(2

3、it2cr)*7Gikal:心M二G(/b)忖關(guān)于尺度空間的理解說明:2k”中的2是必須的,尺度空間是連續(xù)的。在Lowe的論文中,將第0層的初始尺度定為1.6(最模糊),圖片的初始尺度定為0.5(最清晰).在檢測極值點前對原始圖像的高斯平滑以致圖像丟失高頻信息,所以Lowe建議在建立尺度空間前首先對原始圖像長寬擴展一倍,以保留原始圖像信息,增加特征點數(shù)量。尺度越大圖像越模糊。圖像金字塔的建立:對于一幅圖像I,建立其在不同尺度(scale)的圖像,也成為子八度(octave),這是為了scale-invariant,也就是在任何尺度都能夠有對應(yīng)的特征點,第一個子八度的scale為原圖大小,后面每

4、個octave為上一個octave降采樣的結(jié)果,即原圖的1/4(長寬分別減半),構(gòu)成下一個子八度(高一層金字塔)。*(next抽It(first;iDifferenceofSaurian(DOG)Gaussian宀)尺度空間的所有取值,i為octave的塔數(shù)(第幾個塔),s為每塔層數(shù)由圖片size決定建幾個塔,每塔幾層圖像S般為3-5層)。0塔的第0層是原始圖像(或你double后的圖像),往上每一層是對其下一層進行Laplacian變換(高斯卷積,其中O值漸大,例如可以是6k9,k*k*6),直觀上看來越往上圖片越模糊。塔間的圖片是降采樣關(guān)系,例如1塔的第0層可以由0塔的第3層downsam

5、ple得到,然后進行與0塔類似的高斯卷積操作。2.LoG近似DoG找到關(guān)鍵點檢測DOG尺度空間極值點為了尋找尺度空間的極值點,每一個采樣點要和它所有的相鄰點比較,看其是否比它的圖像域和尺度域的相鄰點大或者小。如圖所示,中間的檢測點和它同尺度的8個相鄰點和上下相鄰尺度對應(yīng)的9x2個點共26個點比較,以確保在尺度空間和二維圖像空間都檢測到極值點。一個點如果在DOG尺度空間本層以及上下兩層的26個領(lǐng)域中是最大或最小值時,就認為該點是圖像在該尺度下的一個特征點,如圖所示。同一組中的相鄰尺度(由于k的取值關(guān)系,肯定是上下層)之間進行尋找s=3的情況在極值比較的過程中,每一組圖像的首末兩層是無法進行極值比

6、較的,為了滿足尺度變化的連續(xù)性(下面有詳解),我們在每一組圖像的頂層繼續(xù)用高斯模糊生成了3幅圖像,高斯金字塔有每組S+3層圖像。DOG金字塔每組有S+2層圖像.這里有的童鞋不理解什么叫為了滿足尺度變化的連續(xù)性,現(xiàn)在做仔細闡述:k=i/s=2i/3,假設(shè)s=3,也就是每個塔里有3層,貝卩2那么按照上圖可得GaussSpace和DoGspace分別有3個(s個)和2個(s-1個)分量,在DoGspace中,1st-octave兩項分別是CT,ko;2nd-octave兩項分別是2o,2ko;由于無法比較極值,我們必須在高斯空間繼續(xù)添加高斯模糊項,使律形成o,ko,k26k3o,k4o這樣就可以選擇

7、DoGspace中的中間三項ko,k2o,k3o(只有左右都有才能有極值),那么下一octave中(由上一層降采樣獲得)所得三項即為2ko,2k2o,2k3o,其首項2ko=24/3。剛好與上一octave末項k3o=23/3尺度變化連續(xù)起來,所以每次要在Gaussianspace添加3項,每組(塔)共S+3層圖像,相應(yīng)的DoG金字塔有S+2層圖像。使用LaplacianofGaussian能夠很好地找到找到圖像中的興趣點,但是需要大量的計算量,所以使用DifferenceofGaussian圖像的極大極小值近似尋找特征點.DOG算子計算簡單,是尺度歸一化的LoG算子的近似,有關(guān)DOG尋找特征

8、點的介紹及方法詳見/abcjennifer/article/details/7639488,極值點檢測用的Nn-MaximaiSuppressi。除去不好的特征點通過擬和三維二次函數(shù)以精確確定關(guān)鍵點的位置和尺度(達到亞像素精度),同時去除低對比度的關(guān)鍵點和不穩(wěn)定的邊緣響應(yīng)點(因為DoG算子會產(chǎn)生較強的邊緣響應(yīng)),以增強匹配穩(wěn)定性、提高抗噪聲能力,在這里使用近似HarrisCorner檢測器??臻g尺度函數(shù)泰勒展開式如下x)cQDt1t&2D=D+X+2X而xd2DdD,對上式求導(dǎo),并令其為o,得到精確的在己經(jīng)檢測到的特征點中,要去掉低對比度的特征點和不穩(wěn)定的邊緣響應(yīng)點。去除低對比度的點:把公式(

9、2)代入公式,即在DoGSpace的極值點處D(x)取值,只取前兩項可得:D十2麻位置,得。主曲率通過一個2x2的Hessian矩陣H求出:Tt(H)二+D辣二*厲Det(H)=DDyy(Dry)=D對(H)Tt(H)2(a+.i)3(r/J+i)2(r+l)2(r+1)21的值在兩個特征值相等的時候最小,隨著r的增大而增大,因此,為了檢測主曲率是否在某域值r下,只需檢測0.03,該特征點就保留下來,否則丟棄。邊緣響應(yīng)的去除一個定義不好的高斯差分算子的極值在橫跨邊緣的地方有較大的主曲率,而在垂直邊緣的方向有較小的主曲率導(dǎo)數(shù)由采樣點相鄰差估計得到。D的主曲率和H的特征值成正比,令a為較大特征值,

10、p為較小的特征值,則if(a+P)/ap(r+1)2/r,throwitout.在的文章中,取一似給特征點賦值一個128維方向參數(shù)上一步中確定了每幅圖中的特征點,為每個特征點計算一個方向,依照這個方向做進一步的計算,利用關(guān)鍵點鄰域像素的梯度方向分布特性為每個關(guān)鍵點指定方向參數(shù),使算子具備旋轉(zhuǎn)不變性。懦億力二j卩(兀十i丿)一(兀一十卩(兀丁十1)丄(工丿or悉、滬atan2(L(x,7+l)-匸詼一(址十1)-L(x-l,y)為(x,y)處梯度的模值和方向公式。其中L所用的尺度為每個關(guān)鍵點各自所在的尺度。至此,圖像的關(guān)鍵點已經(jīng)檢測完畢,每個關(guān)鍵點有三個信息:位置,所處尺度、方向,由此可以確定一

11、個SIFT特征區(qū)域。梯度直方圖的范圍是0-360度,其中每10度一個柱,總共36個柱。隨著距中心點越遠的領(lǐng)域其對直方圖的貢獻也響應(yīng)減小.Lowe論文中還提到要使用高斯函數(shù)對直方圖進行平滑,減少突變的影響。在實際計算時,我們在以關(guān)鍵點為中心的鄰域窗口內(nèi)采樣,并用直方圖統(tǒng)計鄰域像素的梯度方向。梯度直方圖的范圍是0360度,其中每45度一個柱,總共8個柱,或者每10度一個柱,總共36個柱。Lowe論文中還提到要使用高斯函數(shù)對直方圖進行平滑,減少突變的影響。直方圖的峰值則代表了該關(guān)鍵點處鄰域梯度的主方向,即作為該關(guān)鍵點的方向。直方圖中的峰值就是主方向,其他的達到最大值80%的方向可作為輔助方向由梯度方

12、向直方圖確定主梯度方向該步中將建立所有scale中特征點的描述子(128維)IdentifypeakandassignorientationandsumofmagnitudetokeypointTheusermaychooseathresholdtoexcludekeypointsbasedontheirassignedsumofmagnitudes.關(guān)鍵點描述子的生成步驟錠轉(zhuǎn)主方問將坐標軸旋轉(zhuǎn)為關(guān)鍵點西方向,以確保旋轉(zhuǎn)不變性生成描述子對于一個關(guān)璉點產(chǎn)生也8個數(shù)據(jù),即最終形成佢呂維丙FT特征向量歸一化烙特征向量苗長度歸一化:則可頃進址理步去除光照變化鬥影響J通過對關(guān)鍵點周圍圖像區(qū)域分塊,計算塊

13、內(nèi)梯度直方圖,生成具有獨特性的向量,這個向量是該區(qū)域圖像信息的一種抽象,具有唯一性。關(guān)鍵點描述子的生成首先將坐標軸旋轉(zhuǎn)為關(guān)鍵點的方向,以確保旋轉(zhuǎn)不變性。以關(guān)鍵點為中心取8x8的窗口。LinagegradientsK&ypointdescriptorFigure.16*16的圖中其中1/4的特征點梯度方向及scale,右圖為其加權(quán)到8個主方向后的效果。圖左部分的中央為當前關(guān)鍵點的位置,每個小格代表關(guān)鍵點鄰域所在尺度空間的一個像素,利用公式求得每個像素的梯度幅值與梯度方向,箭頭方向代表該像素的梯度方向,箭頭長度代表梯度模值,然后用高斯窗口對其進行加權(quán)運算。圖中藍色的圈代表高斯加權(quán)的范圍(越靠近關(guān)鍵

14、點的像素梯度方向信息貢獻越大)。然后在每4x4的小塊上計算8個方向的梯度方向直方圖,繪制每個梯度方向的累加值,即可形成一個種子點,如圖右部分示。此圖中一個關(guān)鍵點由2x2共4個種子點組成,每個種子點有8個方向向量信息。這種鄰域方向性信息聯(lián)合的思想增強了算法抗噪聲的能力,同時對于含有定位誤差的特征匹配也提供了較好的容錯性。計算keypoint周圍的16*16的window中每一個像素的梯度,而且使用高斯下降函數(shù)降低遠離中心的權(quán)重。window128dimens-icnaIv&ctorKeypoint在每個4*4的1/16象限中,通過加權(quán)梯度值加到直方圖8個方向區(qū)間中的一個,計算出一個梯度方向直方圖

15、。這樣就可以對每個feature形成一個4*4*8=128維的描述子,每一維都可以表示4*4個格子中一個的scale/orientation.將這個向量歸一化之后,就進一步去除了光照的影響。5.根據(jù)SIFT進行Match生成了A、B兩幅圖的描述子,(分別是k1*128維和k2*128維),就將兩圖中各個scale(所有scale)的描述子進行匹配,匹配上128維即可表示兩個特征點match上了。實際計算過程中,為了增強匹配的穩(wěn)健性,Lowe建議對每個關(guān)鍵點使用4x4共16個種子點來描述,這樣對于一個關(guān)鍵點就可以產(chǎn)生128個數(shù)據(jù),即最終形成128維的SIFT特征向量。此時SIFT特征向量已經(jīng)去除

16、了尺度變化、旋轉(zhuǎn)等幾何變形因素的影響,再繼續(xù)將特征向量的長度歸一化,則可以進一步去除光照變化的影響。當兩幅圖像的SIFT特征向量生成后,下一步我們采用關(guān)鍵點特征向量的歐式距離來作為兩幅圖像中關(guān)鍵點的相似性判定度量。取圖像1中的某個關(guān)鍵點,并找出其與圖像2中歐式距離最近的前兩個關(guān)鍵點,在這兩個關(guān)鍵點中,如果最近的距離除以次近的距離少于某個比例閾值,則接受這一對匹配點。降低這個比例閾值,SIFT匹配點數(shù)目會減少,但更加穩(wěn)定。為了排除因為圖像遮擋和背景混亂而產(chǎn)生的無匹配關(guān)系的關(guān)鍵點丄owe提出了比較最近鄰距離與次近鄰距離的方法,距離比率ratio小于某個閾值的認為是正確匹配。因為對于錯誤匹配,由于特

17、征空間的高維性,相似的距離可能有大量其他的錯誤匹配,從而它的ratio值比較高。Lowe推薦ratio的閾值為0.8。但作者對大量任意存在尺度、旋轉(zhuǎn)和亮度變化的兩幅圖片進行匹配,結(jié)果表明ratio取值在0.40.6之間最佳,小于0.4的很少有匹配點,大于0.6的則存在大量錯誤匹配點。(如果這個地方你要改進,最好給出一個匹配率和ration之間的關(guān)系圖,這樣才有說服力)作者建議ratio的取值原則如下:ratio=0.4對于準確度要求高的匹配;ratio=0.6對于匹配點數(shù)目要求比較多的匹配;ratio=0.5一般情況下。也可按如下原則:當最近鄰距離200時ratio=0.6,反之ratio=0

18、.4。ratio的取值策略能排分錯誤匹配點。當兩幅圖像的SIFT特征向量生成后,下一步我們采用關(guān)鍵點特征向量的歐式距離來作為兩幅圖像中關(guān)鍵點的相似性判定度量。取圖像1中的某個關(guān)鍵點,并找出其與圖像2中歐式距離最近的前兩個關(guān)鍵點,在這兩個關(guān)鍵點中,如果最近的距離除以次近的距離少于某個比例閾值,則接受這一對匹配點。降低這個比例閾值,SIFT匹配點數(shù)目會減少,但更加穩(wěn)定。實驗結(jié)果:50100150200250300360i50100150200250300350400450500O5OO002O52OO50-1O2=0O6OOOO300502O2S0基本概念及一些補充什么是局部特征?局部特征從總體上

19、說是圖像或在視覺領(lǐng)域中一些有別于其周圍的地方局部特征通常是描述一塊區(qū)域,使其能具有高可區(qū)分度局部特征的好壞直接會決定著后面分類、識別是否會得到一個好的結(jié)果局部特征需具備的特性重復(fù)性可區(qū)分性準確性數(shù)量以及效率不變性局部特征提取算法siftSIFT算法由D.G丄owe1999年提出,2004年完善總結(jié)。后來Y.Ke將其描述子部分用PCA代替直方圖的方式,對其進行改進。SIFT算法是一種提取局部特征的算法,在尺度空間尋找極值點,提取位置,尺度,旋轉(zhuǎn)不變量SIFT特征是圖像的局部特征,其對旋轉(zhuǎn)、尺度縮放、亮度變化保持不變性,對視角變化、仿射變換、噪聲也保持一定程度的穩(wěn)定性。獨特性好,信息量豐富,適用于

20、在海量特征數(shù)據(jù)庫中進行快速、準確的匹配。多量性,即使少數(shù)的幾個物體也可以產(chǎn)生大量SIFT特征向量??蓴U展性,可以很方便的與其他形式的特征向量進行聯(lián)合。尺度空間理論尺度空間理論目的是模擬圖像數(shù)據(jù)的多尺度特征其基本思想是在視覺信息圖像信息處理模型中引入一個被視為尺度的參數(shù),通過連續(xù)變化尺度參數(shù)獲得不同尺度下的視覺處理信息,然后綜合這些信息以深入地挖掘圖像的本質(zhì)特征。描述子生成的細節(jié)以極值點為中心點,并且以此點所處于的高斯尺度sigma值作為半徑因子。對于遠離中心點的梯度值降低對其所處區(qū)域的直方圖的貢獻,防止一些突變的影響。每個極值點對其進行三線性插值,這樣可以把此極值點的貢獻均衡的分到直方圖中相鄰

21、的柱子上歸一化處理.在求出4*4*8的128維特征向量后,此時SIFT特征向量已經(jīng)去除了尺度變化、旋轉(zhuǎn)等幾何變形因素的影響。而圖像的對比度變化相當于每個像素點乘上一個因子,光照變化是每個像素點加上一個值,但這些對圖像歸一化的梯度沒有影響。因此將特征向量的長度歸一化,則可以進一步去除光照變化的影響。.對于一些非線性的光照變化,SIFT并不具備不變性,但由于這類變化影響的主要是梯度的幅值變化,對梯度的方向影響較小,因此作者通過限制梯度幅值的值來減少這類變化造成的影響。PCASIFT算法PCA-SIFT與標準SIFT有相同的亞像素位置,尺度和主方向。但在第4步計算描述子的設(shè)計,采用的主成分分析的技術(shù)

22、。下面介紹一下其特征描述子計算的部分:用特征點周圍的41x41的像斑計算它的主元,并用PCA-SIFT將原來的2x39x39維的向量降成20維,以達到更精確的表示方式。它的主要步驟為,對每一個關(guān)鍵點:在關(guān)鍵點周圍提取一個41x41的像斑于給定的尺度,旋轉(zhuǎn)到它的主方向;計算39x39水平和垂直的梯度,形成一個大小為3042的矢量;用預(yù)先計算好的投影矩陣nx3042與此矢量相乘;這樣生成一個大小為n的PCA-SIFT描述子。輔助資料:1己呂維關(guān)鍵點描述子生成步驟1-確定計算洶述子所需的圖像區(qū)域溫述子梯產(chǎn)方向直芳圖由關(guān)建點所在尺產(chǎn)的濮禱圖像計算產(chǎn)生.圖像區(qū)域的半徑通過下式計算:如嘶耳血也十1)十1a

23、i是關(guān)鍵點所在組(octave)的組內(nèi)尺度d-4己-將坐標移圭關(guān)鍵點主方向-r-r-4l_那么莢轉(zhuǎn)角度后新坐標為:rcos6?sin-sin力cosflr:?在圖像半徑區(qū)域內(nèi)對每個像養(yǎng)磴求其梯度幅值和方向,然后對每個梯度幅值乗以高斯權(quán)重參數(shù),生成方向直方囲。、喩ghf=冒血?(打(兀J)|&exp-環(huán):該點與關(guān)鍍點的列距離;耳:該點與關(guān)鍵點的行距離;C7:等于描述子窗口寬度勺b*直方圖列數(shù)(耽4)的一半;T44.在窗聲寬度為2X2的區(qū)域內(nèi)計算&個方向的梯度方向直方圖,繪制每個梯度方向的累加值,即可形成一個種子點。然后再在下一個2X2的區(qū)域內(nèi)進行直方圖統(tǒng)計,形成下一個種子,點,拱生成16個種子點

24、.5,描述子向量元素門限化及門限牝后的描述子向量規(guī)葩化。描述子向量元素門限化:方向直方圖每個方向上梯度幅值限制在一定門限值以下(門限一般?。?2。描述子向量元素規(guī)范化:疔=(叫叫,五)為得到的12礙述子向曇E=G仏:血)為純范化后的向量Reference:LoweSIFT原文: HYPERLINK http:/www.cs.ubc.ca/Towe/papers/ijcv04.pdf http:/www.cs.ubc.ca/Towe/papers/ijcv04.pdfSIFT的C實現(xiàn):/robwhess/opensift/blob/master/srcmatlab應(yīng)用Sift算子的模式識別方法:

25、/abcjennifer/article/details/7372880 HYPERLINK /abcjennifer/article/details/7365882 /abcjennifer/article/details/7365882hllp:/7/vviki/Scale-invarianl_fealure_lransform#David_Lovve.27s_melhodhllp:/blog-613779-475881.hlmlhllp:/ HYPERLINK /linyunzju/archive/2011/06/14/2080950.hlml /linyunzju/archive/20

26、11/06/14/2080950.hlmlhllp:/ HYPERLINK /linyunzju/archive/2011/06/14/2080951.hlml /linyunzju/archive/2011/06/14/2080951.hlmlhllp:/blog.csdn.nel/ijuliel/arlicle/delails/4640624hllp:/ HYPERLINK /cfanlaisie/aichive/2011/06/14/2080917.hlml /cfanlaisie/aichive/2011/06/14/2080917.hlml(部分圖片有誤,以本文中的圖片為準)SIFT

27、解析(一)建立高斯金字塔SIFT(Scale-InvariantFeatureTransform,尺度不變特征轉(zhuǎn)換)在目標識別、圖像配準領(lǐng)域具有廣泛的應(yīng)用,下面按照SIFT特征的算法流程對其進行簡要介紹對SIFT特征做簡要介紹。高斯金字塔是SIFT特征提取的第一步,之后特征空間中極值點的確定,都是基于高斯金字塔,因此SIFT特征學(xué)習的第一步是如何建立的高斯金字J.-W-塔。明白幾個定義:高斯金字塔對于高斯金字塔,很容易直觀地理解為對同一尺寸的圖像,然后進行不同程度的高斯平滑,這些圖像構(gòu)成高斯金字塔,這種是不對的,這描述的圖像集合叫做一個八度。金字塔總要有個變“尖”的過程,真正的高斯金字塔要有個

28、平滑以及下采樣的過程,因此整個圖像平滑以及下采樣再平滑,構(gòu)成的所有圖像集合才構(gòu)成了圖像的高斯金字塔。具有一個6尺度八度(octave)簡單地說八度就是在特定尺寸(長寬)下,經(jīng)不同高斯核模糊的圖像的集合。八度的集合是高斯金字塔。為什么要構(gòu)建高斯金字塔:整個高斯金字塔,或者說是差分高斯金字塔是我們確定SIFT特征的基礎(chǔ),讓我們首先想想高斯金字塔到底干了一件什么事情,他到底模仿的是什么?答案很容易確定,高斯金字塔模仿的是圖像的不同的尺度,尺度應(yīng)該怎樣理解?對于一副圖像,你近距離觀察圖像,與你在一米之外觀察,看到的圖像效果是不同的,前者比較清晰,后者比較模糊,前者比較大,后者比較小,通過前者能看到圖像

29、的一些細節(jié)信息,通過后者能看到圖像的一些輪廓的信息,這就是圖像的尺度,圖像的尺度是自然存在的,并不是人為創(chuàng)造的。好了,到這里我們明白了,其實以前對一幅圖像的處理還是比較單調(diào)的,因為我們的關(guān)注點只落在二維空間,并沒有考慮到“圖像的縱深”這樣一個概念,如果將這些內(nèi)容考慮進去我們是不是會得到更多以前在二維空間中沒有得到的信息呢?于是高斯金字塔橫空出世了,它就是為了在二維圖像的基礎(chǔ)之上,榨取出圖像中自然存在的另一個維度:尺度。因為高斯核是唯一的線性核,也就是說使用高斯核對圖像模糊不會引入其他噪聲,因此就選用了高斯核來構(gòu)建圖像的尺度。下圖兩幅圖像是典型的一幅一定大小的圖像使用高斯濾波后將得到一個高斯平滑

30、圖像,注意圖像的大小未發(fā)生變化?,F(xiàn)在把這樣一幅一定大小的圖像分別使用不同尺度的高斯(核)濾波平滑后,就得到一個圖像集合,那么這個集合就稱為一個八度(octave),其中這個圖像就稱為這個八度的原圖像。那么如果原圖像不同,所得的八度也不同,原圖像不同包括其大小、灰度值,注意高斯濾波會改變圖像的灰度值。假設(shè)有一組八度,如果原圖像都是有一定規(guī)律的,那么這些八度一定存在一定聯(lián)系現(xiàn)在IV中的原圖像是經(jīng)過降采樣生成的,那么這些八度便構(gòu)成了金字塔形狀圖像高斯金字塔,這就是模仿的圖像離你遠去時在你視網(wǎng)膜上的成像,圖像分別以動態(tài)方式表示。高斯金字塔的構(gòu)建步驟:根據(jù)Lowe的論文,高斯金字塔的構(gòu)建還是比較簡單的,

31、高斯卷積和是尺度變換的唯一的線性核。高斯金字塔構(gòu)建過程中,一般首先將圖像擴大一倍,在擴大的圖像的基礎(chǔ)之上構(gòu)建高斯金字塔,然后對該尺寸下圖像進行高斯模糊,幾幅模糊之后的圖像集合構(gòu)成了一個八度,然后對該八度下的最模糊的一幅圖像進行下采樣的過程,長和寬分別縮短一倍,圖像面積變?yōu)樵瓉硭姆种弧_@幅圖像就是下一個八度的初始圖像,在初始圖像圖像的基礎(chǔ)上完成屬于這個八度的高斯模糊處理,以此類推完成整個算法所需要的所有八度構(gòu)建,這樣這個高斯金字塔就構(gòu)建出來了。構(gòu)建出的金字塔如下圖所示:GaussianScale(firstcjctawejScale(netctdvej什么是尺度空間:以上已經(jīng)從人視覺感知的角度

32、讓大家感性認識了“尺度”,上文也提到使用高斯核來實現(xiàn)尺度的變換,那么具體實現(xiàn)過程中,尺度體現(xiàn)在哪里?是如何量化的呢?怎么在高斯金字塔中,兩個變量很重要,即第幾個八度(0)和八度中的第幾層(S),這兩個量合起來(0,S)就構(gòu)成了高斯金字塔的尺度空間。尺度空間也不難理解,首先一個八度中圖像的長和寬是相等的,即變量0控制的是塔中尺寸這個尺度;區(qū)分同一個尺寸尺度下的圖像,就需要S了,S控制了一個八度中不同的模糊程度。這樣(0,S)就能夠確定高斯金字塔中的唯一一幅圖像了,這是個三維空間,兩維坐標,一維是圖像。根據(jù)lowe的論文,(o,s)作用于一幅圖像是通過公式確定的。通過公式也可以看出,尺度空間是連續(xù)

33、的,兩個變量控制著6的值,其中在第一個八度中有1(o+s/S)=2,同理在第二個八度中有2(o+s/S)=3,以此類推,6中的關(guān)鍵部分(o+s/S)部分是逐漸增大的(具體實現(xiàn)時,有些高斯金字塔中這個值是增大,但不是逐漸均勻增大,只能說是連續(xù)的)。上圖中第一個八度的中圖像的尺度分別是6,k6,26.,第二個八度的尺度分別是26,2k6,2326.,同理第三個八度的尺度分別是46,4k6,4326。這個序列是通過下式來確定的:所以每增加一級八度,6都要擴大2倍,在一個八度中,k的上標s來區(qū)分不同的高斯核。至此,高斯金字塔中的尺度空間已經(jīng)說得差不多了,包括尺度是什么,包括高斯金字塔中尺度的連續(xù)性,后

34、文將詳細說明尺度空間的連續(xù)性。下圖形象說明了什么是尺度空間:構(gòu)建差分高斯金字塔構(gòu)建高斯金字塔是為了后續(xù)構(gòu)建差分高斯金字塔。對同一個八度的兩幅相鄰的圖像做差得到插值圖像,所有八度的這些插值圖像的集合,就構(gòu)成了差分高斯金字塔。過程如下圖所示,差分高斯金字塔的好處是為后續(xù)的特征點的提取提供了方便。Scale(firstoctave)Scale(nextoctaveGaussianDifferenceofGaussianfDOG)到這里,高斯金字塔構(gòu)建的主要部分、關(guān)鍵點都弄好了,一些非常重要的認知就要呼之欲出了,下面解釋整個空間的尺度連續(xù)性!這是差分高斯金字塔的重中之重!尺度空間的連續(xù)性這里注意,連續(xù)

35、性的主語既不是高斯金字塔,也不是差分高斯金字塔,而是尺度空間。在弄清楚這個問題之前,我們還需要解決一個問題,即為什么高斯金字塔中每個八度有s+3幅高斯圖像?s的意思是將來我們在差分高斯金字塔中求極值點的時候,我們要在每個八度中求s層點,通過lowe論文可知,每一層極值點是在三維空間(圖像二維,尺度一維)中比較獲得,因此為了獲得s層點,那么在差分高斯金字塔中需要有s+2圖像,好了,繼續(xù)上溯,如果差分高斯金字塔中有s+2幅圖像,那么高斯金字塔中就必須要有s+3幅圖像了,因為差分高斯金字塔是由高斯金字塔相鄰兩層相減得到的。好了,到了這里似乎真相大白,但是我們上面的推導(dǎo)有一個致命的問題,我們上來就假設(shè)

36、“我們要在每個八度中求s層點”,為什么要s層點呢?這才是這個小節(jié)的主題:是為了保持尺度的連續(xù)性!下面進行詳細的分析:以一個八度中的圖像為例說明(此處最好結(jié)合OpenCV中金字塔構(gòu)建部分的源碼下文已列出,可以參照)高斯金字塔和差分高斯金字塔那幾個公式還要在這里貼出來一下:高斯函數(shù)G對圖像I的模糊函數(shù):er)=G(x?jj.7(x=j)高斯差分函數(shù):DXy.ta)二(G(兀y.(ka)-(兀耳cr)O心為=ZCx:yktj)匸gy:cr)通過以上這兩個公式,可以確定一個八度中(以第一個八度為例)高斯圖像和差分高斯圖像的尺度如下(以lowe論文為例,s=3,所以每個八度中會有3+3=6幅圖像),每一

37、幅圖像的尺度也在圖像標示了出來。在lowe的論文中s=3,因此有因此,當前八度中各高斯圖像的尺度依次為:62A(1/3)o,2A(2/3)o,2A(3/3)o,2A(4/3)o,2A(5/3)o;當前八度中各差分高斯圖像的尺度依次為:62A(1/3)o,2A(2/3)6,2A(3/3)6,2人(4/3)6。同理,我們可以推斷出,下一個八度中各高斯圖像的尺度依次為:2xo,2x2A(1/3)o,2x2A(2/3)o,2x2A(3/3)o,2x2A(4/3)o,2x2A(5/3)o;下一個八度中各差分高斯圖像的尺度依次為:2x6,2x2A(1/3)o,2x2A(2/3)o,2x2A(3/3)o,2

38、乂2人(4/3)6可以觀察到,其中紅色標注數(shù)據(jù)所代表的層,是差分高斯金字塔中獲得極值點的層,也就是說只有在這些層上才發(fā)生與上下兩層比較獲得極值點的操作。下面將這些紅色數(shù)據(jù)連成一串:2A(1/3)o,2A(2/3)o,2A(3/3)o,2乂2人(1/3)62乂2人(2/3)62乂2人(3/3)6。發(fā)現(xiàn)了什么?對了,這些數(shù)據(jù)時連續(xù)的,我們通過在每個八度中多構(gòu)造三幅高斯圖像,達到了尺度空間連續(xù)的效果,這一效果帶來的直接的好處是在尺度空間的極值點確定過程中,我們不會漏掉任何一個尺度上的極值點,而是能夠綜合考慮量化的尺度因子所確定的每一個尺度!下一個八度的第一幅圖像如何確定這個問題,是上面問題(尺度空間

39、的連續(xù)性)的延伸,我們可以通過反OpenCV中這一部分的源代碼,來理解這個問題。當前八度中的第一幅圖像是通過前一個八度的倒數(shù)第三幅圖像得到。OpenCV這段源碼有個很重要的問題:不同的八度間的尺度不是會有一個2的差異嗎?為什么本部分源碼并沒有體現(xiàn)這一點,而是在對每一個八度處理中都是用相同的數(shù)組sig。首先明確一下sig數(shù)組內(nèi).存儲的并不是一個絕對的模糊核,而是相對的模糊核,這一點很重要,既然是相對的模糊核,那么第一幅圖像的核就很重要了,所以尺度的連續(xù)就看每個八度的第一幅圖像了。對于以下列出的高斯金字塔的構(gòu)建過程來看,每個八度中的第一幅圖像并沒有一個2倍的尺度躍進過程。但是,這個2倍的躍進式隱含

40、在整個高斯金字塔的構(gòu)建過程中了!再看倒數(shù)第三幅圖像,這幅圖像的尺度是2人(3/3)*6,3/3=1,也就是說,在這個八度中,第一幅圖像的尺度是6,而倒數(shù)第三幅圖像的尺度是2*6,正好發(fā)生了一個2的躍進!這就是以這幅圖像作為基準進行下采樣的原因,如此的話,下一個八度的第一幅圖像的初始尺度就是2*6了。這就是真相,這就是為什么選用倒數(shù)第三幅圖像進行下采樣的原因。cppviewplaincopyvoidSIFT:buildGaussianPyramid(constMat&base,vector&pyr,intnOctaves)constvectorsig(nOctaveLayers+3);pyr.r

41、esize(nOctaves*(nOctaveLayers+3);/precomputeGaussiansigmasusingthefollowingformula:/sigma_totalA2=sigma_iA2+sigma_i-1八2sig0=sigma;doublek=pow(2,1/nOctaveLayers);for(inti=1;inOctaveLayers+3;i+)doublesig_prev=pow(k,(double)(i-1)*sigma;doublesig_total=sig_prev*k;sigi=std:sqrt(sig_total*sig_total-sig_pr

42、ev*sig_prev);for(into=0;onOctaves;o+)for(inti=0;inOctaveLayers+3;i+)Mat&dst=pyro*(nOctaveLayers+3)+i;if(o=0&i=0)dst=base;/baseofnewoctaveishalvedimagefromendofpreviousoctaveelseif(i=0)/*每一個八度中第一幅圖像的確定過程*/constMat&src=pyr(o-1)*(nOctaveLayers+3)+nOctaveLayers;resize(src,dst,Size(srccols/2,src.rows/2),

43、0,0,INTER_NEAREST);elseconstMat&src=pyro*(nOctaveLayers+3)+i-1;GaussianBlur(src,dst,Size(),sigi,sigi);voidSIFT:buildDoGPyramid(constvector&gpyr,vector&dogpyr)constintnOctaves=(int)gpyr.size()/(nOctaveLayers+3);dogpyr.resize(nOctaves*(nOctaveLayers+2);for(into=0;onOctaves;o+)..10.11.12

44、.0.41.42.for(inti=0;inOctaveLayers+2;i+)43.448.constMat&srcl=gpyro*(nOctaveLayers+3)+i;constMat&src2=gpyro*(nOctaveLayers+3)+i+1;Mat&dst=dogpyro*(nOctaveLayers+2)+i;subtract(src2,srcl,dst,noArray(),DataType:t

45、ype);4950.以上SIFT源碼均摘自O(shè)penCVnonfree模塊,lowe對SIFT擁有版權(quán)。SIFT金字塔構(gòu)建完畢,需要在金字塔中尋找特征點了,請關(guān)注本博客SIFT系列下一篇文章:SIFT解析(二)特征點位置確定SIFT解析(二)特征點位置確定最近微博上有人發(fā)起投票那篇論文是自己最受益匪淺的論文,不少人說是lowe的這篇介紹SIFT的論文。確實,在圖像特征識別領(lǐng)域,SIFT的出現(xiàn)是具有重大意義的,SIFT特征以其穩(wěn)定的存在,較高的區(qū)分度推進了諸多領(lǐng)域的發(fā)展,比如識別和配準。上一篇文章,解析了SIFT特征提取的第一步高斯金字塔的構(gòu)建,并詳細分析了高斯金字塔以及差分高斯金字塔如何完成一個

46、連續(xù)的尺度空間的構(gòu)建。構(gòu)建高斯金字塔不是目的,目的是如何利用高斯金字塔找到極值點。lowe在論文中闡述了為什么使用差分高斯金字塔:1)差分高斯圖像可以直接由高斯圖像相減獲得,簡單高效2)差分高斯函數(shù)是尺度規(guī)范化的高斯拉普拉斯函數(shù)的近以,而高斯拉普拉斯函數(shù)的極大值和極小值點是一種非常穩(wěn)定的特征點(與梯度特征、Hessian特征和Harris角點相比)有了這些基礎(chǔ),我們就可以放開手腳從差分高斯金字塔中找點了。特征點的確定主要包括兩個過程:確定潛在特征點,精確確定特征點的位置和去除不穩(wěn)定特征點。確定潛在特征點上文已經(jīng)闡述,高斯拉普拉斯函數(shù)的極大值和極小值點是一種非常穩(wěn)定的特征點,因此我們從差分高斯金

47、字塔中尋找這些潛在特征點。差分高斯金字塔是一個三維空間(平面圖像二維,尺度一維),因此我們在三維空間中在尋找極大值點和極小值點。具體方法是比較當前特征點的灰度值和其他26個點的灰度值的大小,這26個點包括:當前尺度下該點的8鄰域以及前一尺度和后一尺度下與該點最近的9個點(9*2+8=26),如下圖所示:OpenCV該部分源碼:cppviewplaincopy1.voidSIFT:findScaleSpaceExtrema(constvector&gauss_pyr,constvector&dog_pyr,.9.

48、1.42.vector&keypoints)constfor(into=0;onOctaves;o+)/每一個八度for(inti=1;i=nOctaveLayers;i+)/對八度中的存在具有第1至第nOctaveLayers層高斯差分圖像提取特征點for(intr=SIFT_IMG_BORDER;rrows-SIFT_IMG_BORDER;r+)/圖像二維空間行for(intc=SIFT_IMG_BORDER;cthreshold&(val0&val=currpt

49、rc-1&val=currptrc+1&TOC o 1-5 h zval=currptrc-step-1&val=currptrc-step&val=currptrc-step+1&val=currptrc+step-1&val=currptrc+step&val=currptrc+step+1&val=nextptrc&val=nextptrc-1&val=nextptrc+1&val=nextptrc-step-1&val=nextptrc-step&val=nextptrc-step+1&val=nextptrc+step-1&val=nextptrc+step&val=nextptrc

50、+step+1&val=prevptrc&val=prevptrc-1&val=prevptrc+1&val=prevptrc-step-1&val=prevptrc-step&val=prevptrc-step+1&val=prevptrc+step-1&val=prevptrc+step&val=prevptrc+step+1)|(val0&val=currptrc-1&val=currptrc+1&TOC o 1-5 h zval=currptrc-step-1&val=currptrc-step&val=currptrc-step+1&val=currptrc+step-1&val=c

51、urrptrc+step&val=currptrc+step+1&val=nextptrc&val=nextptrc-1&val=nextptrc+1&val=nextptrc-step-1&val=nextptrc-step&val=nextptrc-step+1&val=nextptrc+step-1&val=nextptrc+step&val=nextptrc+step+1&val=prevptrc&val=prevptrc-1&val=prevptrc+1&val=prevptrc-step-1&val=prevptrc-step&val=prevptrc-step+1&val=pre

52、vptrc+step-1&val=prevptrc+step&val=prevptrc+step+1)尺度空間中的極值點已經(jīng)確定出來了,下面有兩個問題需要解決:(1)這些點是最終我們確定的SIFT特征點集的超集,該超集里包含許多“間諜”-不穩(wěn)定的特征點,因此必須去掉這些不穩(wěn)定的特征點。這些不穩(wěn)定的特征點主要包含兩類:低對比度的點(對噪聲敏感)和邊緣點。(2)這一步驟中極值點的坐標還是離散的整數(shù)值,如何精確確定特征點的位置。由于在計算上(2)問題的解決可以捎帶解決(1)中低對比度點的問題,因此我們先討論問題(2)。本部分的OpenCV源碼位于sift.cpp文件的adjustLocalExtre

53、ma函數(shù)中,本文最后會貼出此部分源碼,下面首先分析如何解決以上兩個問題。精確確定特征點的位置:由于圖像是一個離散的空間,特征點的位置的坐標都是整數(shù),但是極值點的坐標并不一定就是整數(shù),如下圖所示。因此,如何從離散空間中估計出極值點的精確位置是重要的。為了精確確定極值點坐標,Brown和Lowe使用了三元二次函數(shù),通過迭代確定極值點的位置,具有良好的效果。主要是根據(jù)泰勒公式,泰勒公式作用:用值已知的點A估計點A附近的某點B的值。D(x)=D-cif1丁a2n十寧茁x其中工=是日點相對于A點的偏移求上式極值,對其求導(dǎo),導(dǎo)數(shù)等于0,得到”沁&D工二=CXQJC如何;有任何一堆大干0.55說明根值點更靠

54、近另一個點匚了,此時將點更新為點C,維壩迭代過程,如果每一個堆度的偏移都小于為那么雄代過程結(jié)束,將;(三堆小數(shù))追加到當前點(整數(shù)坐標人以此得到特征點的精確坐標。去除不穩(wěn)定特征點去除對比度低的點以上求出了極值點的精確的位置,將求出的x帶入原式,得:我們就利用這個函數(shù)去除對比度低的點,lowe文中,當D(x)=0.03時,去除這個特征點。去除邊緣點差分高斯金字塔中的極值點會有許多邊緣點,邊緣點對一些噪聲不穩(wěn)定,因此需要去除這些邊緣相應(yīng)點。差分高斯金字塔中會有一些不是很好的極值點,這些點的特征是:在跨越邊緣的方向有較大的主曲率,在與邊緣相切的方向主曲率較小。在本步驟中,需要去除這些不好的邊緣相應(yīng)。

55、主曲率可以通過2階Hessian方陣獲得:其中,D譏均可以通過當前像秦點及其周圍懷素點差分得到h的行列式D函數(shù)中某點的主曲率和該點的H矩陣的特征值是成比例的,因此我們可以通過H矩陣的特征值來確定某點在差分高斯金字塔中的主曲率。設(shè)矩陣H的特征值分別為a(較大)和B(較?。?,有如下公式:Tr(H):矩陣h的跡p通過以上兩式,a和B就可以計算出來了,但是,不急!如上文所述,那些不好的邊緣點:跨越邊緣的方向有較大的主曲率,與邊緣相切的方向主曲率較小。因此,我們通過a/卩的比率函數(shù)并確定閾值來體現(xiàn)表征那些不好的邊緣點,a/p越大,說明這個點就越糟糕,就越應(yīng)該被刪掉,但是這樣就要真真切切計算a和B的值,前

56、面讓大家不急了,是的,先不用著急計算,設(shè)定r=a/p(即a=rp),使用如下公式:以上函數(shù)是關(guān)于r的增函數(shù)(已經(jīng)假設(shè)a是特征值中較大的一個),r越大,以上函數(shù)值就越大,反之,以上函數(shù)值越大,r就是越大的,因此我們可以通過已知的Tr(H)和Det(H)“曲線地”去判斷r的大??!所以在本步驟中,去除不好的邊緣點的閾值是:lowe論文中設(shè)定r=10。到這里,在差分高斯金字塔中提取的特征點就完成了提純的步驟。下面是OpenCV源碼中特征點精確位置的確定過程以及特征點提純過程,主要實現(xiàn)函數(shù)為sift.cpp中adjustLocalExtrema函數(shù):cppviewplaincopy1./Interpol

57、atesascale-spaceextremumslocationandscaletosubpixel2./accuracytoformanimagefeatureRejectsfeatureswithlowcontrast3./BasedonSection4ofLowespaper4.staticbooladjustLocalExtrema(constvector&dog_pyr,KeyPoint&kpt,intoctv,5.int&layer,int&r,int&c,intnOctaveLayers,floatcontrastThreshold,floatedgeThreshold,flo

58、atsigma)constfloatimg_scale=1f/(255*SIFT_FIXPT_SCALE);constfloatderiv_scale=img_scale*05f;constfloatsecond_deriv_scale=img_scale;constfloatcross_deriv_scale=img_scale*025f;floatxi=0,xr=0,xc=0,contr=0;0.

59、0.inti=0;/如上文所述,迭代計算特征點的精確位置for(;iSIFT_MAX_INTERP_STEPS;i+)intidx=octv*(nOctaveLayers+2)+layer;constMat&img=dog_pyridx;constMat&prev=dog_pyridx-1;constMat&next=dog_pyridx+1;Vec3fdD(imgat(r,c+1)-imgat(r,c-1)*deriv_scale,(img.at(r+1,c)-img.at(r-1,c)*deriv_scale,(next.at(r,c

60、)-prev.at(r,c)*deriv_scale);floatv2=(float)imgat(r,c)*2;floatdxx=(img.at(r,c+1)+img.at(r,c-1)-v2)*second_deriv_scale;floatdyy=(img.at(r+1,c)+img.at(r-1,c)-v2)*second_deriv_scale;floatdss=(next.at(r,c)+prev.at(r,c)-v2)*second_deriv_scale;floatdxy=(imgat(r+1,c+1)-imgat(r+1,c-1)-imgat(r-1,c+1)+imgat(r-

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論