从vtk渲染计算相机空间坐标

时间:2013-08-08 11:22:51

标签: c++ math opengl graphics 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;

其中fxfy是焦距,cx cy是相机投影的中心(内在参数)。

问题是,使用vtkCamera您只能设置视野,但无法设置或获得焦距或投影中心,那么我将如何计算x_camera_framey_camera_frame

1 个答案:

答案 0 :(得分:1)

通常投影中心是摄像机位置即。 (0,0,0)在相机空间。这意味着图像的左上角应该是P = (-imagewidth/2, -imageheight/2, fl),(fl是焦距),假设在透视变换后没有应用进一步的2d变换(裁剪,调整大小等)。

P此处表示从相机空间看到的图像平面中的点。要将其转换为乘以投影矩阵的倒数,您应该能够获得相机空间中的点。

我假设你知道图像的宽度和高度是多少。要获得焦距,可以使用相机与focal point之间的距离。 API还会返回Projection Transform Matrix,因此您可以在将其应用于图像平面点之前计算其倒数。

阿伦