我有一个深度图像的点云,相机在水平面上方30度(在z轴上旋转30度)拍摄。我想将所有点转换回它们的位置,好像相机处于0度,我相信我可以使用以下旋转矩阵:
|cos(30) -sin(30) 0|
|sin(30) cos30 0|
|0 0 1|
但是,在查看用于转换点云的pcl方法时,我发现了这个:
pcl::transformPointCloud (const PointCloud< PointT > &cloud_in,
PointCloud< PointT > &cloud_out, const Eigen::Matrix< Scalar, 4, 4 > &transform)
但为什么它是一个4x4矩阵而不是上面的3x3轮换?
答案 0 :(得分:3)
|x||1 0 0 a| = |x+a|
|y||0 1 0 b| |y+b|
|z||0 0 1 c| |z+c|
|1||0 0 0 1| |1 |
在这个例子中,我们将点(x,y,z)移动到点(x + a,y + b,z + c)。这只能用4 x 4矩阵完成。
|cos(30) -sin(30) 0 0| multiply The Matrix above.
|sin(30) cos30 0 0|
|0 0 1 0|
|0 0 0 1|
这将为您提供一个点的旋转和平移。
答案 1 :(得分:2)
4x4矩阵是以下形式的转换矩阵
| R | t |
|--------- |
|0 0 0 | 1 |
其中R
是您的3x3旋转矩阵,t
是3x1平移向量。在您的情况下t = [0,0,0]'