Поскольку вы визуализируете плоскую поверхность (в вашем случае экран телевизора), все ее изображения с перспективной камеры будут связаны омографиями. Это то же самое, если ваша камера перемещается и/или вращается. Поэтому, чтобы сшить разные изображения поверхности, вам не нужно выполнять какую-либо обработку 3D-геометрии (необходимые вычисления матрицы/триангуляция и т. д.).
Для решения вашей проблемы вам необходимо сделать следующее:
- Вы определяете гомографии между вашими изображениями. Поскольку у вас есть только два изображения, вы можете выбрать первое в качестве «источника», а второе — в качестве «цели» и вычислить гомографию от цели к источнику. Классически это делается с помощью обнаружения признаков и надежной подгонки гомографии. Обозначим эту гомографию матрицей 3x3 H.
- Вы преобразуете целевое изображение в исходное, используя H. Вы можете сделать это в openCV с помощью метода
warpPerspective
.
- Объедините ваш источник и искривленную цель, используя функцию смешивания.
Проект с открытым исходным кодом для выполнения именно этих шагов находится здесь.
Если на вашем телевизоре отсутствуют четкие функции или много помех на фоне, метод оценки H может быть не очень надежным. Если это так, вы можете вручную щелкнуть четыре или более соответствий на телевизоре в целевом и исходном изображениях и вычислить H с помощью метода findHomography
OpenCV. Обратите внимание, что ваши соответствия не могут быть полностью произвольными. В частности, не должно быть трех коллинеарных соответствий (в этом случае H не может быть вычислено). Их также следует щелкать как можно точнее, потому что ошибки повлияют на конечный стежок и вызовут артефакты ореолов.
Важное предостережение, если ваша камера имеет значительные искажения объектива. В этом случае ваши изображения не будут связаны омографиями. Вы можете справиться с этим, выполнив калибровку камеры с помощью OpenCV, а затем вам необходимо предварительно обработать изображения, чтобы устранить искажение объектива (используя метод undistort
OpenCV).
person
Toby Collins
schedule
12.01.2018