用PCL从ICP中累积矩阵变换

时间:2017-01-31 08:29:08

标签: c++ matrix-multiplication point-cloud-library matrix-transform

我的目标是将3D点云与ICP对齐。不知怎的,我有一个错误,我相信这是因为累积的矩阵变换。

对于调试,我从2D点云开始,我创建了。为了创建点云,我创建一个随机角度并用cos()和sin()将它们标记为x和y值,所以我在圆上有随机点。比我使用每个新创建的图像迭代上升的平移和旋转。

generated point cloud generated point cloud

我生成大约20点云并将它们存储在这些512 * 512图像中。比我想要加载图像,从中创建点云并将它们与ICP对齐。

现在进行累积矩阵变换。时间0处的图像将具有Identity矩阵。但是,从上一个已知位置开始,从ICP(M)收集的矩阵乘以变换矩阵,其他图像将变为转换。 Mi = M * Mi-1

我不确定这是写方式,还是在应用完全转换之前我必须转换回Identity。

我的结果是10点云:

without ICP with ICP

首先,我们看到没有ICP的聚集点云,第二个是ICP。我之前只用翻译测试过它,效果非常好。而且我只用旋转测试它,在那里我有很高的错误。可能是,旋转是高的,因此ICP将点对齐错误而不是找到错误的匹配。

但如果我测试真实数据,从Xbox Kinect相机收集的图像,它似乎具有与我的2D点云示例相同的错误。

我计算累积矩阵变换是错误的吗?或者是否有一个我看不到的不同问题?

我应该如何正确设置ICP?我只使用设置:

icp.setTransformationEpsilon (1e-9);

还有其他方法可以正确测试吗?

0 个答案:

没有答案
相关问题