Изображения стежков OpenCV, деформируя оба

Я уже нашел много вопросов и ответов о сшивании изображений и деформировании с помощью OpenCV, но я все еще не мог найти ответа на мой вопрос.

У меня есть две камеры fisheye, которые я откалиброван, так что искажение удалено на обоих изображениях.

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

Итак, я обнаруживаю Keypoint и Descriptor. Я нахожу совпадения, а также получаю матрицу гомографии, поэтому могу деформировать одно из изображений, которое дает мне действительно растянутое изображение. Другое изображение остается нетронутым. Растяжение - это то, чего я хочу избежать. Поэтому я нашел здесь приятное решение: Растянуть решение.

На слайде 7 вы можете увидеть, что оба изображения искажены. Я думаю, что это уменьшит растяжение одного изображения (по моему мнению, растяжка будет разделена, например, 50:50). Если я ошибаюсь, скажите мне.

Проблема заключается в том, что я не знаю, как деформировать два изображения, чтобы они соответствовали друг другу. Должен ли я рассчитать две гомографии? Должен ли я определять опорную плоскость как Rect() или что-то еще? Как добиться результата деформирования, как показано на слайде 7?

Чтобы было ясно, я не участвую в TU Dresden, так что это то, что я нашел во время исследования.

Ответ 1

Деформирование одного из двух изображений в кадре координат другого является более распространенным, потому что это проще: можно непосредственно вычислить преобразование 2D преобразования из соответствия изображений.

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

Основная идея (очень грубо) представлена ​​в виде рисунка на слайде # 2 в связанной презентации. Я сделал больше:

введите описание изображения здесь

В принципе, процедура будет следующей:

  • Если ваши камеры откалиброваны, вы можете оценить относительную трехмерную позу между двумя изображениями исключительно из соответствий характеристик, вычислив основную матрицу, выведя существенную матрицу [HZ03, п. 9.6 и уравнение 9.12], и выведите относительную позу [HZ03 пункт 9.6.2]. Следовательно, вы можете оценить, например, трехмерное жесткое преобразование T 2 < -1, отображающее кадр координат img1 на кадр координат img2:

T 2 < -1= R 2 < -1 * [I 3 | 0]

  1. Из этого вы можете очень точно определить плоскость изображения для нового изображения по отношению к двум другим изображениям. Например:

T n < -1= square_root (R 2 < -1) * [I 3 | 0]

T n < -2= T n < -1 * T 2 < -1 -1

  1. Из этих двух относительных поз вы можете получить двумерные преобразования пикселей для преобразования двух изображений в новую плоскость изображения [HZ03, пример 13.2]. В принципе, гомоморфизм деформирования от img1 к новому изображению и от img2 к новому изображению:

H n < -1= K * R n < -1 * K -1

H n < -2= K * R n < -2 * K -1

  1. Затем вы можете также вычислить диапазон допустимых пикселей (то есть xmin, xmax, ymin, ymax) в новой плоскости изображения, чтобы обрезать его и сформировать новое изображение.

Обратите внимание, что на шаге 3 предполагается, что изображения взяты из одной и той же точки пространства (чистое вращение камеры), в противном случае между изображениями может быть некоторый параллакс, который может создавать видимые дефекты сшивания.

Надеюсь, что это поможет.

Ссылка: [HZ03] Хартли, Ричард и Эндрю Зиссерман. Множественная геометрия зрения в компьютерном зрении. Cambridge University press, 2003.