Rob hess 关于sift的说明
http://www.boyunjian.com/do/article/snapshot.do?uid=1489895198024248280
1、引言:?
局部不變圖像特征在計算機視覺領域扮演了一個基本的角色,幫助計算圖像在每個點和塊級別上的匹配。由于近年對穩健局部特征的檢測和描述上的進步,局部特征的使用變得流行起來,在幾乎每個計算機視覺研究領域,從3D視覺[12,5],到目標識別[6,9]、機器人定位和地圖創建[14,11]、目標跟蹤[3,13] ,以及各個交叉領域、?
尺度不變特征變換,或者SIFT算法[7,8],是當今最廣為人知和使用的局部不變特征方法,因為它是第一個通過一個穩健的描述子將不變量與旋轉、尺度、和大范圍的仿射變換以及光照改變聯系起來,并且該描述子在能在大量數據中進行有效地匹配。SIFT算法本身扮演了一個主要的角色,在過去十年里對于局部不變圖像特征方法的使用中。不幸的是,不管SIFT的大量使用,David Lowe,SIFT的創始人,只提供了該算法的二進制可執行版本,開發者通過使用計算機視覺軟件可以生成SIFT的鏈接庫。作為我自己的計算機視覺研究的一部分,我實現了SIFT算法的C版本,如實地根據Lowe04年發布的論文[8],使用了通用的開源計算機視覺庫OpenCV[10]。考慮到它在通用計算機視覺領域的潛在用途,我發布了我的SIFT實現代碼在2006年,作為一個開源的庫。在它發布的時候,它是SIFT算法的第一個開源可用版本,自從發布后,有相當多的使用。?
在本文中,我簡短地描述下SIFT算法以及我的開源SIFT庫的實現,并且與原始版本做個比較。?
2、SIFT算法:?
SIFT算法主要通過4步來檢測和描述一幅圖像中的局部特征,或特征點:?
1、在尺度空間上檢測極值點?
2、亞像素定位和特征點過濾?
3、分配特征點的典型方向?
4、計算特征點的描述子?
尺度空間極值檢測:?SIFT算法首先,確定候選特征點的位置,查找作為圖像尺度空間的二階導數的近似的高斯差分金字塔中局部最大值和最小值。有興趣的讀者可以查看[8]。?
特征點定位和過濾:?在確定候選特征點后,它們在尺度空間中的位置已經插值到亞像素精度。并且插值點如果是低對比度或者高邊緣效應-----計算基于主曲率的比率,那么由于潛在的不穩定將過濾掉該點。?
方向分配:?在過濾后剩下來的那些點,將被賦予一個或多個主方向,根據局部尺度空間梯度的主方向。在方向分配后,每個特征點的描述子就能依據特征點的位置、尺度和方向來進行計算,針對這些變換提高不變性。?
描述子計算:?最終,每個特征點的描述符將被計算,通過將該特征點周圍尺度空間區域劃分為網格,計算每個網格內局部梯度方向的直方圖,并將這些直方圖連接成一個向量。為了提供對光照變化的不變性,每個描述向量進行歸一化,設定閾值來減少大梯度值的影響,再重新歸一化。?
3、開源SIFT庫?
該庫是C版本的,并且對于Linux和Windows都是可用的,使用了OpenCV[10]。特別地,SIFT庫的函數API使用OpenCV的數據類型來表示圖像、矩陣等,為了使它能夠容易地和現有的OpenCV版本結合。除此之外,所有內部操作也是用OpenCV函數實現的。?
該庫本身包含了4個主要部分,每個以一個不同的頭文件表示。接下來會單獨介紹。之后,我介紹3個簡單的包含SIFT庫的例子應用。?
3.1、SIFT庫包含部分:?
SIFT特征點檢測:?本庫的主要部分是一系列檢測特征點的函數。特別地,本庫包含了兩種SIFT特征點的檢測方法(在 sift.h頭文件中),一個是直接使用Lowe在論文中建議的默認的參數設置[8],另一個允許用戶自行設定參數。這些函數很容易被調用,特別地,他們不需要初始化并且同時接受灰度和RGB圖像類型(RGB圖像類型在內部轉換為灰度圖)。特別地,下面的代碼片段就是計算從本地讀取的彩色圖像的SIFT特征點所需的全部代碼。?
圖 1 描畫了使用SIFT庫所檢測的特征點。作為比較,使用Lowe的課執行SIFT軟件特征點檢測也放在圖1中。 ?
Kd-tree 特征點數據庫的形成:? 對一幅圖上的SIFT特征點與另一幅圖上的特征點或者大量的特征點數據庫進行有效地匹配是基本的功能。在文章[1]中,Beis和Lowe提出一種方法來促進有效地特征點匹配,通過使用kd-tree和最近鄰搜索的近似(擁有非常高的正確率)。本連接庫也包含了該結構和函數(在kdtree.h頭文件中)來實現該方法,和在[5]中提出的匹配方法一樣。?
Ransac 變換計算:? SIFT特征點和其他局部圖像特征點經常被用來計算變換---例如圖像間的基本矩陣或者二維單應矩陣。尤其,一旦圖像特征在圖像間匹配上了,這種匹配關系的形成可以用來分析計算所需的變換。Ransac算法[2]被廣泛應用于有部分外特征點匹配存在的情況下變換的計算。在SIFT庫中(在xform.h頭文件中)包含了一系列函數通過使用Ransac從圖像匹配中計算圖像變換。這些函數都很靈活。特別地,這個變換函數本身隊庫的Ransac函數來說是一個論據。因此,開發者可以自由實現任何他希望的函數根據2維點對應關機計算變換。該實現必須遵守在庫里定義的函數原型。作為一個例子,庫包含了函數可以用來與Ransac相結合來計算圖像間的二維單應性矩陣。?
圖 2 描畫了兩幅圖像間SIFT特征點匹配,通過使用庫里的kd-tree函數和Ransac函數根據匹配點計算變換。?
?
不變圖像特征處理:? 最后,SIFT庫也包含了一系列結果和方法來處理不變圖像特征數據,包括由其他軟件產生的數據。尤其,庫的這部分包含了一個數據結構來表示圖像特征數據以及提供了方法來導入和導出使用庫自己的SIFT方法所計算的特征點,也可以導入Lowe的算法所計算的特征點以及牛津大學視覺幾何小組的軟件所計算的仿射協變特征點。利用這種功能性(在imgfeatures.h頭文件里),kd-tree和Ransac算法可以應用于以上各個特征點類型。?
3.2、例子應用:?
SIFT庫也包含了3個非常簡單的例子,展示了庫的功能性。?
1、siftfeat.c:這個例子只簡單計算了一幅圖里的SIFT特征點,并且輸出到文件里。如圖1(a)所示。?
2、match.c:這個例子計算兩幅圖的SIFT特征點的匹配,利用庫的kd-tree函數,并且依據這些匹配可選擇地利用ransac計算一個變換。如圖2所示。?
3、dspfeat.c:這個例子導入和展示其他任何兼容的軟件所生成的圖像特征。圖1顯示了本庫計算的sift特征點和Lowe的SIFT可執行結果,并導入。圖3描畫了Harris-affine特征點,利用牛津大學小組的軟件計算所得。?
?
4、性能?
下面對SIFT庫的性能和Lowe的就運行時間和匹配以及變換的精度作對比。?
4.1、運行時間?
表 1 比較了兩者的運行時間。實驗圖像數據來源于[4]。圖像的平均檢測面積是285350平方像素。兩者的運行時間是類似的。?
?
4.2、匹配和變換的精確性?
表 2 比較了兩者在特征點匹配和變換計算的精確性。這些結果是通過對10幅隨機選擇的圖像作隨機的透視變換,計算特征點匹配在原圖和變換圖之間,之后利用ransac計算透視變換。變換的精確性是通過計算原始特征點通過計算得到的變換矩陣和實際的透視變換計算所得到的點位置之間的MSE(均方誤差)。同樣兩者的性能是類似的。?
5、參考文獻?
[1] J. S. Beis and D. G. Lowe. Shape indexing using approximate nearest-neighbor search in?high-dimensional spaces. In CVPR, 2003.?
[2] M. A. Fischler and R. C. Bolles. Random sample?consensus: a paradigm for model tting with?applications to image analysis and automated?cartography. Communications of the ACM, 24(6),1981.?
[3] H. Grabner, J. Matas, L. Van Gool, and P. Cattin.?Tracking the invisible: Learning where the object?might be. In CVPR, 2010.?
[4] G. Gri?n, A. Holub, and P. Perona. Caltech-256?object category dataset. Technical Report 7694,?California Institute of Technology, 2007.?
[5] R. Hess and A. Fern. Improved video registration?using non-distinctive local image features. In CVPR,?2007.?
[6] B. Leibe, A. Leonardis, and S. Bernt. Robust object?detection with interleaved categorization and?segmentation. IJCV, 77(1{3), 2008.?
[7] D. G. Lowe. Object recognition from local?scale-invariant features. In ICCV, 1999.?
[8] D. G. Lowe. Distinctive image features from?scale-invariant keypoints. Intl. Journal of Computer?Vision, 60(2):91{110, 2004.?
[9] A. Opelt, A. Pinz, M. Fussenegger, and P. Auer.?Generic object recognition with boosting. IEEE?TPAMI, 28(3), 2006.?
[10] OpenCV. http://opencv.willowgarage.com/.?
[11] S. Se, D. G. Lowe, and J. J. Little. Vision-based global?localization and mapping for mobile robots. IEEE?T-RO, 21(3), 2005.?
[12] N. Snavely, R. Garg, S. M. Seitz, and R. Szeliski.?Finding paths through the world's photos. ACM TOG?(Proceedings of SIGGRAPH 2008), 27(3), 2008.?
[13] S. Tran and L. Davis. Robust object tracking with?regional a?ne invariant features. In ICCV, 2007.?
[14] B. Williams, G. Klein, and I. Reid. Real-time SLAM?relocalization. In ICCV, 2007.?
總結
以上是生活随笔為你收集整理的Rob hess 关于sift的说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开源ImageFilter库For IO
- 下一篇: python使用esmre代替ahoco