如何围绕轴旋转点云?

时间:2012-12-14 15:00:41

标签: c++ matrix point-clouds point-cloud-library

我有一个深度图像的点云,相机在水平面上方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轮换?

2 个答案:

答案 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]'

了解更多信息:http://en.wikipedia.org/wiki/Transformation_matrix