2012-05-21 81 views
7

對於我的碩士論文,我正在對SIFT SURF en FAST算法進行一些測試,以便在智能手機上進行徽標檢測。通過FAST檢測,SURF描述更快?

當我只是時間檢測,描述en匹配的一些方法,我得到以下結果。

對於SURF檢測器和SURF描述:

180的關鍵點發現

  • 1994秒關鍵點計算時間(SURF)

  • 4516秒描述時間(SURF)

  • 匹配時間0.282秒(SURF)

當我在SURF檢測器代替使用FAST探測器

319的關鍵點發現

  • 0.023秒關鍵點計算時間(FAST)

  • 1.295秒描述時間(SURF )

  • 0.397秒匹配時間(SURF)

FAST檢測器比SURF檢測器快得多,甚至可以快100倍地檢測幾乎兩倍的關鍵點。這些結果是可預測的。

雖然下一步不是預測結果。 SURF描述符在319 FAST關鍵點和180 SURF關鍵點之間有多快?

據我所知,描述與檢測算法沒有關係......但這些結果並不如預測。

確實有人知道這可能嗎?

這裏是代碼:

FeatureDetector detector = FeatureDetector.create(FeatureDetector.SURF); 
    //FeatureDetector detector = FeatureDetector.create(FeatureDetector.FAST); 
    Imgproc.cvtColor(image1, image1, Imgproc.COLOR_RGBA2RGB); 
    Imgproc.cvtColor(image2, image2, Imgproc.COLOR_RGBA2RGB); 

    DescriptorExtractor SurfExtractor = DescriptorExtractor 
    .create(DescriptorExtractor.SURF); 


    //extract keypoints 
    long time= System.currentTimeMillis(); 
    detector.detect(image1, keypoints); 
    Log.d("LOG!", "number of query Keypoints= " + keypoints.size()); 
    detector.detect(image2, logoKeypoints); 
    Log.d("LOG!", "number of logo Keypoints= " + logoKeypoints.size()); 
    Log.d("LOG!", "keypoint calculation time elapsed" + (System.currentTimeMillis() -time)); 

    //Descript keypoints 
    long time2 = System.currentTimeMillis(); 
    Mat descriptors = new Mat(); 
    Mat logoDescriptors = new Mat(); 
    Log.d("LOG!", "logo type" + image2.type() + " intype" + image1.type()); 
    SurfExtractor.compute(image1, keypoints, descriptors); 
    SurfExtractor.compute(image2, logoKeypoints, logoDescriptors); 
    Log.d("LOG!", "Description time elapsed" + (System.currentTimeMillis()- time2)); 
+0

可以請你發佈一些你的代碼? :) – Codeman

+0

我的一些代碼被添加到問題! – piepie

回答

7

AFAIK消耗SURF描述符提取的一部分的時間最多爲具有貼片的子像素提取(2.8 * keypoint.size X 2.8 * keypoint.size)的每關鍵點周圍大小。

所以這裏是我的猜測:FAST檢測器發現的關鍵點總是有size等於7,但SURF檢測器可以找到更大尺寸的關鍵點。所以180個「大」關鍵點的處理時間超過319個「小」。

+1

我制定了SIFT描述符,但沒有在論文中完整描述SURF描述符,也許如果我這樣做了,我會知道這一點。 你的解釋看起來很合理,我認爲這可能是我的問題的正確答案! 謝謝! – piepie