我在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
?
答案 0 :(得分:1)
通常投影中心是摄像机位置即。 (0,0,0)在相机空间。这意味着图像的左上角应该是P = (-imagewidth/2, -imageheight/2, fl)
,(fl是焦距),假设在透视变换后没有应用进一步的2d变换(裁剪,调整大小等)。
P
此处表示从相机空间看到的图像平面中的点。要将其转换为乘以投影矩阵的倒数,您应该能够获得相机空间中的点。
我假设你知道图像的宽度和高度是多少。要获得焦距,可以使用相机与focal point之间的距离。 API还会返回Projection Transform Matrix,因此您可以在将其应用于图像平面点之前计算其倒数。
阿伦