Выровняйте изображения в opencv

У меня есть изображения одной и той же сцены, сфокусированные на разных расстояниях. Я хочу выровнять изображения таким образом, чтобы каждая функция находилась в одинаковом положении на каждом изображении. Как я могу сделать это с помощью OpenCV?

3 ответа

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

Во-вторых, самый простой способ, которым вы должны попробовать, - это вручную выбрать как минимум 4 париса соответствующих точек, записать их координаты и передать их в функцию findHomography(). Полученное преобразование 3x3 можно использовать в warpPerspective() для сопоставления изображений. Если результат хороший, вы можете автоматизировать процесс поиска соответствий, используя, скажем, точки SURF и сопоставляя их дескрипторы.

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

Вы можете использовать сшивание изображений или алгоритмы обработки деталей openCV.

Основные этапы сопоставления функций:

  • Извлечь особенности (SURF или SIFT или другие...)
  • Сопоставьте функции (FLANN или BruteForce...) и отфильтруйте совпадения
  • Найти геометрическое преобразование (RANSAC или LMeds...)

Основная идея состоит в том, чтобы поворачивать изображения в плоскости и их 2D-перемещение в направлениях X и Y на основе их соответствующих характерных точек.

Проверьте Алгоритмы выравнивания изображения, где вы можете найти два подхода для этого, используя OpenCV (с кодом).

Другие вопросы по тегам