Преобразуйте Eye Gaze (Pitch and yaw) в координаты экрана (Куда смотрит человек?) - PullRequest
0 голосов
/ 23 октября 2018

Я задаю эти вопросы как урезанную версию моего предыдущего вопроса .Теперь, когда у меня есть лицо, просматривающее некоторую позицию на экране, а также координаты взгляда (шаг и рыскание) обоих глаз.Допустим,

Left_Eye = [-0.06222888 -0.06577308]

Right_Eye = [-0.04176027 -0.44416167]

Я хочу определить координаты экрана, где человек, вероятно, может находитьсясмотря на?Это возможно?Пожалуйста, помогите!

1 Ответ

0 голосов
/ 24 октября 2018

Что вам нужно:

  1. 3D-положение и направление для каждого глаза

    вы утверждаете, что получили его, но высота и рыскание простоУглы Эйлера и вам также нужны некоторые системы отсчета и порядок преобразований, чтобы преобразовать их обратно в трехмерный вектор.Лучше оставить направление в векторном виде (который, я подозреваю, вы получили в первую очередь).Наряду с направлением, вам также необходимо указать 3D-положение в той же системе координат ...

  2. 3D-определение плоскости проекции

    , поэтомувам нужно как минимум начальное положение и 2 базисных вектора, определяющих ваш плоский прямоугольник.Гораздо лучше использовать для этого матрицу однородного преобразования 4x4 , потому что это позволяет очень легко преобразовывать ее в локальную систему координат и обратно в нее ...

Итак, я вижу этокак это:

line of sight

Так что теперь просто найти пересечение между лучами и плоскостью

P(s) = R0 + s*R
P(t) = L0 + t*L
P(u,v) = P0 + u*U +v*V

Решение этой системы будетпривести к получению u,v, который также является 2D-координатой внутри вашей плоскости, на которую вы смотрите.Конечно, из-за неточностей это не будет разрешимо алгебраически.Поэтому лучше преобразовать лучи в плоские локальные координаты и просто вычислить точку на каждом луче с помощью w=0.0 (делая это простое линейное уравнение с одним неизвестным) и вычислить среднее положение между одним для левого глаза и другим для правого глаза (в случае, если они не выровнены идеально).

поэтому Если R0',R',L0',L' - преобразованные значения в локальных координатах UVW, то:

R0z' + s*Rz' = 0.0
s = -R0z'/Rz'
// so...
R1 = R0' - R'*R0z'/Rz'
L1 = L0' - L'*L0z'/Lz'
P = 0.5 * (R1 + L1)

Где P - точка, на которую вы смотритев координатах UVW ...

Преобразование выполняется легко в соответствии с вашими обозначениями, вы либо умножаете обратную или прямую матрицу, представляющую плоскость, на (R,1),(L,1),(R0,0)(L0,0).Четвертая координата (0,1) просто указывает, преобразуете ли вы вектор или точку.

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

Если ваша плоскость является плоскостью проецирования камеры, то U,V являются осями x и y изображения, снятого с камеры, и W является нормальным для него (направление - это просто вопрос записи).

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

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