Определение местоположения камеры из 3 известных точек - PullRequest
2 голосов
/ 02 марта 2010

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

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

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

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

Приветствия

Mike

Ответы [ 6 ]

2 голосов
/ 02 марта 2010

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

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

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

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

0 голосов
/ 27 июня 2017

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

0 голосов
/ 04 мая 2010

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

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

0 голосов
/ 03 марта 2010

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

  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. Переместите эту центральную точку от ограничивающего прямоугольника, добавляя (или вычитая) нормаль из точки. Продолжайте двигаться, пока не достигнете желаемого поля зрения.
0 голосов
/ 02 марта 2010

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

0 голосов
/ 02 марта 2010

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

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

альтернативный текст http://img.amazon.ca/images/I/41Ob1y3baeL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU15_.jpg

...