2016-03-03 8 views
0

У меня есть изображение и 3 точек с следующими DATAS для каждой точки:Получить позицию 2d камеры по 3 точкам изображения (1D)

  • х и у 2d-мировых координат
  • х изображений координатных

Как вычислить ориентацию камеры (только влево/вправо) и положение 2d-world?

спасибо.

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

+0

Какую проекцию вы используете? –

+0

спасибо. Я добавил эту информацию – Jezer

ответ

0

Принимая во внимание точку в мировом пространстве, то проекция может быть выражена как

   (x - cx) * cos(phi) - (y - cy) * sin(phi) 
proj(x, y) = ----------------------------------------- 
      (x - cx) * sin(phi) + (y - cy) * cos(phi) 

cx и cy являются положение камеры и phi является вращение камеры. Проекция приведет к значению в координатах камеры (а не координатах изображения). Для того, чтобы преобразовать координаты изображения в координаты камеры, USW

cameraX(imageX) = (2 * imageX/W - 1) * tan(fovy/2) * ratio 

W ширин пиксель изображения, fovy является вертикальным полем зрения, ratio это соотношение сторон изображения.

Затем вы хотите решить систему уравнений, образованных тремя заданными точками. Существует аналитическое решение, но оно довольно сложно. Итак, вы остались с численными (вероятно, наименьшими квадратами) решателями. Выберите один, подключите формулу и получите результат. Поскольку вы оптимизируете как позицию, так и угол, вы можете нормализовать значения, чтобы они имели одинаковый диапазон. Я получил неплохие результаты с levmar для подобных проблем, если вы не знаете, какой оптимизатор использовать.

Все это предполагает, что камера не искажает изображение.

+0

спасибо, но у меня есть проблемы, чтобы понять это. почему fovy и не fovx? И мне нужно использовать формулу координат изображения для камеры для proj (x) и proj (y) без настроек? было бы очень полезно, если бы вы могли записать полное уравнение для одной точки. – Jezer

+0

Поле зрения обычно указывается для вертикального направления. Вы также можете использовать 'tan (fovx/2)' вместо 'tan (fovy/2) * ratio'. Вы должны преобразовать x-координаты изображения в координаты камеры перед тем, как поместить их в уравнение. 'proj (x, y)' также будет производить координаты камеры. –

+0

Я немного смущен: где x-координата изображения в уравнении? Я думал, что x и y - мировые позиции. cx, cy и phi - неизвестные. так и proj (x) координата изображения x, преобразованная в координатах камеры? Но какое значение мне нужно использовать для proj (y)? – Jezer