2012-05-21 154 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