Кто-нибудь поделится своими знаниями об обнаружении функции OpenCV и извлечении фидуциальных маркеров?Фидуциальные маркеры - OpenCV - Обнаружение и соответствие функций
Я пытаюсь найти фидуциарный маркер (см. Изображение ниже) (самосозданный стиль ARTAG с использованием MS Paint) в сцене.
Использование функции обнаружения угла Harris, я могу адекватно найти углы изображения маркеров. Точно так же, используя обнаружение угла Харриса, я могу найти большинство углов маркера в сцене. Затем я использую SIFT для извлечения дескрипторов для изображения маркера и образа сцены. Затем я попробовал как BF, так и FLANN для соответствия функций. Тем не менее, оба алгоритма соответствия обычно совпадают с неправильными углами.
Есть ли что-то, что я могу сделать для повышения точности? Или существуют другие методы обнаружения, которые лучше подходят для этого приложения?
часть кода:
GoodFeaturesToTrackDetector harris_detector(6, 0.15, 10, 3, true);
vector<KeyPoint> keypoints1, keypoints2;
harris_detector.detect(im1, keypoints1);
harris_detector.detect(im2, keypoints2);
SiftDescriptorExtractor extractor;
Mat descriptors1, descriptors2;
extractor.compute(im1, keypoints1, descriptors1);
extractor.compute(im2, keypoints2, descriptors2);
BFMatcher matcher;
//FlannBasedMatcher matcher;
std::vector<DMatch> matches;
matcher.match(descriptors1, descriptors2, matches);
Есть ли у вас пытался использовать SIFT (а не GFFT), чтобы найти ключевые точки? –
Да, да. Проблема с использованием SIFT заключалась в том, что на самом деле он не обнаружил углов в фидуциальном маркере. Поэтому вместо того, чтобы находить ключевую точку в углу (высокий контраст от черного до белого), она будет определять точки полностью черные или полностью белые. – P3d0r
SIFT прав в том, что он делает. Ключевые точки не обязательно должны быть углы. Какие результаты вы получаете при замене GFFT на SIFT? –