Определение местоположения камеры по 3 известным точкам

Я новичок здесь - так что, пожалуйста, потерпите меня, если я сделаю ложную ошибку!

У меня вопрос: есть ли хороший алгоритм для определения 3d-местоположения и ориентации камеры на основе того, где 3 (или более) известных 3d-точки оказываются на изображении, если смотреть с этой камеры?

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

Любые идеи с благодарностью получены!

Ура,

Майк

6 ответов

В общем, я думаю, что не будет единственного решения.

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

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

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

Вы должны использовать алгоритм Ransac! у вас должно быть эталонное фото, которое вы знаете по его местоположению с камеры в xyz, тогда вы должны сравнить новое изображение с эталонным изображением с помощью ransac. Затем вы можете найти смещение между двумя фотографиями, а затем добавить его в xyz refernce

Если вы думаете об этом... это на самом деле довольно простая идея... вот мой ход мыслей:

  1. Найдите самолет, на котором находятся 3 точки. Эта плоскость будет параллельна вашей плоскости проекции.
    1. Предполагая, что у вас есть точки A, B и C. Найдите перекрестное произведение вектора, идущего от A к B и от A к C
    2. Нормализуй это. Это твой самолет нормальный.
    3. Решите для барицентрического уравнения, вставив значения для Ax + By + Cz + D = 0, где A - x нормали, B - y нормали, C - z нормали, и вы решаете для D. Как только вы есть D, у вас есть представление самолета.
  2. Найдите ограничивающий прямоугольник вокруг всех трех точек на этой плоскости, это будет ваша геометрия рендеринга, конец вашего усеченного конуса (объем рендеринга).
  3. Найдите центральную точку этого ограничительного прямоугольника, который мы только что нашли. Это ваш начальный центр проекции.
  4. Переместите эту центральную точку от ограничивающего прямоугольника, добавляя (или вычитая) нормаль из точки. Продолжайте двигаться, пока не достигнете желаемого поля зрения.

С более чем тремя точками это, безусловно, возможно.

Именно так работают звездные трекеры для контроля ориентации космического корабля.

Это виртуальная камера или настоящая камера? Вам также нужно будет смотреть как f/stop и фокусное расстояние и, возможно, даже форму оптики. Это действительно зависит от того, насколько точно вы должны быть в соответствии с положением и насколько далеко друг от друга сфотографированные объекты. Если вы используете 200-миллиметровый зум с фокусировкой всего в несколько футов, ваше поле зрения может иметь ширину всего несколько дюймов. Тем не менее, если вы используете 4,5-миллиметровый полный круг "рыбий глаз" и имеете прямую круговую проекцию, у вас может быть 180 градусов обзора.

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

Взгляните на OpenCV, он делает это как часть калибровки камеры для стерео

http://img.amazon.ca/images/I/41Ob1y3baeL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU15_.jpg

Другие вопросы по тегам