Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用快速检测加快冲浪描述?_Android_Opencv_Sift_Surf - Fatal编程技术网

Android 使用快速检测加快冲浪描述?

Android 使用快速检测加快冲浪描述?,android,opencv,sift,surf,Android,Opencv,Sift,Surf,在我的硕士论文中,我正在对SIFT-SURF-en-FAST算法进行测试,该算法用于智能手机上的徽标检测 当我简单地对检测、描述和一些方法进行匹配时,我得到了以下结果 对于冲浪检测器和冲浪描述符: 找到180个关键点 1994秒关键点计算时间(SURF) 4516秒描述时间(SURF) 0.282秒匹配时间(SURF) 当我用快速探测器代替冲浪探测器时 找到319个关键点 0.023秒关键点计算时间(快速) 1.295秒描述时间(SURF) 0.397秒匹配时间(SURF) 快速检测器比

在我的硕士论文中,我正在对SIFT-SURF-en-FAST算法进行测试,该算法用于智能手机上的徽标检测

当我简单地对检测、描述和一些方法进行匹配时,我得到了以下结果

对于冲浪检测器和冲浪描述符:

找到180个关键点

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

  • 4516秒描述时间(SURF)

  • 0.282秒匹配时间(SURF)

当我用快速探测器代替冲浪探测器时

找到319个关键点

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

  • 1.295秒描述时间(SURF)

  • 0.397秒匹配时间(SURF)

快速检测器比冲浪检测器快得多,甚至检测到几乎两倍于100倍的关键点。这些结果是可以预测的

但下一步并不是预测的结果。319个快速关键点的反冲浪描述符比180个冲浪关键点更快,这是怎么可能的

据我所知,描述与检测算法无关。。。然而,这些结果并不像预期的那样

有人知道这是怎么可能的吗

代码如下:

    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 SURF描述符提取最耗时的部分是对每个关键点周围具有(2.8*keypoint.size x 2.8*keypoint.size)大小的面片进行亚像素提取


所以我猜:快速探测器发现的关键点的
大小总是等于7,但冲浪探测器可以找到更大的关键点。因此,180个“大”关键点的处理时间比319个“小”关键点的处理时间长。

您能发布一些代码吗?:)我的一些代码被添加到问题中!我已经计算出了SIFT描述符,但在我的论文中没有完全描述SURF描述符,也许如果我这样做了,我会知道这一点。你的解释似乎很合理,我想这可能是我问题的正确答案!谢谢