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

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

У меня есть две камеры типа «рыбий глаз», которые я успешно откалибровал, поэтому искажение снимается на обоих изображениях.

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

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

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

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

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

12

Решение

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

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

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

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

В основном, процедура будет выглядеть следующим образом:

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

T2<-1 = R2<-1 * [Я3 | 0]

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

TN<-1 = square_root (R2<-1) * [Я3 | 0]

TN<-2 = ТN<-1 * T2<-1-1

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

ЧАСN<-1 = К * РN<-1 * К-1

ЧАСN<-2 = К * РN<-2 * К-1

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

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

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

Ссылка: [HZ03] Хартли, Ричард и Эндрю Циссерман. Многообразие геометрии в компьютерном зрении. Издательство Кембриджского университета, 2003.

4

Другие решения


По вопросам рекламы [email protected]