SIFT算法总结:用于图像搜索
原始文章鏈接:http://bubblexc.com/y2011/163/ 原文鏈接:http://blog.csdn.net/cserchen/article/details/5606859
關(guān)于三種特征點(diǎn)檢測的對比:http://blog.csdn.net/cy513/article/details/4285579
利用SURF特征點(diǎn)進(jìn)行檢測(有code):http://www.cnblogs.com/tornadomeet/archive/2012/08/17/2644903.html
利用特征點(diǎn)進(jìn)行定位:http://www.jdl.ac.cn/project/faceId/res-landmarks.htm
??????? 有少許改動......參考這個(gè)文章是因?yàn)橐业綄?shí)時(shí)的3D檢測描繪子,對于圖像,sift系列的有很好的效果,對于3維圖像,相當(dāng)于添加一個(gè)灰度通道,期待有很好的效果。不過從直覺上來看,成功的概率還是很小的。所以我不想實(shí)驗(yàn)這個(gè)特征了...
??????? 推薦搜索系列:http://blog.csdn.net/cserchen/article/category/785155
(1): 算法介紹:
SIFT算法由D.G.Lowe 1999年提出,2004年完善總結(jié),論文發(fā)表在2004年的IJCV上:
David G. Lowe, "Distinctive image features from scale-invariant keypoints,"International Journal of Computer Vision, 60, 2 (2004), pp. 91-110
論文的原文可見:
http://www.cs.ubc.ca/~lowe/papers/ijcv04.pdf
后來Y.Ke將其描述子部分用PCA代替直方圖的方式,對其進(jìn)行改進(jìn)。
SIFT方法一經(jīng)推出就在圖像處理界引起巨大反響,其方法效果良好、實(shí)現(xiàn)便捷,很快風(fēng)靡世界。很多圖像檢測、識別的應(yīng)用里都能找到sift方法的身影
?
SIFT算法是一種提取局部特征的算法,在尺度空間尋找極值點(diǎn),提取位置,尺度,旋轉(zhuǎn)不變量。算法的主要特點(diǎn)為:
a) SIFT特征是圖像的局部特征,其對旋轉(zhuǎn)、尺度縮放、亮度變化保持不變性,對視角變化、仿射變換、噪聲也保持一定程度的穩(wěn)定性。
b) 獨(dú)特性(Distinctiveness)好,信息量豐富,適用于在海量特征數(shù)據(jù)庫中進(jìn)行快速、準(zhǔn)確的匹配[23]。
c) 多量性,即使少數(shù)的幾個(gè)物體也可以產(chǎn)生大量SIFT特征向量。
d) 高速性,經(jīng)優(yōu)化的SIFT匹配算法甚至可以達(dá)到實(shí)時(shí)的要求。
e) 可擴(kuò)展性,可以很方便的與其他形式的特征向量進(jìn)行聯(lián)合。
?
SIFT算法主要步驟:
1)?檢測尺度空間極值點(diǎn)
2)?精確定位極值點(diǎn)
3)?為每個(gè)關(guān)鍵點(diǎn)指定方向參數(shù)
4)?關(guān)鍵點(diǎn)描述子的生成
SIFT算法詳細(xì)
尺度空間理論目的是模擬圖像數(shù)據(jù)的多尺度特征。? 高斯卷積核是實(shí)現(xiàn)尺度變換的唯一線性核,于是一副二維圖像的尺度空間定義為:
?????????????????????L(x,y,e) = G(x,y,e)*I(x,y)
其中G(x,y,e)是尺度可變高斯函數(shù),?
?????????????????????G(x,y,e) = [1/2*pi*e2] * exp[ -(x2?+ y2)/2e2]
(x,y)是空間坐標(biāo), e是尺度坐標(biāo)。
為了有效的在尺度空間檢測到穩(wěn)定的關(guān)鍵點(diǎn),提出了高斯差分尺度空間(DOG scale-space)。利用不同尺度的高斯差分核與圖像卷積生成。
?????????????????????D(x,y,e) = ((G(x,y,ke) - G(x,y,e)) * I(x,y) = L(x,y,ke) - L(x,y,e)
DOG算子計(jì)算簡單,是尺度歸一化的LoG算子的近似 : http://blog.csdn.net/abcjennifer/article/details/7639488
Gaussian卷積是有尺寸大小的,使用同一尺寸的濾波器對兩幅包含有不同尺寸的同一物體的圖像求局部最值將有可能出現(xiàn)一方求得最值而另一方卻沒有的情況,但是容易知道假如物體的尺寸都一致的話它們的局部最值將會相 同。SIFT的精妙之處在于采用圖像金字塔的方法解決這一問題,我們可以把兩幅圖像想象成是連續(xù)的,分別以它們作為底面作四棱錐,就像金字塔,那么每一個(gè) 截面與原圖像相似,那么兩個(gè)金字塔中必然會有包含大小一致的物體的無窮個(gè)截面,但應(yīng)用只能是離散的,所以我們只能構(gòu)造有限層,層數(shù)越多當(dāng)然越好,但處理時(shí) 間會相應(yīng)增加,層數(shù)太少不行,因?yàn)橄蛳虏蓸拥慕孛嬷锌赡苷也坏匠叽绱笮∫恢碌膬蓚€(gè)物體的圖像。有了圖像金字塔就可以對每一層求出局部最值,但是這樣的穩(wěn)定 點(diǎn)數(shù)目將會十分可觀,所以需要使用某種方法抑制去除一部分點(diǎn),但又使得同一尺度下的穩(wěn)定點(diǎn)得以保存
圖像金字塔的構(gòu)建:圖像金字塔共O組,每組有S層,下一組的圖像由上一組圖像降采樣得到。
?
圖1 Two octaves of a Gaussian scale-space image pyramid with s =2 intervals. The first image in the second octave is created by down sampling the second to last image in the previous
?
圖2 The difference of two adjacent intervals in the Gaussian scale-space pyramid create an interval in the difference-of-Gaussian pyramid (shown in green).
?
空間極值點(diǎn)檢測
為了尋找尺度空間的極值點(diǎn),每一個(gè)采樣點(diǎn)要和它所有的相鄰點(diǎn)比較,看其是否比它的圖像域和尺度域的相鄰點(diǎn)大或者小。如圖3所示,中間的檢測點(diǎn)和它同尺度的8個(gè)相鄰點(diǎn)和上下相鄰尺度對應(yīng)的9×2個(gè)點(diǎn)共26個(gè)點(diǎn)比較,以確保在尺度空間和二維圖像空間都檢測到極值點(diǎn)。
構(gòu)建尺度空間需確定的參數(shù)
???e -尺度空間坐標(biāo)
?? O -octave坐標(biāo)
?? S - sub-level 坐標(biāo)
注:octaves 的索引可能是負(fù)的。第一組索引常常設(shè)為0或者-1,當(dāng)設(shè)為-1的時(shí)候,圖像在計(jì)算高斯尺度空間前先擴(kuò)大一倍。
空間坐標(biāo)x是組octave的函數(shù),設(shè) 是0組的空間坐標(biāo),注:在Lowe的文章中,Lowe使用了如下的參數(shù):
在組o=-1,圖像用雙線性插值擴(kuò)大一倍(對于擴(kuò)大的圖像 )。
精確確定極值點(diǎn)位置
?? 通過擬和三維二次函數(shù)以精確確定關(guān)鍵點(diǎn)的位置和尺度(達(dá)到亞像素精度),同時(shí)去除低對比度的關(guān)鍵點(diǎn)和不穩(wěn)定的邊緣響應(yīng)點(diǎn)(因?yàn)镈oG算子會產(chǎn)生較強(qiáng)的邊緣響應(yīng)),以增強(qiáng)匹配穩(wěn)定性、提高抗噪聲能力。
?
邊緣響應(yīng)的去除
一個(gè)定義不好的高斯差分算子的極值在橫跨邊緣的地方有較大的主曲率,而在垂直邊緣的方向有較小的主曲率。主曲率通過一個(gè)2x2 的Hessian矩陣H求出:
導(dǎo)數(shù)由采樣點(diǎn)相鄰差估計(jì)得到。
D的主曲率和H的特征值成正比,令為最大特征值
?
關(guān)鍵點(diǎn)方向分配
?? 利用關(guān)鍵點(diǎn)鄰域像素的梯度方向分布特性為每個(gè)關(guān)鍵點(diǎn)指定方向參數(shù),使算子具備旋轉(zhuǎn)不變性。
在實(shí)際計(jì)算時(shí),我們在以關(guān)鍵點(diǎn)為中心的鄰域窗口內(nèi)采樣,并用直方圖統(tǒng)計(jì)鄰域像素的梯度方向。梯度直方圖的范圍是0~360度,其中每10度一個(gè)柱,總共36個(gè)柱。直方圖的峰值則代表了該關(guān)鍵點(diǎn)處鄰域梯度的主方向,即作為該關(guān)鍵點(diǎn)的方向。圖4是采用7個(gè)柱時(shí)使用梯度直方圖為關(guān)鍵點(diǎn)確定主方向的示例。?
?
圖4 由梯度方向直方圖確定主梯度方向
在梯度方向直方圖中,當(dāng)存在另一個(gè)相當(dāng)于主峰值80%能量的峰值時(shí),則將這個(gè)方向認(rèn)為是該關(guān)鍵點(diǎn)的輔方向。一個(gè)關(guān)鍵點(diǎn)可能會被指定具有多個(gè)方向(一個(gè)主方向,一個(gè)以上輔方向),這可以增強(qiáng)匹配的魯棒性[53]。
至此,圖像的關(guān)鍵點(diǎn)已檢測完畢,每個(gè)關(guān)鍵點(diǎn)有三個(gè)信息:位置、所處尺度、方向。由此可以確定一個(gè)SIFT特征區(qū)域(在實(shí)驗(yàn)章節(jié)用橢圓或箭頭表示)。?陳運(yùn)文
?
特征點(diǎn)描述子生成
?
由關(guān)鍵點(diǎn)鄰域梯度信息生成特征向量
接下來以關(guān)鍵點(diǎn)為中心取8×8的窗口。圖5-4左部分的中央黑點(diǎn)為當(dāng)前關(guān)鍵點(diǎn)的位置,每個(gè)小格代表關(guān)鍵點(diǎn)鄰域所在尺度空間的一個(gè)像素,箭頭方向代表該像素的梯度方向,箭頭長度代表梯度模值,圖中藍(lán)色的圈代表高斯加權(quán)的范圍(越靠近關(guān)鍵點(diǎn)的像素梯度方向信息貢獻(xiàn)越大)。然后在每4×4的小塊上計(jì)算8個(gè)方向的梯度方向直方圖,繪制每個(gè)梯度方向的累加值,即可形成一個(gè)種子點(diǎn),如圖5右部分所示。此圖中一個(gè)關(guān)鍵點(diǎn)由2×2共4個(gè)種子點(diǎn)組成,每個(gè)種子點(diǎn)有8個(gè)方向向量信息。這種鄰域方向性信息聯(lián)合的思想增強(qiáng)了算法抗噪聲的能力,同時(shí)對于含有定位誤差的特征匹配也提供了較好的容錯(cuò)性。
實(shí)際計(jì)算過程中,為了增強(qiáng)匹配的穩(wěn)健性,Lowe建議對每個(gè)關(guān)鍵點(diǎn)使用4×4共16個(gè)種子點(diǎn)來描述,這樣對于一個(gè)關(guān)鍵點(diǎn)就可以產(chǎn)生128個(gè)數(shù)據(jù),即最終形成128維的SIFT特征向量。此時(shí)SIFT特征向量已經(jīng)去除了尺度變化、旋轉(zhuǎn)等幾何變形因素的影響,再繼續(xù)將特征向量的長度歸一化,則可以進(jìn)一步去除光照變化的影響。
當(dāng)兩幅圖像的SIFT特征向量生成后,下一步我們采用關(guān)鍵點(diǎn)特征向量的歐式距離來作為兩幅圖像中關(guān)鍵點(diǎn)的相似性判定度量。取圖像1中的某個(gè)關(guān)鍵點(diǎn),并找出其與圖像2中歐式距離最近的前兩個(gè)關(guān)鍵點(diǎn),在這兩個(gè)關(guān)鍵點(diǎn)中,如果最近的距離除以次近的距離少于某個(gè)比例閾值,則接受這一對匹配點(diǎn)。降低這個(gè)比例閾值,SIFT匹配點(diǎn)數(shù)目會減少,但更加穩(wěn)定。
?
SIFT算法的實(shí)際匹配效果如下:
?
(2):SIFT的應(yīng)用范圍:
??????? 鑒于sift的特征點(diǎn)檢測和特征描述的詳細(xì)描述,sift的特征檢測用于大規(guī)模圖像檢索準(zhǔn)確率應(yīng)該不是很高。圖像檢索必須走到圖像語義層,至于這個(gè)鴻溝用什么樣的方法填平,還是很值得商酌的事情。搜索最重要的難題是
?????? 根據(jù)SIFT對關(guān)鍵點(diǎn)周圍的特征描述,sift檢測用于圖像旋轉(zhuǎn)配準(zhǔn) 最能發(fā)揮它的作用。
??
SIFT算法在圖像搜索方面,用作基礎(chǔ)特征,個(gè)人感覺有一些問題,記錄在這里:
1 求主方向階段太過依賴圖像局部像素的梯度方向,有可能使找到的主方向不準(zhǔn)確;而后面的特征向量以及匹配嚴(yán)重依賴主方向,一旦有偏差效果會顯著下降
2 圖層金字塔的層如何取是個(gè)問題,如果取得不夠緊密,會在匹配時(shí)出現(xiàn)偏差;而如果取的過多,造成keypointer數(shù)量過大,則會帶來很大的計(jì)算負(fù)擔(dān)
3 圖像中大片平滑區(qū)域時(shí),由于會過濾掉低對比度的點(diǎn),因此特征點(diǎn)的提取有問題;
4 高維向量如何構(gòu)建倒排索引并實(shí)現(xiàn)近似檢索,是個(gè)難題;VA-file+ 的方法并不能完全解決問題
-----------------------------------
?
?針對我們可能的應(yīng)用,我覺得解決上述問題可以有以下思路:
?
問題1:我們的應(yīng)用不需要處理很強(qiáng)的旋轉(zhuǎn)不變性(rotation-invairant)問題,
可以將主方向?qū)ふ也襟E省略,直接在keypointer周圍區(qū)域進(jìn)行特征向量提取
問題2:考慮設(shè)置統(tǒng)一的縮放尺度,解決匹配問題
問題3:除了SIFT descriptor本身以外,還需要提取一些像素區(qū)域的統(tǒng)計(jì)信息,作為補(bǔ)充特征
問題4:借鑒一些本文倒排索引和搜索的技術(shù),這塊非常復(fù)雜,可能需要多級搜索,實(shí)現(xiàn)由粗到精的檢索策略,還需摸索
總結(jié)
以上是生活随笔為你收集整理的SIFT算法总结:用于图像搜索的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 口蜜腹剑的主人公是谁(口蜜腹剑的说法是怎
- 下一篇: 基于SLIC分割的特征点检测