Android 使用快速检测加快冲浪描述?
在我的硕士论文中,我正在对SIFT-SURF-en-FAST算法进行测试,该算法用于智能手机上的徽标检测 当我简单地对检测、描述和一些方法进行匹配时,我得到了以下结果 对于冲浪检测器和冲浪描述符: 找到180个关键点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) 快速检测器比
- 1994秒关键点计算时间(SURF)
- 4516秒描述时间(SURF)
- 0.282秒匹配时间(SURF)
- 0.023秒关键点计算时间(快速)
- 1.295秒描述时间(SURF)
- 0.397秒匹配时间(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));
AFAIK SURF描述符提取最耗时的部分是对每个关键点周围具有(2.8*keypoint.size x 2.8*keypoint.size)大小的面片进行亚像素提取
所以我猜:快速探测器发现的关键点的
大小总是等于7,但冲浪探测器可以找到更大的关键点。因此,180个“大”关键点的处理时间比319个“小”关键点的处理时间长。您能发布一些代码吗?:)我的一些代码被添加到问题中!我已经计算出了SIFT描述符,但在我的论文中没有完全描述SURF描述符,也许如果我这样做了,我会知道这一点。你的解释似乎很合理,我想这可能是我问题的正确答案!谢谢