2012-03-27 94 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?