【问题标题】:How to rotate point cloud about an axis?如何围绕轴旋转点云?
【发布时间】:2013-04-18 19:39:19
【问题描述】:

我有一个深度图像的点云,它是用相机在水平上方 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 旋转矩阵呢?

【问题讨论】:

  • 您需要一个 4 x 4 矩阵来执行翻译。

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


【解决方案1】:
|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|

这将为您提供一个点的旋转和平移。

【讨论】:

  • 我将如何绕轴旋转?
  • @Aly 如果要旋转和平移一个点,请使用矩阵乘法。如果您想简单地旋转,只需单独使用旋转矩阵和额外的条目即可使其成为 4x4。
【解决方案2】:

4x4 矩阵是如下形式的变换矩阵

| R    | t | 
|--------- |
|0 0 0 | 1 |

R 是 3x3 旋转矩阵,t 是 3x1 平移向量。在你的情况下t = [0,0,0]'

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

【讨论】:

    猜你喜欢
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 2018-02-25
    • 1970-01-01
    相关资源
    最近更新 更多