сшивание аэрофотоснимков - PullRequest
5 голосов
/ 16 мая 2011

Я пытаюсь сшить 2 аэрофотоснимка с очень небольшим наложением, возможно, наложение <500 пикселей. Эти изображения имеют разрешение 3600х2100. Я использую библиотеку OpenCV для выполнения этой задачи. </p>

Вот мой подход:

1. Find feature points and match points between the two images.
2. Find homography between two images
3. Warp one of the images using the homgraphy
4. Stitch the two images

Сейчас я пытаюсь заставить это работать с двумя изображениями. У меня проблемы с шагом 3 и, возможно, шагом 2. Я использовал findHomography() из библиотеки OpenCV, чтобы получить гомографию между двумя изображениями. Затем я позвонил warpPerspective() на одно из моих изображений, используя омографию.

Проблема с подходом состоит в том, что преобразованное изображение искажено. Также кажется, что трансформируется только определенная часть изображения. Я понятия не имею, почему это не преобразует весь образ.

Может кто-нибудь дать мне совет, как мне следует подойти к этой проблеме?
Спасибо

Ответы [ 3 ]

3 голосов
/ 16 мая 2011

В результатах, которые вы опубликовали, я вижу, что у вас есть хотя бы одно несоответствие ключевых точек. Если вы используете findHomography(src, dst, 0), это испортит вашу гомографию. Вы должны использовать findHomography(src, dst, CV_RANSAC) вместо.

Вы также можете попробовать использовать warpAffine вместо warpPerspective.

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

  1. рассчитать средний (или средний) вектор движения x_avg
  2. вычислить нормализованное скалярное произведение <x_avg, x_match>
  3. сбросить x_match, если скалярное произведение меньше порога
1 голос
/ 18 мая 2011

Чтобы заставить его работать с изображениями с меньшим перекрытием, вам нужно взглянуть на детектор, дескрипторы и совпадения.Вы не указываете, с какими дескрипторами вы работаете, но я бы предложил использовать дескрипторы SIFT или SURF и соответствующие детекторы.Вам также следует установить параметры детектора, чтобы сделать плотную выборку (т. Е. Попытаться обнаружить больше функций).

Вы можете сослаться на этот ответ, который немного связан: OpenCV - Сшивание изображений

0 голосов
/ 20 ноября 2013

Для сшивания изображений с помощью гомографии самое важное, о чем следует позаботиться, - это нахождение точек соответствия на обоих изображениях. Чем меньше выбросы в точках соответствия, тем лучше генерируемая гомография. Использование надежных методов, таких как RANSAC, вместе с функцией FindHomography () OpenCV (используйте CV_RANSAC в качестве опции) будет по-прежнему генерировать разумную гомографию, при условии, что процентная доля выбросов превышает процентную долю выбросов. Также убедитесь, что в точках соответствия, которые переданы функции FindHomography, есть как минимум 4 вложенных элемента.

...