用FAST检测SURF描述更快?

对于我的硕士论文,我正在对SIFT SURF en FASTalgorithm进行一些testing,以便在智能手机上进行徽标检测。

当我简单的时间检测,描述相匹配的一些方法,我得到以下结果。

对于SURF检测器和SURF描述符:

发现了180个关键点

  • 关键点计算时间(SURF):1,994秒

  • 描述时间(SURF)4,516秒

  • 匹配时间0.282秒(SURF)

当我使用FAST检测器代替SURF检测器时

find319个关键点

  • 0.023秒关键点计算时间(FAST)

  • 描述时间(SURF)1.295秒

  • 0.397秒匹配时间(SURF)

FAST检测器比SURF检测器快得多,甚至可以快100倍地检测到两倍的关键点。 这些结果是可以预测的。

下一步虽然不是预测的结果。 SURF描述符在319个FAST关键点和180个SURF关键点之间有多快?

据我所知,描述与检测algorithm没有关系,但这些结果并不如预测的那样。

有人知道这有可能吗?

这里是代码:

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)); 

Solutions Collecting From Web of "用FAST检测SURF描述更快?"

AFAIK SURF描述符提取中最耗时的部分是围绕每个关键点具有(2.8 * keypoint.size x 2.8 * keypoint.size)大小的补丁的子像素提取。

所以这是我的猜测:FAST检测器发现的关键点总是size等于7,但是SURF检测器可以find更大尺寸的关键点。 所以180个“大”关键点比319个“小”关键点要长。