SIFT和SURF算法都是特徵檢測中較常用的算法,SURF是對SIFT的一種改進,尤其在效率上有明顯提升。
下面的實驗給出了SIFT算法和SURF算法在特徵檢測效率上的對比,
所用的SIFT源碼來自Rob.Hess,下載地址:http://robwhess.github.io/opensift/
SURF源碼來自Chris.Evan的OpenSURF,下載地址:http://www.chrisevansdev.com/computer-vision-opensurf.html
SURF特徵檢測中的綠色箭頭表示暗背景中的亮點(laplacian符號爲0),粉色箭頭表示亮背景中的暗點(laplacian符號爲1)。
(1) 圖像尺寸:288 * 400
檢測圖中的SIFT特徵點用時:0.308204秒,特徵點個數:354 檢測圖中的SURF特徵點用時:0.10825秒,特徵點個數:119
(2) 圖像尺寸:244 * 265
檢測圖中的SIFT特徵點用時:0.61654秒,特徵點個數:879 檢測圖中的SURF特徵點用時:0.145502秒,特徵點個數:213
(2)圖像尺寸:520 * 387
檢測圖中的SIFT特徵點用時:1.19946秒,特徵點個數:1795 檢測圖中的SURF特徵點用時:0.270752秒,特徵點個數:419
(4)圖像尺寸:640 * 480
檢測圖中的SIFT特徵點用時:0.58695秒,特徵點個數:594 檢測圖1中的SURF特徵點用時:0.268403秒,特徵點個數:301
(5)圖像尺寸:400 * 300
檢測圖中的SIFT特徵點用時:0.12064秒,特徵點個數:50 檢測圖中的SURF特徵點用時:0.153961秒,特徵點個數:196
可以看到,一般來說,SURF算法的效率是SIFT算法的3倍左右,而檢測出的特徵點的個數是SIFT算法的1/3左右,當然也和圖像大小、紋理複雜程度、算法參數設置有關。從第(5)組例子中可以看出,SURF算法在邊緣抑制上做的似乎沒有SIFT好,好多邊緣都被檢測成了特徵點,從而導致特徵點個數多於SIFT。
參考