SIFT算法原理介绍
本文轉(zhuǎn)自:https://blog.csdn.net/qq_37374643/article/details/88606351
SIFT算法
SIFT即尺度不變特征變換,是用于圖像處理領(lǐng)域的一種描述。這種描述具有尺度不變性,可在圖像中檢測出關(guān)鍵點,是一種局部特征描述子。
一、SIFT算法特點:
1、具有較好的穩(wěn)定性和不變性,能夠適應(yīng)旋轉(zhuǎn)、尺度縮放、亮度的變化,能在一定程度上不受視角變化、仿射變換、噪聲的干擾。
2、區(qū)分性好,能夠在海量特征數(shù)據(jù)庫中進行快速準確的區(qū)分信息進行匹配
3、多量性,就算只有單個物體,也能產(chǎn)生大量特征向量
4、高速性,能夠快速的進行特征向量匹配
5、可擴展性,能夠與其它形式的特征向量進行聯(lián)合
二、SIFT算法實質(zhì)
在不同的尺度空間上查找關(guān)鍵點,并計算出關(guān)鍵點的方向。
三、SIFT算法實現(xiàn)特征匹配主要有以下三個流程:
1、提取關(guān)鍵點:關(guān)鍵點是一些十分突出的不會因光照、尺度、旋轉(zhuǎn)等因素而消失的點,比如角點、邊緣點、暗區(qū)域的亮點以及亮區(qū)域的暗點。此步驟是搜索所有尺度空間上的圖像位置。通過高斯微分函數(shù)來識別潛在的具有尺度和旋轉(zhuǎn)不變的興趣點。
2、定位關(guān)鍵點并確定特征方向:在每個候選的位置上,通過一個擬合精細的模型來確定位置和尺度。關(guān)鍵點的選擇依據(jù)于它們的穩(wěn)定程度。然后基于圖像局部的梯度方向,分配給每個關(guān)鍵點位置一個或多個方向。所有后面的對圖像數(shù)據(jù)的操作都相對于關(guān)鍵點的方向、尺度和位置進行變換,從而提供對于這些變換的不變性。
3.?通過各關(guān)鍵點的特征向量,進行兩兩比較找出相互匹配的若干對特征點,建立景物間的對應(yīng)關(guān)系。
四、尺度空間
1、概念
尺度空間即試圖在圖像領(lǐng)域中模擬人眼觀察物體的概念與方法。例如:觀察一顆樹,關(guān)鍵在于我們想要觀察是樹葉子還是整棵樹:如果是一整棵樹(相當(dāng)于大尺度情況下觀察),那么就應(yīng)該去除圖像的細節(jié)部分。如果是樹葉(小尺度情況下觀察),那么就該觀察局部細節(jié)特征。
SIFT算法在構(gòu)建尺度空間時候采取高斯核函數(shù)進行濾波,使原始圖像保存最多的細節(jié)特征,經(jīng)過高斯濾波后細節(jié)特征逐漸減少來模擬大尺度情況下的特征表示。
利用高斯核函數(shù)進行濾波的主要原因有兩個:
(1)高斯核函數(shù)是唯一的尺度不變核函數(shù)。
(2)DoG核函數(shù)可以近似為LoG函數(shù),這樣可以使特征提取更加簡單。同時,David. Lowe作者在論文中提出將原始圖像進行2倍上采樣后濾波能夠保留更多的信息便于后續(xù)特征提取與匹配。其實尺度空間圖像生成就是當(dāng)前圖像與不同尺度核參數(shù)σ進行卷積運算后產(chǎn)生的圖像。
2、表示
L(x, y, σ) ,定義為原始圖像 I(x, y)與一個可變尺度的2維高斯函數(shù)G(x, y, σ) 卷積運算。
*表示卷積運算,(x,y)代表圖像的像素位置。是尺度空間因子,值越小表示圖像被平滑的越少,相應(yīng)的尺度也就越小。大尺度對應(yīng)于圖像的概貌特征,小尺度對應(yīng)于圖像的細節(jié)特征。
五、高斯金字塔的構(gòu)建
1、概念
尺度空間在實現(xiàn)時使用高斯金字塔表示,高斯金字塔的構(gòu)建分為兩步:
(1)對圖像做高斯平滑;
(2)對圖像做降采樣。
圖像的金字塔模型是指將原始圖像不斷降階采樣,得到一系列大小不一的圖像,由大到小,從下到上構(gòu)成的塔狀模型。原圖像為金子塔的第一層,每次降采樣所得到的新圖像為金字塔的一層(每層一張圖像),每個金字塔共n層。為了讓尺度體現(xiàn)其連續(xù)性,高斯金字塔在簡單降采樣的基礎(chǔ)上加上了高斯濾波。如上圖所示,將圖像金字塔每層的一張圖像使用不同參數(shù)做高斯模糊,Octave表示一幅圖像可產(chǎn)生的圖像組數(shù),Interval表示一組圖像包括的圖像層數(shù)。另外,降采樣時,高斯金字塔上一組圖像的初始圖像(底層圖像)是由前一組圖像的倒數(shù)第三張圖像隔點采樣得到的。
2、表示
高斯圖像金字塔共o組、s層,則有
σ:尺度空間坐標;s:sub-level層坐標;σ0:初始尺度;S:每組層數(shù)(一般為3~5)
組內(nèi)和組間尺度:
i:金字塔組數(shù);n:每一組的層數(shù)
六、DOG空間極值檢測
1、DOG函數(shù)
2、DoG高斯差分金字塔
(1)對應(yīng)DOG算子,需構(gòu)建DOG金字塔。
可以通過高斯差分圖像看出圖像上的像素值變化情況。(如果沒有變化,也就沒有特征。特征必須是變化盡可能多的點。)DOG圖像描繪的是目標的輪廓。
(2)DOG局部極值檢測
特征點是由DOG空間的局部極值點組成的。為了尋找DoG函數(shù)的極值點,每一個像素點要和它所有的相鄰點比較,看其是否比它的圖像域和尺度域的相鄰點大或者小。特征點是由DOG空間的局部極值點組成的。為了尋找DoG函數(shù)的極值點,每一個像素點要和它所有的相鄰點比較,看其是否比它的圖像域和尺度域的相鄰點大或者小。如下圖,中間的檢測點和它同尺度的8個相鄰點和上下相鄰尺度對應(yīng)的9×2個點共26個點比較,以確保在尺度空間和二維圖像空間都檢測到極值點。
(2)去除邊緣效應(yīng)
在邊緣梯度的方向上主曲率值比較大,而沿著邊緣方向則主曲率值較小。候選特征點的DoG函數(shù)D(x)的主曲率與2×2Hessian矩陣H的特征值成正比。
其中,是候選點鄰域?qū)?yīng)位置的差分求得的。
H的特征值α和β代表x和y方向的梯度
表示矩陣H對角線元素之和,表示矩陣H的行列式。假設(shè)是α較大的特征值,而是β較小的特征值,令,則
該值在兩特征值相等時達最小。Lowe論文中建議閾值T為1.2,即
時保留關(guān)鍵點,反之剔除
七、關(guān)鍵點方向分配
1、通過尺度不變性求極值點,需要利用圖像的局部特征為給每一個關(guān)鍵點分配一個基準方向,使描述子對圖像旋轉(zhuǎn)具有不變性。對于在DOG金字塔中檢測出的關(guān)鍵點,采集其所在高斯金字塔圖像3σ鄰域窗口內(nèi)像素的梯度和方向分布特征。梯度的模值和方向如下:
2、本算法采用梯度直方圖統(tǒng)計法,統(tǒng)計以關(guān)鍵點為原點,一定區(qū)域內(nèi)的圖像像素點確定關(guān)鍵點方向。在完成關(guān)鍵點的梯度計算后,使用直方圖統(tǒng)計鄰域內(nèi)像素的梯度和方向。梯度直方圖將0~360度的方向范圍分為36個柱,其中每柱10度。如下圖所示,直方圖的峰值方向代表了關(guān)鍵點的主方向,方向直方圖的峰值則代表了該特征點處鄰域梯度的方向,以直方圖中最大值作為該關(guān)鍵點的主方向。為了增強匹配的魯棒性,只保留峰值大于主方向峰值80%的方向作為該關(guān)鍵點的輔方向。
八、關(guān)鍵點描述
對于每一個關(guān)鍵點,都擁有位置、尺度以及方向三個信息。為每個關(guān)鍵點建立一個描述符,用一組向量將這個關(guān)鍵點描述出來,使其不隨各種變化而改變,比如光照變化、視角變化等等。這個描述子不但包括關(guān)鍵點,也包含關(guān)鍵點周圍對其有貢獻的像素點,并且描述符應(yīng)該有較高的獨特性,以便于提高特征點正確匹配的概率。
Lowe實驗結(jié)果表明:描述子采用4×4×8=128維向量表征,綜合效果最優(yōu)(不變性與獨特性)。
九、關(guān)鍵點匹配
1、分別對模板圖(參考圖,reference image)和實時圖(觀測圖,
observation image)建立關(guān)鍵點描述子集合。目標的識別是通過兩點集內(nèi)關(guān)鍵點描述子的比對來完成。具有128維的關(guān)鍵點描述子的相似性度量采用歐式距離。
3、匹配可采取窮舉法完成,但所花費的時間太多。所以一般采用kd樹的數(shù)據(jù)結(jié)構(gòu)來完成搜索。搜索的內(nèi)容是以目標圖像的關(guān)鍵點為基準,搜索與目標圖像的特征點最鄰近的原圖像特征點和次鄰近的原圖像特征點。
Kd樹如下如所示,是個平衡二叉樹
十、總結(jié)
SIFT特征具有穩(wěn)定性和不變性,在圖像處理和計算機視覺領(lǐng)域有著很重要的作用,其本身也是非常復(fù)雜的,由于接觸SIFT不是很久,對其中的相關(guān)知識了解還很不足,經(jīng)多方查閱參考,寫得此文,內(nèi)容還不夠詳盡,望多多見諒。以下是SIFT算法的粗略總結(jié)。
1、DoG尺度空間的極值檢測。
2、刪除不穩(wěn)定的極值點。
3、確定特征點的主方向
4、生成特征點的描述子進行關(guān)鍵點匹配。
參考資料
SIFT算法詳解
https://blog.csdn.net/zddblog/article/details/7521424
SIFT算法系列之尺度空間
https://blog.csdn.net/Small_Munich/article/details/79968229
SIFT特征詳解
https://www.cnblogs.com/wangguchangqing/p/4853263.html
總結(jié)
以上是生活随笔為你收集整理的SIFT算法原理介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java importgeopoint_
- 下一篇: 为什么析构函数可以能声明为虚函数,构造函