Найти хорошую гомографию с разных точек зрения?

Я делаю обнаружение объектов с помощью выделения признаков (sift, orb).

Я хочу извлечь функцию ORB с другой точки зрения объекта (изображения поезда), а затем сопоставить все их с изображением запроса.

Проблема, с которой я столкнулся, заключается в следующем: как я могу создать хорошую гомографию из ключевой точки, исходящую с разных точек зрения изображения, которое имеет разные размеры?

Изменить

Я думал создать гомографию для каждого изображения поезда, которое получило 3-4 совпадения, а затем вычислило некоторую "среднюю" гомографию...

Пролемам возникает, если вы, например, произнесите всего 1-2 матча из каждого изображения поезда, в этот момент вы не сможете создать даже 1 гомографию

Код для создания гомографии

  //> For each train images with at least some good matches ??
  H = findHomography( train, scene, CV_RANSAC );
  perspectiveTransform( trainCorners, sceneCorners, H);

Ответ 1

Я думаю, что нет смысла делать это, поскольку пара изображений A и B не имеет ничего общего с парой изображений B и C, когда вы говорите о гомографии. Вы получите разные наборы хороших совпадений и разных гомографий, но гомологии не будут связаны друг с другом, и никакая ошибка не будет иметь точку.

Вся минимизация должна быть в пределах совпадений, ключевых точек и дескрипторов, рассматривающих только пару изображений.

Существует идея, подобная той, которую вы задаете в дескрипторе FREAK. Вы можете тренировать выбранные пары с помощью набора изображений. Это означает, что FREAK определит наилучший шаблон для извлечения дескрипторов на основе набора изображений. После этого обучения вы должны найти более надежные математики, которые дадут вам лучшую гомографию.

Ответ 2

Чтобы найти хорошую гомографию, вам нужны точные совпадения ваших ключевых точек. Вам нужно 4 матча.

Наиболее распространенным методом является DLT в сочетании с RANSAC. DLT - это линейное преобразование, которое находит матрицу гомографии 3x3, которая обеспечивает ваши ключевые точки в сцену. RANSAC находит наилучший набор ярусов/выбросов, который удовлетворяет математической модели, поэтому он найдет лучшие 4 точки в качестве входа DLT.

ИЗМЕНИТЬ

Вам нужно найти надежные ключевые точки. SIFT подавляется, чтобы сделать это, масштаб и перспективный инвариант. Я не думаю, что вам нужно тренироваться с разными изображениями. Найти среднюю гомографию не имеет смысла. Вам нужно найти единственную гомографию для обнаруженного объекта, и эта гомография будет преобразованием между маркером и обнаруженным объектом. Гомография точна, нет смысла находить среднее значение.

Ответ 3

Пробовал ли вы использовать ключевые точки из представлений объекта: train_kps_1, train_kps_2... затем сопоставлять эти массивы со сценой, а затем выбирать лучшие совпадения из нескольких массивов, в результате чего получается один массив хороших совпадений. И, наконец, используйте этот результат, чтобы найти гомографию как "поезд".

Ключевым моментом здесь является выбор лучших совпадений, это другой вопрос, который вы можете найти здесь:

http://answers.opencv.org/question/15/how-to-get-good-matches-from-the-orb-feature/

И, может быть, здесь:

http://answers.opencv.org/question/2493/best-matches/