Я использую OpenCV для Android для реализации алгоритма обнаружения логотипа.Теперь моя цель - найти предопределенный логотип на снимке, который я сделал с помощью камеры Android.
Я не могу получить ЛЮБЫЕ правильные совпадения ... Я думаю, что это очень странно, учитывая, что я почти только используюФункции библиотеки openCV.
Сначала я определяю ключевые точки с помощью детектора FAST, мои изображения имеют размер 500x500, затем я использую SURF для описания этих ключевых точек.с помощью 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);