SURF描述更快快速检测? [英] SURF description faster with FAST detection?

查看:158
本文介绍了SURF描述更快快速检测?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的硕士论文,我运行的SIFT SURF一些测试连接FAST algoritms为标志的检测在智能手机上。

在我简单的一次检测,描述EN匹配的一些方法我得到下面的结果。

有关冲浪探测器和SURF描述:

发现180关键点

  • 1994秒关键点计算时间(SURF)

  • 4516秒说明时间(SURF)

  • 0.282秒匹配时间(SURF)

当我在冲浪探测器代替使用快速检测仪

发现319关键点

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

  • 1.295秒说明时间(SURF)

  • 0.397秒匹配时间(SURF)

快速检测器比SURF检测器快得多,并且甚至检测更快几乎两倍多的关键点100倍。这些结果是predictable。

接下来的步骤,虽然不是predicted结果。这怎么可能去SURF描述是更快的319 FAST关键点,然后用180 SURF关键点?

据我所知,说明与检测算法没有关系......但这些结果并不如predicted。

没有任何一个知道这是怎么可能呢?

这里是code:

  FeatureDetector探测器= FeatureDetector.create(FeatureDetector.SURF);
    // FeatureDetector探测器= FeatureDetector.create(FeatureDetector.FAST);
    Imgproc.cvtColor(此搜索,此搜索,Imgproc.COLOR_RGBA2RGB);
    Imgproc.cvtColor(IMAGE2,IMAGE2,Imgproc.COLOR_RGBA2RGB);

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


    //提取关键点
    很长一段时间= System.currentTimeMillis的();
    detector.detect(此搜索,关键点);
    Log.d(LOG!,查询关键点的数量=+ keypoints.size());
    detector.detect(IMAGE2,logoKeypoints);
    Log.d(LOG!,标识的关键点的数量=+ logoKeypoints.size());
    Log.d(!日志,关键点计算时间已过+(System.currentTimeMillis的() - 时间));

    //不伦不类关键点
    长的时间2 = System.currentTimeMillis的();
    垫描述符=新垫();
    垫logoDescriptors =新垫();
    Log.d(LOG!,标志型+ image2.type()+输入法菜单+ image1.type());
    SurfExtractor.compute(此搜索,关键点,描述符);
    SurfExtractor.compute(IMAGE2,logoKeypoints,logoDescriptors);
    Log.d(!日志,说明经过时间+(System.currentTimeMillis的() - 时间2));
 

解决方案

AFAIK最耗时的SURF描述提取一部分是具有子像素提取补丁(2.8 * keypoint.size×2.8mm的* keypoint.size)周围的每个大小关键。

因此​​,这里是我的猜想:通过快速检测发现的关键点总是有自己的尺寸等于7,但SURF探测器可以找到更大尺寸的关键点。所以,180的大关键点进行处理超过319的小。

for my master thesis, i am running some test on the SIFT SURF en FAST algoritms for logo detection on smartphones.

when i simply time the detection, description en matching for some methods i get the following results.

For a SURF detector and SURF descriptor:

180 keypoints found

  • 1,994 seconds keypoint calculation time (SURF)

  • 4,516 seconds description time (SURF)

  • 0.282 seconds matching time (SURF)

when I use a FAST detector in stead of the SURF detector

319 keypoints found

  • 0.023 seconds keypoint calculation time (FAST)

  • 1.295 seconds description time (SURF)

  • 0.397 seconds matching time (SURF)

The FAST detector is much faster than the SURF detector, and even detects almost twice as many keypoints 100 times faster. These results are predictable.

The next step though is not a predicted result. How is it possible that de SURF descriptor is faster with the 319 FAST keypoints then with the 180 SURF keypoints?

From what I know, the description has no relation with the detection algorithm... yet these results are not as predicted.

does any one know how this is possible?

here is the code:

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

解决方案

AFAIK the most time consuming part of SURF descriptor extraction is subpixel extraction of patch having (2.8*keypoint.size x 2.8*keypoint.size) size around the every keypoint.

So here is my guess: keypoints found by FAST detector always have their size equal to 7 but SURF detector can find keypoints of much bigger size. So 180 "big" keypoints are processed longer than 319 "small".

这篇关于SURF描述更快快速检测?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆