Фруктовый
-
Количество публикаций
10 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные пользователем Фруктовый
-
-
ЦитатаСпасибо. Все примеры по установке для 2.2 и 2.4.3
Делаю простейший пример. В ответ: "не найден класс Мат".
не ориентируюсь в старых версиях, на сколько знаю все туториалы отлично работают на 2.4.11 и выше.
проверьте подключаете ли вы модуль Core.Mat
ЦитатаФруктовый, может подскажите, что прописать надо, чтобы работало.
я работаю со средой Java, поэтому если у вас другая - то увы, помочь не смогу.
ЦитатаГде что плюсовать и сказать "спасибо"?
понятия не имею =)
-
-
Решение проблемы:
Перед вызовом match() надо дергать метод train()
Итого работа матчера на Java:
//Инициалищация класса матчера особенностей DescriptorMatcher matcher = DescriptorMatcher.create(BRUTEFORCE_HAMMING); //сравнение особенностей matcher.train(); matcher.match(descriptorsImageTemple, descriptorsImage, matches);
При этом более приемлемый "боевой" результат получился на версии OpenCV.2.4.13 чем на OpenCV.3.1. в виду большей поддержки типов детекторов\дескрипторов. Удалось подобрать сочетание с лучшей производительностью. Всем спасибо!
-
Вообщем, видимо я что-то не так делаю при создании детекторов.
Вот код объявления:
// Инициалищация класса детектора особенностей FeatureDetector detector = FeatureDetector.create(FAST); //Инициалищация класса десриптора особенностей DescriptorExtractor extractor = DescriptorExtractor.create(ORB); //Инициалищация класса матчера особенностей DescriptorMatcher matcher = DescriptorMatcher.create(BRUTEFORCE_HAMMING);
Вот результат срабатывания:
ЦитатаkeypointsImageTemple= 1x2670
keypointsImage= 1x1977
descriptorsImageTemple= 32x2226
descriptorsImage= 32x1939
matches= 1x2226На объекте детектируется больше точек чем на сцене, и если я правильно понимаю сопоставление пар происходит не однозначно. Как быть?
-
Обращение результатов в нужную сторону не дало.
Вот лучшее чего добился при снижении количества сравниваемых пар и повышение порога RANSAC до 10.
При увеличении количества пар, итоговые точки контура сбиваются в одну точку. Как это можно объяснить?
Судя по тому как сравнены особенности, дело видимо в матчере. В документации на 3.1. я не нашел как его настраивать.
-
Попробовал заменить Core.perspectiveTransform на ручной способ указанный тут
// Находим трансформацию между исходным изображением и с тем, которое // ищем if( !cvFindHomography( &_pt1, &_pt2, &_h, CV_RANSAC, 5 )) return 0; // По полученному значению трансформации (в матрицу _h) находим // координаты четырёхугольника, характеризующего объект for( i = 0; i < 4; i++ ) { double x = src_corners[i].x, y = src_corners[i].y; double Z = 1./(h[6]*x + h[7]*y + h[8]); double X = (h[0]*x + h[1]*y + h[2])*Z; double Y = (h[3]*x + h[4]*y + h[5])*Z; dst_corners[i] = cvPoint(cvRound(X), cvRound(Y)); }
получились дурацкие координаты опять же, грешу на findHomography
как проверить адекватность получаемого этой функцией результата?
-
Рисую, вон получается маленькая зеленая форма "песочных часов"
почему то точки в scene_corners_m после Core.perspectiveTransform(obj_corners_m,scene_corners_m, H);
определяются близко к друг другу.
может у меня Calib3d.findHomography( obj, scene, RANSAC,1); неправильно выдает результат?
-
Получился вот такой результат.
Почему объект не обводится прямоугольником?
что может идти не так при локализации объекта?
полностью повторил код из этого туториала с детектором FAST, дескриптором ORB, матчером BRUTEFORCE_HAMMING
Код локализации на Java:
//-- Localize the object Point obj_point[] = new Point[good_matches.size()]; Point scene_point[] = new Point[good_matches.size()]; List<KeyPoint> keypoints_object = keypointsImageTemple.toList(); List<KeyPoint> keypoints_scene = keypointsImage.toList(); for( int i = 0; i < good_matches.size(); i++ ) { //-- Get the keypoints from the good matches obj_point[i]=keypoints_object.get(good_matches.get(i).queryIdx).pt; scene_point[i]=keypoints_scene.get(good_matches.get(i).trainIdx).pt; } MatOfPoint2f obj = new MatOfPoint2f(obj_point); MatOfPoint2f scene = new MatOfPoint2f(scene_point); Mat H = Calib3d.findHomography( obj, scene, RANSAC,1); //-- Get the corners from the image_1 ( the object to be "detected" ) Point obj_corners[]= new Point[4]; obj_corners[0] = new Point(0,0); obj_corners[1] = new Point(ImageTemple.cols(), 0 ); obj_corners[2] = new Point(ImageTemple.cols(), ImageTemple.rows()); obj_corners[3] = new Point(0, ImageTemple.rows()); MatOfPoint2f obj_corners_m = new MatOfPoint2f(obj_corners); MatOfPoint2f scene_corners_m = new MatOfPoint2f(); Core.perspectiveTransform(obj_corners_m,scene_corners_m, H);
-
Добрый день,
Пробую реализовать указанный здесь метод на Java.
Столкнулся с тем, что при инициализации дескриптора типа FREAK выдает ошибку об ошибочном параметре функции create().
Посмотрел в исходники features2d_manual.hpp оказалось что там данный метод закоменчен и не реализован.
Вопрос, что делать? можно заменить его на ORB и получить такой же результат?
что тогда надо делать при матчинге? или действия такие же?
Версия 2.4.3
в OpenCV
Опубликовано · Report reply
да.