Имея точку из 3 статических камер, перспективы, как восстановить свое положение в трехмерном пространстве? - PullRequest
0 голосов
/ 05 января 2019

У нас одинаковое положение прямоугольника относительно 3 одинаковых типов статически установленных веб-камер , которые не находятся на одной линии. Скажем, на плоском баскетбольном поле. Таким образом, у нас есть все внутри одного трехмерного пространства и (x, y, z); (ax, ay, az); позиции и ориентации для всех них.

У нас есть цвет шара, и мы нашли его положение на всех 3 изображениях im1, im2, im3. Теперь, имея свою позицию на 2d кадрах (p1x, p1y);(p2x, p2y);(p3x, p3y), и положение камеры, как получить положение шара в трехмерном пространстве?

1 Ответ

0 голосов
/ 05 января 2019
  1. Вам необходимо снять проекцию 2D экранные координаты в 3D координаты в пространстве.
  2. Вам нужно решить систему уравнений, чтобы найти реальную точку в 3D из 3 лучей, которые вы получили на первом шаге.

Вы можете найти исходный код для gluUnProject здесь . Я также привожу здесь свой код:

public Vector4 Unproject(float x, float y, Matrix4 View)
{
    var ndcX = x / Viewport.Width * 2 - 1.0f;
    var ndcY = y / Viewport.Height * 2 - 1.0f;
    var invVP = Matrix4.Invert(View * ProjectionMatrix);
    // We don't z-coordinate of the point, so we choose 0.0f for it.
    // We are going to find out it later.
    var screenPos = new Vector4(ndcX, -ndcY, 0.0f, 1.0f);
    var res = Vector4.Transform(screenPos, invVP);
    return res / res.W;
}

Vector3 ComputeRay(Camera camera, Vector2 p)
{
    var worldPos = Unproject(p.X, p.Y, camera.View);
    var dir = new Vector3(worldPos) - camera.Eye;
    return new Ray(camera.Eye, Vector3.Normalize(dir));
}

Теперь вам нужно найти пересечение трех таких лучей. Теоретически этого было бы достаточно, чтобы использовать только два луча. Это зависит от положения ваших камер.

Если бы у нас была арифметика с плавающей запятой бесконечной точности и ввод был без шума, это было бы тривиально. Но в действительности вам может понадобиться использовать простую числовую схему, чтобы найти точку с соответствующей точностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...