Выровняйте направление обзора камеры, чтобы смотреть в определенном направлении

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

Соответственно, я бы нашел преобразование гомографии для изображения, учитывая матрицу вращения для камеры.

Пожалуйста, помогите мне с этим.


person Harshit Agrawal    schedule 29.03.2013    source источник
comment
Разве вы не можете просто создать новую матрицу обзора для камеры, которая использует желаемое положение / направление или вам нужна матрица вращения? Кстати, вы используете некоторые библиотеки, такие как Direct3D или OpenGL?   -  person miloszmaki    schedule 29.03.2013
comment
Нет, я не использую никаких библиотек. Я хочу получить матрицу вращения, чтобы я мог проецировать облако точек на изображение, чтобы получить карту глубины, соответствующую изображению. Надеюсь, это имеет смысл.   -  person Harshit Agrawal    schedule 29.03.2013


Ответы (2)


Пусть dir1 будет текущим направлением камеры, а dir2 будет целевым направлением камеры. Вычислить нормализованные векторы направления:

d1 = dir1 / |dir1|
d2 = dir2 / |dir2|

Мы хотим получить матрицу, которая вращается от d1 до d2. Другими словами, эта матрица должна выполнять поворот на угол theta вокруг оси в направлении u, где:

u = (d1 x d2) / |d1 x d2|       <-- normalized cross product of d1 and d2
sin(theta) = |d1 x d2|          <-- the length of the cross product
cos(theta) = d1 * d2            <-- dot product of d1 and d2

Наконец, мы вставляем указанные выше значения в эту формулу (дополнительную информацию можно найти здесь), получение запрашиваемой матрицы:

матрица вращения

person miloszmaki    schedule 29.03.2013
comment
Привет, Милошмаки, я получил твой ответ. У меня есть более простые сомнения. Нам не нужно переводить камеру обратно в исходную точку, чтобы выполнить этот поворот, не так ли? - person Harshit Agrawal; 29.03.2013
comment
Если ваша камера не находится в исходной точке, вам нужно сначала выполнить поворот, а затем выполнить перевод в целевую позицию. - person miloszmaki; 29.03.2013
comment
Хорошо, я попробую это и вернусь сюда! Большое спасибо :) - person Harshit Agrawal; 29.03.2013

Предполагая, что x является центром изображения, скажите c = [a,b,1] (это с учетом того, что изображение является 2D-изображением).

Теперь у вас есть матрица внутренних параметров K и матрица внешнего вращения R.

Мы можем найти направление в этом стиле:

temp_X = inverse(K) * c
temp_X = transpose(R) * temp_X
direction = temp_X / norm(temp_X)

final direction = t - direction

Я не знаю, правильно ли это, но вы можете попробовать.

person Utkarsh Deshmukh    schedule 04.12.2013