Вычислить матрицу гомографии на основе внутренних c и внешних c параметров камеры - PullRequest
0 голосов
/ 03 августа 2020

Я готов сшить панораму на 360 ° для 6 камер fi sh -eye.

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

Однако для моей камеры я уже знаю :

  • intrinsi c матрица камеры K , которую я вычислил посредством калибровки камеры.
  • Extrinsi c параметры камеры R и t . Ориентация камеры фиксирована и не меняется в любой момент. Камеры расположены на круге известного диаметра d, причем каждая камера расположена со сдвигом на 60 ° по отношению к кругу.

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

В литературе я нашел следующую формулу для вычисления матрицы гомографии, которая связывает изображение 2 с изображением 1:

H_2_1 = (K_2) * (R_2)^-1 * R_1 * K_1

Эта формула учитывает только угол поворота между камерами, но не вектор перемещения, который существует в моем случае.

Как я могу включить перевод t каждой камеры в вычисление H?

Я уже пытался вычислить H без учета перевода, но, поскольку d> 1 метр, изображения не выровнены точно на панораме.

EDIT:

Основываясь на ответе Франческо ниже, я получил следующие вопросы:

  • После калибровки линзы рыбий глаз, я получил матрицу K с фокусным расстоянием f=620 для изображения размером 1024 x 768. Считается ли это большим или малым фокусным расстоянием ?

  • Мои камеры расположены по кругу диаметром 1 метр. Приведенное ниже объяснение дает мне понять, что из-за этого "большого" перемещения между камерами у меня есть замечательные эффекты двоения с объектами, которые относительно близки к ним. Следовательно, если модель Homography не может полностью представить положение камер, можно ли использовать другую модель, например, Fundamental / Essential Matrix, для сшивания изображений?

1 Ответ

2 голосов
/ 04 августа 2020

Вы не можете «подключить» перевод: его присутствие вместе с нетривиальным поворотом математически подразумевает, что отношения между изображениями не являются гомографией. от камеры, т. е. если трансляции между камерами малы по сравнению с расстояниями объектов сцены от камер, а фокусные расстояния камер достаточно малы, то вы можете использовать гомографии, вызванные чистым вращением, как приближения.

Ваше уравнение неверно. Правильная формула получается следующим образом:

  • Возьмите пиксель в камере 1: p_1 = (x, y, 1) в однородных координатах
  • Спроецируйте его обратно в луч в 3D-пространстве: P_1 = inv(K_1) * p_1
  • Разложите луч в координатах камеры 2: P_2 = R_2_1 * P1
  • Спроецируйте луч в пиксель в камере 2: p_2 = K_2 * P_2
  • Составьте уравнения: p_2 = [K_2 * R_2_1 * inv(K_1)] * p_1

Продукт H = K2 * R_2_1 * inv(K1) является (приблизительной) омографией. Вращение R_2_1 преобразует точки в кадр 2 из кадра 1. Это матрица 3x3, столбцы которой представляют собой компоненты осей x, y, z кадра 1, разложенные в кадре 2. Если ваша установка дает вам поворот всех камер с относительно общего кадра 0, то есть как R_i_0, тогда это R_2_1 = R_2_0 * R_1_0.transposed.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...