通过FAST检测更快地描述SURF?

问题描述 投票:7回答:1

对于我的硕士论文,我正在对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关键点然后使用180个SURF关键点,de 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));
android opencv sift surf
1个回答
7
投票

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

[这是我的猜测:FAST检测器找到的关键点始终将其size等于7,但SURF检测器可以找到更大的关键点。因此处理180个“大”关键点的时间要长于319个“小”关键点。


0
投票

在快速描述符算法中可以获取关键点,但不能通过描述符来进行比较。我可以通过快速算法来比较两个图像吗?它也适用于图像不变式吗?

© www.soinside.com 2019 - 2024. All rights reserved.