Сопоставление между различными видами камер

#computer-vision #homography #projective-geometry

Вопрос:

У меня есть откалиброванная (виртуальная) камера в Blender, которая просматривает примерно плоский объект. Я делаю изображение из первой позы камеры P0 и перемещаю камеру в новую позу P1. Таким образом, у меня есть матрица камеры 4×4 для обоих видов, из которой я могу рассчитать преобразование между камерами, как показано ниже. Я также знаю внутреннюю матрицу К. Используя их, я хочу сопоставить точки с изображения для P0 с новым изображением, видимым с P1 (конечно, у меня есть основная истина для сравнения, потому что я могу визуализировать в Блендере после того, как камера переместится на P1). Если я только поверну камеру между P0 и P1, я смогу идеально рассчитать гомографию. Но если есть перевод, вычисленная матрица гомографии не учитывает это. Теория гласит, что после вычисления M10 последняя строка и столбец должны быть удалены для плоской сцены. Однако, когда я проверяю M10, я вижу, что значения перевода находятся в крайнем правом столбце, который я отбрасываю, чтобы получить матрицу гомографии 3×3 H10. Тогда, если вращения нет, H10 равно матрице идентичности. Что здесь происходит не так?

Редактировать: Я знаю, что изображения связаны гомографией, потому что, учитывая два изображения с P0 и P1, я могу найти гомографию (путем сопоставления функций), которая идеально отображает изображение с P0 на изображение с P1, даже при наличии поступательного движения камеры.

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

Комментарии:

1. вся эта математика часто преподносится небрежно. этой страницы будет недостаточно. не просто предполагайте, что вы можете уменьшить размер 4×4 до 3×3 независимо от этого. могут быть условия. не думайте, что объяснение правильное или что вы его правильно поняли. ищите вывод/доказательство этого шага. проверьте это. — Я не могу погрузиться в это. это не тривиальные вещи. требуется время, чтобы понять. — несколько лет назад я попытался получить омографию для изображения с камеры самолета, расположенного в пространстве… все пошло плохо. совсем недавно, с меньшим количеством степеней свободы, все прошло довольно гладко… уменьшите проблему

2. Матрица H10 зависит от выбора плоскости n0 . p c0 = 0 . Матрица M10 , кодирующая вращение и перемещение между двумя позициями, может быть фиксированной, то есть две позиции 0 и 1 могут быть фиксированы относительно мировой системы координат, но если вы измените n0 . p c0 = 0 матрицу H10 , она тоже должна измениться. Так H10 что все зависит M10 и зависит n0 . p c0 = 0 .

3. Итак, если мы установим d0=0 , как сказано в книге, означает ли это, что перевода нет? Мне кажется, что только тогда можно отбросить последнюю строку и столбец M10 , чтобы получить H10 .

4. Определенно, в общем случае вы не можете устанавливать d0=0 . В случае чистого вращения, когда центр камеры не меняется, мне кажется, что вы можете отбросить координату d0, так как тогда гомография имеет чисто 2D-проективную природу. В противном случае, когда сетнер камеры перемещается, гомография не является чисто 2D-проективной, но является ограничением 3D-проективной карты.

5. Я думаю, вопрос в следующем: знаете ли вы положение самолета n0 . p c0 в 3D? Поскольку у вас этого нет, то я не думаю, что вы сможете найти H10 в общем случае, когда есть перевод центра камеры. Если только у вас нет множества совпадающих точек на двух изображениях., что позволит вам построить H10 и реконструировать плоскость .

Ответ №1:

Теория стала для меня более ясной после прочтения двух других книг: «Геометрия множественных представлений» Хартли и Зиссермана (Пример 13.2) и, в частности, «Приглашение к трехмерному видению: от изображений к геометрическим моделям» (Раздел 5.3.1, Планарная омография). Ниже приведен план, пожалуйста, проверьте вышеупомянутые источники для подробного объяснения.

Рассмотрим два изображения точек p на 2D-плоскости P в 3D-пространстве, преобразование между двумя кадрами камеры может быть записано следующим образом: X2 = R*X1 T (1) где X1 и X2 являются координатами мировой точки p в кадрах камеры 1 и 2, соответственно, R вращение и T перемещение между двумя кадрами камеры. Обозначая единичный вектор нормали плоскости P к первому кадру камеры как N и расстояние от плоскости P до первой камеры как d , мы можем использовать уравнение плоскости для записи N.T*X1=d ( .T означает транспонирование) или, что эквивалентно (1/d)*N.T*X1=1 (2) для всех X1 на плоскости P . Подстановка (2) в (1) дает X2 = R*X1 T*(1/d)*N.T*X1 = (R (1/d)*T*N.T)*X1 . Следовательно, матрица плоской гомографии (3×3) может быть извлечена как H=R (1/d)*T*N.T , то есть X2 = H*X1 . Это линейное преобразование от X1 до X2 .

Расстояние d может быть вычислено как произведение точек между нормалью плоскости и точкой на плоскости. Затем K для расчета проективной гомографии следует использовать внутреннюю матрицу камеры G = K * R (1/d)*T*N.T * inv(K) . Если вы используете программное обеспечение, такое как Blender или Unity, вы можете самостоятельно настроить встроенные функции камеры и таким образом получить K . Для Blender в этом отличном ответе приведен хороший фрагмент кода.

В этом руководстве OpenCV есть хороший пример кода; см. «Демонстрация 3: Омография по смещению камеры».