Выровняйте изображения в opencv
У меня есть изображения одной и той же сцены, сфокусированные на разных расстояниях. Я хочу выровнять изображения таким образом, чтобы каждая функция находилась в одинаковом положении на каждом изображении. Как я могу сделать это с помощью OpenCV?
3 ответа
Сначала вы должны определить трансформацию между вашими изображениями. Это может быть так же просто, как сдвиг или сложный, как нелинейная деформация. Операция фокусировки может не только смещать, но и слегка масштабировать и даже сдвигать изображения. В этом случае вы должны использовать гомографию, чтобы соответствовать им.
Во-вторых, самый простой способ, которым вы должны попробовать, - это вручную выбрать как минимум 4 париса соответствующих точек, записать их координаты и передать их в функцию findHomography(). Полученное преобразование 3x3 можно использовать в warpPerspective() для сопоставления изображений. Если результат хороший, вы можете автоматизировать процесс поиска соответствий, используя, скажем, точки SURF и сопоставляя их дескрипторы.
Наконец, если результат неудовлетворительный, вы должны иметь более общую трансформацию, чем гомография. Я бы попробовал кусочно Affine, пытаясь сопоставить кусочки изображений отдельно. В любом случае, больше информации о вашем вкладе и конечной цели поможет правильно решить проблему.
Вы можете использовать сшивание изображений или алгоритмы обработки деталей openCV.
Основные этапы сопоставления функций:
- Извлечь особенности (SURF или SIFT или другие...)
- Сопоставьте функции (FLANN или BruteForce...) и отфильтруйте совпадения
- Найти геометрическое преобразование (RANSAC или LMeds...)
Основная идея состоит в том, чтобы поворачивать изображения в плоскости и их 2D-перемещение в направлениях X и Y на основе их соответствующих характерных точек.
Проверьте Алгоритмы выравнивания изображения, где вы можете найти два подхода для этого, используя OpenCV (с кодом).