2012-03-27 7 views
2

私はロゴ検出アルゴリズムを実装するためにアンドロイド用のopenCVを使用しています。私の目標は、アンドロイドカメラで撮影した画像にあらかじめ定義されたロゴを見つけることです。は、アンドロイド用のopenCVを使用しているときに正確なファストサーフの一致を見つけることができません

私は正しいマッチを得ることができません。私はほとんどがopenCVライブラリ関数を使用していると考えて、これは非常に奇妙だと思います。

最初に私はFAST検出器を使用してキーポイントを検出します。私の画像は500x500サイズです その後、私はこれらのキーポイントを記述するためにSURFを使います。 とknn私は2つのベストマッチを求め、0.6より小さい(first.distance/second.distance)人がいない人を除外します。

私は私がここで間違ってやっているものを見ることができない私はすべての試合(100 +)を描画するとき、彼らはすべての

間違っているように見える、私は周りに10試合を取得していますが、彼らはすべて間違っています誰も同じ問題を抱えているのですか、私が間違っていることを知っていますか?

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機能を試しましたか? –

+0

knn関数とは何ですか?それは正しく実装されていますか? –

+0

は、私はほとんどすべての組み合わせ... は SURF-SURF FAST-SURF ... すべての組み合わせは、同じ問題を抱えているのSIFT-SIFTを試してみました。 knn関数は2つのベストマッチを与えます。これらの2つのマッチを比較することで、本当に飛び出したマッチを見つけることができ、真のポジティブになる可能性が最も高くなります – piepie

答えて

3

私は問題があなたが使用しているマッチャーだと思う。 (SURF)ディスクリプタなどのfloatベースの場合は、FLANNをマッチャ、またはBRUTEFORCEをマッチャとして使用します。また、抽出とマッチングの両方に同じフィーチャ記述子、つまりSURFキーポイントのSURFフィーチャを使用するように努めます。

この記事を読むには、stackoverflowとそれにリンクされている記事を理解してください。 How Does OpenCV ORB Feature Detector Work?

関連する問題