Я некоторое время работал над темой оценки позы камеры для приложений дополненной реальности и визуального слежения, и я думаю, что хотя есть много подробной информации о задаче, все еще остается много недоразумений и недоразумений.
Я думаю, что следующие вопросы заслуживают подробного пошагового ответа.
- Каковы особенности камеры?
- Что такое камера?
- Как вычислить гомографию на плоском маркере?
- Если у меня есть гомография, как я могу получить позу камеры?
Ответы:
Важно понимать, что единственной проблемой здесь является получение внешних параметров. Внутренние характеристики камеры могут быть измерены в автономном режиме, и для этого есть множество приложений.
Каковы особенности камеры?
Камеры внутренние параметры, как правило , называется матрицей калибровки камеры,K . Мы можем написать
где
и α v являются масштабным коэффициентом внаправлениях координат u и v и пропорциональны фокусному расстоянию f камеры: α u = k u f и α v = k v f . k u и k v - количество пикселей на единицу расстояния в направлениях u и v .αu αv u v f αu=kuf αv=kvf ku kv u v
называется главной точкой, обычно координатами центра изображения.c=[u0,v0]T
- это перекос, только ненулевой, если u и v не перпендикулярны.s u v
Камера откалибрована, когда внутренние характеристики известны. Это можно сделать легко, поэтому это не является целью компьютерного зрения, а является тривиальным шагом в автономном режиме.
Некоторые ссылки:
ftp://svr-ftp.eng.cam.ac.uk/pub/reports/mendonca_self-calibration.pdf
Что такое камера?
Внешние параметры камеры или внешние параметры - матрица 3 × 4, которая соответствует евклидову трансформации из мировой системы координат в систему координат камеры. представляет вращения и перевод.[R|t] 3×4 R т3×3 t
Приложения компьютерного зрения фокусируются на оценке этой матрицы.
Как вычислить гомографию на плоском маркере?
Гомография - это однородная матрица которая связывает трехмерную плоскость и проекцию изображения. Если у нас есть плоскость то гомография которая отображает точку на эту плоскость и соответствующую ей 2D точку под проекцией равнаZ = 0 H M = ( X , Y , 0 ) T m P = K [ R | т ]3×3 Z=0 H M=(X,Y,0)T m P=K[R|t]
Чтобы вычислить гомографию, нам нужны пары точек мира-камеры. Если у нас есть плоский маркер, мы можем обработать его изображение, чтобы извлечь объекты, а затем обнаружить эти объекты в сцене для получения совпадений.
Нам просто нужно 4 пары для вычисления гомографии с использованием прямого линейного преобразования.
Если у меня есть гомография, как я могу получить позу камеры?
Гомография и позы камеры содержат одну и ту же информацию, и ее легко переходить от одного к другому. Последний столбец обоих - это вектор перевода. Первый столбец и два гомографии также являются первым столбцом и двумя матрицы позы камеры. Это только левый столбец три из , и, поскольку он должен быть ортогональным, он может быть вычислен как перекрестный продукт столбцов один и два:K [ R | t ] H 1 H 2 R 1 R 2 R 3 [ R | т ]H K[R|t] H1 H2 R1 R2 R3 [R|t]
Из-за избыточности необходимо нормализовать деление , например, на элемент [3,4] матрицы.[R|t]
источник
Хотя объяснение двумерного случая очень хорошо, ответ, предложенный Jav_Rock, не обеспечивает правильного решения для поз камеры в трехмерном пространстве. Обратите внимание, что для этой проблемы существует несколько возможных решений.
Эта статья предоставляет закрытые формулы для разложения гомографии, но формулы несколько сложны.
OpenCV 3 уже реализует именно эту декомпозицию ( degposeHomographyMat ). Учитывая гомографию и правильно масштабированную встроенную матрицу, функция обеспечивает набор из четырех возможных поворотов и переносов.
Матрица встроенных функций в этом случае должна быть представлена в пиксельных единицах, это означает, что ваша основная точка обычно
(imageWidth / 2, imageHeight / 2)
и ваше фокусное расстояние обычноfocalLengthInMM / sensorWidthInMM * imageHeight
.источник
focalLengthInMM / sensorWidthInMM * imageWidth
? Почему вы выбираете высоту вместо этого?