Как определить трехмерное положение объекта с точки зрения? - PullRequest
2 голосов
/ 19 ноября 2009

У меня есть ситуация, как показано на рисунке, где мне нужно определить x, y красного и синего квадрата в прямоугольном пространстве, но в перспективе. Длина и ширина прямоугольника известны. Прямоугольники одинаковы, только если смотреть из разных мест. Разница в том, что один вид смещен на 90 градусов вправо от прямоугольника.

Спасибо ... alt text

Ответы [ 3 ]

1 голос
/ 19 ноября 2009

Обратите внимание, что следующее является общим решением. Я думаю, что я выполнил математику правильно; любой, кто знает лучше, должен прокомментировать (или отредактировать, если вы уверены ...)

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

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

Это даст вам линейную систему для каждого объекта или функции:

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). Поскольку эта система переопределена, вы можете решить ее, используя методы наименьших квадратов.

Один из способов понять переопределенный бит: учитывая пару камер (как описано в их матрицах), вы ожидаете, что они будут последовательно показывать сцену. Если одна из камер смещена неправильно (т. Е. Матрица камеры не полностью отражает реальную камеру), она может показывать объекты в месте выше или ниже, чем должно (скажем), так что результат этой камеры будет несовместимым с другим.

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

0 голосов
/ 20 сентября 2016

Аффинная матрица в обработке изображений должна помочь вам определить ее точное местоположение, если это линейная система. [x, y] =

[Sxcos0, sin0

-sin0, Sycos0]

http://www.sci.utah.edu/~acoste/uou/Image/project3/ArthurCOSTE_Project3.pdf https://www.cse.unr.edu/~bebis/CS485/Lectures/GeometricTransformations.ppt

0 голосов
/ 19 ноября 2009

Есть ли у вас базовые знания линейной алгебры? Если да, то это легко.

1) Вам нужна матрица проекций обеих проекций (назовите их P1 и P2, которые являются матрицами 3x2) 2) У вас есть уравнения: t (x1, y1) = P1 t (x, y, z) и t (x2, y2) = P2 t (x, y, z) (где t - транспонирование вектора) 3) Вы получаете систему из 3 неизвестных и 4 уравнений

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

Скорее всего, вы можете придумать что-нибудь более причудливое (всего одна матрица 3 на 4, слева от которой должна быть псевдообратная).

Если вы ничего не знаете о линейной алгебре, ну ... просто спросите, и я буду развиваться.

PS: извините, если математика написана на плохом английском

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