我想要做的是将pointcloud光线投射到2D图像。我所拥有的是一个3D PointCloud和一个与一般世界坐标系不同的Viewpoint。我想从这个观点进行光线投射,以生成点云的2D图像。所以,我只需要一个像getintersectedvoxel这样的方法,它可以对整个区域进行投射,而不仅仅是单个光线。
答案 0 :(得分:0)
这是从3D到相机的投影。您可以使用针孔相机模型方程式获得它(如图here所示)。
您需要前3个定义相机的参数:焦距f
和投影平面的中心:cx
,cy
。有了这个你创建一个3x3矩阵(我将使用matlab语法):
A = [ f 0 cx;
0 f cy;
0 0 1 ];
您可以使用cx = 0.5 * image_width
,cy = 0.5 * image_height
和某些值f = 800
之类的内容(尝试使用其中一些来检查图片效果如何)。
然后,一个3x4矩阵,从相机框架到点云框架的转换(你说你有它):
T = [ r11 r12 r13 tx;
r21 r22 r23 ty;
r31 r32 r33 tz ];
最后,你的点云在齐次坐标系中,即在一个4xN矩阵中,用于具有N个点的点云:
P = [ x1 x2 ... xN;
y1 y2 ... yN;
z1 z2 ... zN;
1 1 ... 1 ];
现在你可以投射点数:
S = A * T * P;
S
是一个3xN矩阵,其中每个第i个3D点的像素坐标为:
x = S(1, i) / S(3, i);
y = S(2, i) / S(3, i);