Эффекты преобразования 3D-камеры на 2-мерном пикселе изображения - PullRequest
2 голосов
/ 30 октября 2011

У меня есть вопрос. Допустим, я снял изображение с камеры. После этого я поворачиваю камеру на rX, rY, rZ (высота, рыскание, крен) и переводю ее в (Tx, Ty, Tz) и снимаю секундуimage. Где будет точка пикселя изображения (Px, Py) на первом изображении на втором изображении?

Px,Py ( any pixel point in image - given )
rX,rY,rZ , Tx , Ty , Tz (camera rotation and translation vectors - given)
have to find new value of that pixel point after camera rotation.

Любое уравнение или логика, чтобы решить эту проблему?это может быть проще, но я не мог найти решение. Пожалуйста, помогите мне.спасибо.

Ответы [ 3 ]

2 голосов
/ 30 октября 2011

К сожалению, у вас недостаточно информации для решения проблемы. Давайте посмотрим, смогу ли я сделать рисунок здесь, чтобы показать вам, почему:



      /
cam1 <    (1)   (2)   (3)
      \


                \ /
                 v
                cam2

Надеюсь, это понятно. Допустим, вы делаете три снимка из cam1, с некоторым объектом, расположенным в (1), (2) и (3). Во всех трех случаях объект расположен точно в центре изображения.

Теперь вы перемещаете камеру в положение cam2, что включает поворот на 90 градусов против часовой стрелки по оси Y и некоторый перевод по X и Z.

Для простоты, скажем, ваш Px,Py является центром изображения. Три изображения, которые вы сделали с помощью cam1, имеют один и тот же объект в этом пикселе, поэтому, какие бы уравнения и расчеты вы ни использовали для определения местоположения этого пикселя в cam2 изображениях, они будут иметь одинаковый вход для трех изображений, поэтому они также будут производить тот же результат. Но ясно, что это будет неправильно, поскольку из местоположения cam2 каждое из трех снимков, которые вы делаете, будет видеть объект в совершенно ином положении, двигаясь горизонтально по кадру.

Вы видите, чего не хватает?

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

Если у вас была глубина для Px,Py, тогда вы можете выполнить обратную проекцию перспективы из cam1 и получить трехмерное местоположение этого пикселя относительно cam1. Затем вы примените обратное вращение и перемещение, чтобы преобразовать точку в трехмерное пространство относительно cam2, а затем выполните перспективную проекцию из cam2, чтобы найти то, что будет новым местоположением в пикселях.

Извините за плохие новости, надеюсь, это поможет!

1 голос
/ 30 октября 2011

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

0 голосов
/ 30 октября 2011

Вы можете искать opengl transformation math.Ссылки должны предоставить вам математику вращения и перевода в 3d.

Например, эта ссылка показывает:

 Rotations:
  Rotation about the X axis by an angle a:
  |1       0        0    0|
  |0  cos(a)  -sin(a)    0|
  |0  sin(a)   cos(a)    0|
  |0       0        0    1|
...