2012-03-27 88 views
2

我正在使用openCV for android来实现徽标检测算法。我现在的目标是在我用android相机拍摄的照片中找到预定义的徽标。找不到正确的FAST-SURF匹配当使用openCV for android

我无法获得任何正确的匹配..我认为这很奇怪,考虑到我几乎只使用openCV库函数。

首先,我使用FAST检测器检测关键点,然后使用SURF描述这些关键点,我的图像尺寸为500x500,大小为 。 与knn我要求2个最好的匹配,并消除那些没有比率小于0.6(first.distance/second.distance)的人。

我得到大约10场比赛,但他们都错了,当我画每一场比赛(100+),他们似乎都错了

我看不到我在做什么错在这里,有没有人有同样的问题,或知道我在做什么错了?

FeatureDetector FAST = FeatureDetector.create(FeatureDetector.FAST); 

    // extract keypoints 
    FAST.detect(image1, keypoints); 
    FAST.detect(image2, logoKeypoints); 

    DescriptorExtractor SurfExtractor = DescriptorExtractor 
      .create(DescriptorExtractor.SURF); 
    Mat descriptors = new Mat(); 
    Mat logoDescriptors = new Mat(); 

    SurfExtractor.compute(image1, keypoints, descriptors); 
    SurfExtractor.compute(image2, logoKeypoints, logoDescriptors); 

    List<DMatch> matches = new ArrayList<DMatch>(); 
    matches = knn(descriptors, logoDescriptors); 
    Scalar blue = new Scalar(0, 0, 255); 
    Scalar red = new Scalar(255, 0, 0); 
    Features2d.drawMatches(image2, logoKeypoints, image1, keypoints, 
      matches, rgbout, blue, red); 
+1

您是否尝试过SURF关键点上的SURF功能? – 2012-03-27 19:12:42

+0

什么是knn函数?它是否正确实施? – 2012-04-04 07:12:25

+0

我想几乎所有的组合... SIFT筛分 SURF冲浪 FAST-SURF ... 每个组合有同样的问题。 knn函数为您提供了2个最佳匹配,通过比较这两个匹配,您可以找到真正跳出来的匹配,并有最好的机会成为真正的肯定 – piepie 2012-04-04 11:41:27

回答

3

我认为这个问题是您正在使用的匹配。对于基于浮点的(如SURF)描述符,使用FLANN作为匹配器或BRUTEFORCE作为匹配器。还努力为提取和匹配使用相同的特征描述符......即SURF关键点上的SURF特征。

阅读这篇文章在stackoverflow和链接的文章,以便更好地理解。 How Does OpenCV ORB Feature Detector Work?