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

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

generated point cloud

generated point cloud

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

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

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

我的结果是10点 Cloud :

without ICP

with ICP

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

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

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

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

icp.setTransformationEpsilon (1e-9);

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