【发布时间】:2012-05-28 07:46:05
【问题描述】:
对于我的硕士论文,我正在对智能手机徽标检测的 SIFT SURF en FAST 算法进行一些测试。
当我简单地对某些方法进行检测、描述和匹配时,我得到以下结果。
对于 SURF 检测器和 SURF 描述符:
找到 180 个关键点
1,994 秒关键点计算时间 (SURF)
4,516 秒描述时间 (SURF)
0.282 秒匹配时间(SURF)
当我使用 FAST 检测器而不是 SURF 检测器时
找到 319 个关键点
0.023 秒关键点计算时间 (FAST)
1.295 秒描述时间(SURF)
0.397 秒匹配时间(SURF)
FAST 检测器比 SURF 检测器快得多,甚至检测到的关键点几乎是两倍,速度快 100 倍。这些结果是可以预测的。
但下一步并不是预期的结果。 319 个 FAST 关键点的 de SURF 描述符怎么可能比 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));
【问题讨论】:
-
你能发布一些你的代码吗? :)
-
我的一些代码被添加到问题中!