ロゴ検出アルゴリズムを実装するために、Android用のopenCVを使用しています。私の目標は、Android カメラで撮影した写真で定義済みのロゴを見つけることです。
正しい一致を取得できません..ほとんどopenCVライブラリ関数のみを使用していることを考えると、これは非常に奇妙だと思います。
最初に FAST 検出器を使用してキーポイントを検出します。画像のサイズは 500x500 です。その後、SURF を使用してこれらのキーポイントを記述します。knn で 2 つのベスト マッチを求め、A 比率が 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);