Гомография при переводе камеры (для сшивания)

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

Заранее спасибо.


person nadhir    schedule 28.12.2017    source источник
comment
В основном вам нужно вычислить относительное преобразование (т.е. вращение и перевод) между ними. Это можно сделать, вычислив основную матрицу. Получив это, вы можете триангулировать характерные точки, которые вы сопоставили, и получить разреженную реконструкцию. В противном случае вам может понадобиться изучить фотометрические ошибки и плотную реконструкцию, но это немного сложно.   -  person Ash    schedule 28.12.2017
comment
Как я уже сказал, я просто делаю перевод. Разве гомография не делает то, что вы говорите (триангулирует характерные точки)? фотометрические ошибки и плотная реконструкция? @Пепел   -  person nadhir    schedule 28.12.2017
comment
Не могу показать, потому что размер слишком большой. Я имею в виду, что между двумя изображениями есть разрыв. Если я сделаю 2-й снимок немного выше, я думаю, что это ноги.. Но я не могу понять, почему он делает это?   -  person nadhir    schedule 28.12.2017


Ответы (1)


Поскольку вы визуализируете плоскую поверхность (в вашем случае экран телевизора), все ее изображения с перспективной камеры будут связаны омографиями. Это то же самое, если ваша камера перемещается и/или вращается. Поэтому, чтобы сшить разные изображения поверхности, вам не нужно выполнять какую-либо обработку 3D-геометрии (необходимые вычисления матрицы/триангуляция и т. д.).

Для решения вашей проблемы вам необходимо сделать следующее:

  1. Вы определяете гомографии между вашими изображениями. Поскольку у вас есть только два изображения, вы можете выбрать первое в качестве «источника», а второе — в качестве «цели» и вычислить гомографию от цели к источнику. Классически это делается с помощью обнаружения признаков и надежной подгонки гомографии. Обозначим эту гомографию матрицей 3x3 H.
  2. Вы преобразуете целевое изображение в исходное, используя H. Вы можете сделать это в openCV с помощью метода warpPerspective.
  3. Объедините ваш источник и искривленную цель, используя функцию смешивания.

Проект с открытым исходным кодом для выполнения именно этих шагов находится здесь.

Если на вашем телевизоре отсутствуют четкие функции или много помех на фоне, метод оценки H может быть не очень надежным. Если это так, вы можете вручную щелкнуть четыре или более соответствий на телевизоре в целевом и исходном изображениях и вычислить H с помощью метода findHomography OpenCV. Обратите внимание, что ваши соответствия не могут быть полностью произвольными. В частности, не должно быть трех коллинеарных соответствий (в этом случае H не может быть вычислено). Их также следует щелкать как можно точнее, потому что ошибки повлияют на конечный стежок и вызовут артефакты ореолов.

Важное предостережение, если ваша камера имеет значительные искажения объектива. В этом случае ваши изображения не будут связаны омографиями. Вы можете справиться с этим, выполнив калибровку камеры с помощью OpenCV, а затем вам необходимо предварительно обработать изображения, чтобы устранить искажение объектива (используя метод undistort OpenCV).

person Toby Collins    schedule 12.01.2018