Я разрабатываю приложение отслеживания признаков и до сих пор, после того, как вы попытались почти все детекторы/дескрипторы функций, у меня есть самые удовлетворительные общие результаты с ORB. И мой дескриптор функции, и детектор - это ORB.Оценка неустойчивой гомографии с использованием ORB
Я выбираю определенную область для обнаружения объектов на своем исходном изображении (путем маскировки). а затем сопоставить его с функциями, обнаруженными в последующих кадрах.
Тогда я фильтровать матчи, выполняя тест отношений на «спичках», полученных из следующего кода:
std::vector<std::vector<DMatch>> matches1;
m_matcher.knnMatch(m_descriptorsSrcScene, m_descriptorsCurScene, matches1,2);
Я также попытался тестом отношения двухстороннего (фильтрация совпадает с Источника к текущей сцене, и наоборот , а затем отфильтровать общие совпадения), но это не сделало многого, поэтому я продолжил одностороннее соотношение.
я также добавить мин проверить расстояние до моего отношения испытания, которые, apppears, дает лучшие результаты
if (distanceRatio < m_fThreshRatio && bestMatch.distance < 5*min_dist)
{
refinedMatches.push_back(bestMatch);
}
и в конце концов, я оценить гомографию.
Mat H = findHomography(points1,points2);
Я попытался с помощью метода RANSAC для оценки inliners, а затем с помощью тех, пересчитывать свою гомографию, но это дает больше нестабильности плюс потребляет больше времени.
Тогда, в конце концов, я рисую прямоугольник вокруг моей конкретной области, который должен быть отслежен. я получаю самолет координаты:
perspectiveTransform(obj_corners, scene_corners, H);
где «objcorners» являются координатами моей маскируются (или разоблачен) область.
Реактив, который я рисую, используя «scene_corners», кажется, вибрирует. увеличение количества функций немного уменьшило его, но я не могу увеличить их слишком сильно из-за ограничения времени.
Как я могу улучшить стабильность?
Любые предложения будут оценены.
Спасибо.
Спасибо за ваш ответ Мики. – Abhishek
Спасибо за ваш ответ Майки. Фактически я рассматривал не пересчет окна региона, если предыдущее окно имело аналогичный размер и положение, но я оставил это в качестве крайней меры. Угадайте, что с этим пошло. И еще одно: знаете ли вы, как работает параметр EdgeThreshold для ORB-детектора? увеличение означает, что нужно получить более сильные углы (края, следовательно, углы). – Abhishek
Это размер границы вокруг вашего изображения, в котором точки объекта не обнаружены. Поскольку он использует исправления для обнаружения точек функции, он не может работать слишком близко к краю изображения, иначе патч будет за пределами границ. Однако, если вы обнаруживаете только функцию в области большего изображения, вы можете уменьшить ее до нуля. Быстро посмотрите документацию, у нее есть дополнительная информация: http://docs.opencv.org/modules/features2d/doc/feature_detection_and_description.html#orb-orb – MikeGold