Принимая во внимание точку в мировом пространстве, то проекция может быть выражена как
(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 для подобных проблем, если вы не знаете, какой оптимизатор использовать.
Все это предполагает, что камера не искажает изображение.
Какую проекцию вы используете? –
спасибо. Я добавил эту информацию – Jezer