Обратите внимание, что следующее является общим решением. Я думаю, что я выполнил математику правильно; любой, кто знает лучше, должен прокомментировать (или отредактировать, если вы уверены ...)
Во-первых, вам нужно откалибровать ваши камеры: где они находятся, куда они указывают и каково их поле зрения. Это будет происходить как (или иначе должно быть уменьшено до) матрица проекции для каждой камеры, которая преобразует однородные точки мирового пространства в однородные точки обзора. Если вы не знаете об этом априори, вы можете понять это по известным общим признакам (скажем, спроецированные серые прямоугольники на диаграмме)
Затем вам нужно идентифицировать ваши объекты и их положение на каждом изображении. Скажем, найдите центр красного и синего прямоугольников.
Это даст вам линейную систему для каждого объекта или функции:
P=[x,y,z,w]^t = world point (homog. 4-vector)
p1=[x1,y1,w1]^t = point on screen 1; M1= 3x4 projection matrix 1: p1=M1*P
p2=[x2,y2,w2]^t = point on screen 2; M2= 3x4 projection matrix 2: p2=M2*P
Ваши известные данные: p1 / w1 = (u1, v1,1) и p2 / w2 = (u2, v2,1); умножьте их на переменные w1 и w2, чтобы получить:
(u1,v1) are constant -> p1=[u1*w1,v1*w1,w1]^t
(u2,v2) are constant -> p2=[u2*w2,v2*w2,w2]^t
assume that w=1 -> P=[x,y,z,1]^t
Наконец, у вас есть система из 6 уравнений с 5 переменными: (x, y, z, w1, w2). Поскольку эта система переопределена, вы можете решить ее, используя методы наименьших квадратов.
Один из способов понять переопределенный бит: учитывая пару камер (как описано в их матрицах), вы ожидаете, что они будут последовательно показывать сцену. Если одна из камер смещена неправильно (т. Е. Матрица камеры не полностью отражает реальную камеру), она может показывать объекты в месте выше или ниже, чем должно (скажем), так что результат этой камеры будет несовместимым с другим.
Поскольку вы, скорее всего, используете числа с плавающей запятой (и, возможно, даже данные реального мира), ваши значения в любом случае никогда не будут абсолютно точными, поэтому вам всегда придется решать эту проблему. Наименьших квадратов позволяет решить этот вид переопределенной системы; он также предоставляет значения ошибок, которые могут помочь в диагностике и решении проблем с данными.