2013-04-16 2 views
0

Я неофит компьютерного зрения Я использую этот алгоритм http://docs.opencv.org/doc/tutorials/features2d/feature_flann_matcher/feature_flann_matcher.html, предложенный OpenCV, чтобы рассчитать некоторые совпадающие точки между 2 сценами одной и той же среды (с высоты птичьего полета города) после рота-перевода камеры, которая принимает изображения. Камера и окружающая среда имитируются (поэтому без изменения яркости, без искажений и т. Д.) Очевидно, что частота кадров достаточно высока, чтобы изображения в значительной степени перекрывались. После этого я должен использовать эту точку, чтобы вычислить матрицу Аффинного преобразования, которая описывает движение, выполняемое камерой (высота от того, что сделанные изображения не меняются со временем). Так что мне нужно, для каждой пары изображений, как минимум 2 точки совпадения. Моя проблема в том, что часто совпадающие точки меньше 3 .. существует ли какой-нибудь надежный метод, который лучше работает для моих морских свиней? спасибоАлгоритм OpenCV - FLANN не получает достаточную совпадающую точку

+0

Вы используете код, который вы указали? Он должен быть надежным (по крайней мере, он должен работать в описанной вами ситуации). – JonesV

+0

Да, точно так же. Он прочный, в том смысле, что совпадение всегда точное, но странно, что даже если изображение делает очень мало движения и меняется только на несколько пикселей (не более десяти, скажем так), совпадений очень мало! – Matteo

+0

Сколько совпадений у вас перед фильтрацией (прокомментировано с помощью '// - Draw only« good »matches')? – JonesV

ответ

0

Я считаю, что фильтрация, реализованная в примере, который вы дали, довольно наивна. Предположим, вы получили один матч с действительно высоким счетом (w.r.t на расстоянии между дескрипторами), тогда min_dist действительно маленький и, возможно, фильтрует хорошие матчи. Другими словами, спички, имеющий лучший результат, не обязательно лучший геометрически (две функции могут выглядеть очень похожи, но не быть в реальном мире переписка) ...

Что вы можете попытаться сделать это:

  • Удалите реализацию фильтрации; держать все матчи
  • Compute матрица гомография с использованием findHomography()
    • findHomography() позволяет использовать mask для того, чтобы следить за inliers
  • рисовать только матчи, которые помечены как inliers в mask

Это должно быть лучшей проверкой.