Вычислить координаты пространства камеры из визуализации vtk

Я визуализировал изображение в vtk, я хотел бы спроецировать точки изображения (x, y) на координаты кадра 3D-камеры. Для каждого пикселя (x, y) у меня есть значение z в кадре камеры (полученное из z-буфера).

Стандартный способ сделать это в проекции точечного отверстия:

x_camera_frame = (x_pixel - cx) * z_camera_frame/ fx;

y_camera_frame = (y_pixel - cy) * z_camera_frame / fy;

где fx и fy - фокусное расстояние, а cx cy - центр проекции камеры (внутренние параметры).

Проблема в том, что с vtkCamera вы можете установить только поле зрения, но нет способа установить или получить фокусное расстояние или центр проекции, так как я могу рассчитать x_camera_frame и y_camera_frame?


person Aly    schedule 08.08.2013    source источник


Ответы (1)


Обычно центром проецирования является положение камеры, т.е. (0,0,0) в пространстве камеры. Это означает, что верхний левый угол вашего изображения должен быть в P = (-imagewidth/2, -imageheight/2, fl), (fl - фокусное расстояние), при условии, что после преобразования перспективы не применяются никакие дальнейшие 2-мерные преобразования (обрезка, изменение размера и т. Д.).

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

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

Арун

person Arun R    schedule 08.08.2013