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


21

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

Я думаю, что следующие вопросы заслуживают подробного пошагового ответа.

  • Каковы особенности камеры?
  • Что такое камера?
  • Как вычислить гомографию на плоском маркере?
  • Если у меня есть гомография, как я могу получить позу камеры?

Я не уверен в том, что вы делаете перенормировку: 1. H - гомография, найденная по данным с использованием некоторой процедуры (скажем, SVD). 2. inv (K) * H = A - это то, с чем вы здесь работаете. Затем вы делаете q1 = a1 / norm (a1) и q2 = a2 / norm (a2) как ортонормированные столбцы матрицы вращения, и делаете q3 = q1xq2 ... Затем вы берете t / (что-то), чтобы получить вектор перевода. Как получается, что вы можете просто разделить q1 и q2, возможно, на разные вещи, и как вы выбираете, на что делить t? Или идея в том, что процедура SVD и умножение на inv (K) дают что-то близкое, но не совсем ортогональное / ортонормированное вращение, поэтому th
user2600616

Но как я могу получить 3D точку (X, Y, 1)?
waschbaer

Ответы:


19

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

Каковы особенности камеры?

Камеры внутренние параметры, как правило , называется матрицей калибровки камеры, K . Мы можем написать

K=[αusu00αvv0001]

где

  • и α v являются масштабным коэффициентом внаправлениях координат u и v и пропорциональны фокусному расстоянию f камеры: α u = k u f и α v = k v f . k u и k v - количество пикселей на единицу расстояния в направлениях u и v .αuαvuvfαu=kufαv=kvfkukvuv

  • называется главной точкой, обычно координатами центра изображения.c=[u0,v0]T

  • - это перекос, только ненулевой, если u и v не перпендикулярны.suv

Камера откалибрована, когда внутренние характеристики известны. Это можно сделать легко, поэтому это не является целью компьютерного зрения, а является тривиальным шагом в автономном режиме.

Что такое камера?

Внешние параметры камеры или внешние параметры - матрица 3 × 4, которая соответствует евклидову трансформации из мировой системы координат в систему координат камеры. представляет вращения и перевод.[R|t]3×4Rт3×3t

Приложения компьютерного зрения фокусируются на оценке этой матрицы.

[R|t]=[R11R12R13TxR21R22R23TyR31R32R33Tz]

Как вычислить гомографию на плоском маркере?

Гомография - это однородная матрица которая связывает трехмерную плоскость и проекцию изображения. Если у нас есть плоскость то гомография которая отображает точку на эту плоскость и соответствующую ей 2D точку под проекцией равнаZ = 0 H M = ( X , Y , 0 ) T m P = K [ R | т ]3×3Z=0HM=(X,Y,0)TmP=K[R|t]

m~=K[R1R2R3t][XY01]

=K[R1R2t][XY1]

H=K[R1R2t]

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

Нам просто нужно 4 пары для вычисления гомографии с использованием прямого линейного преобразования.

Если у меня есть гомография, как я могу получить позу камеры?

Гомография и позы камеры содержат одну и ту же информацию, и ее легко переходить от одного к другому. Последний столбец обоих - это вектор перевода. Первый столбец и два гомографии также являются первым столбцом и двумя матрицы позы камеры. Это только левый столбец три из , и, поскольку он должен быть ортогональным, он может быть вычислен как перекрестный продукт столбцов один и два:K [ R | t ] H 1 H 2 R 1 R 2 R 3 [ R | т ]HK[R|t]H1H2R1R2R3[R|t]

R3=R1R2

Из-за избыточности необходимо нормализовать деление , например, на элемент [3,4] матрицы.[R|t]


4
Я думаю, что вводить в заблуждение утверждение о том, что калибровка «проста и не является целью CV, вводит в заблуждение». В обычном случае нам также необходимо оценить параметры искажения. Вместо самокалибровки я бы порекомендовал плоскую калибровку (Чжан - новая гибкая методика калибровки камеры), поскольку она более гибкая, если можно выполнить отдельную процедуру калибровки. У вас также есть небольшая ошибка в «Если у меня есть гомография, как я могу получить позу камеры?» поскольку вы не учитываете калибровку (H_ {calib} = K ^ -1H).
buq2

3
Поза камеры от омографии неверна. Есть несколько способов сделать это, некоторые из них весьма нетривиальны.
mirror2image

Я не понимаю, почему это неправильно. Я вычисляю это так и работает. Почему вы говорите, что это неправильно?
Jav_Rock

3
В последнем разделе вы написали, что H ^ 1 и R ^ 1 и равны, но в 3-м разделе вы утверждаете, что H = K [RT], что означает, что R ^ 1 на самом деле является K ^ -1H ^ 1. Но это не совсем верно, поскольку существует бесконечное число H, которые удовлетворят уравнениям и вызовут проблемы при решении R ^ 1, R ^ 2 и T (неизвестный масштаб). Ваш ответ не учитывает надежную внутреннюю калибровку и калибровку искажений, и некоторые уравнения неверны, по этой причине это не является хорошим ответом на вопрос.
buq2

Да, я пропустил калибровочную матрицу на третьем шаге, поскольку я взял это из своего кода и умножил на K в другой функции кодов.
Jav_Rock

3

Хотя объяснение двумерного случая очень хорошо, ответ, предложенный Jav_Rock, не обеспечивает правильного решения для поз камеры в трехмерном пространстве. Обратите внимание, что для этой проблемы существует несколько возможных решений.

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

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

Матрица встроенных функций в этом случае должна быть представлена ​​в пиксельных единицах, это означает, что ваша основная точка обычно (imageWidth / 2, imageHeight / 2) и ваше фокусное расстояние обычно focalLengthInMM / sensorWidthInMM * imageHeight.


Что такое правильно масштабированная матрица встроенных функций?
Guig

1
Я обновил свой ответ. Пожалуйста, смотрите выше.
Emiswelt

Эй @ Emiswelt, не фокусное расстояние focalLengthInMM / sensorWidthInMM * imageWidth? Почему вы выбираете высоту вместо этого?
El Marce
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.