我的目标是将 3D 点云与 ICP 对齐。不知何故,我有一个错误,我相信这是因为累积矩阵变换。
对于调试,我从创建的 2D 点云开始。为了创建点云,我创建了一个随机角度,并用 cos() 和 sin() 将它们标记为 ax 和 ay 值,所以我在一个圆上有随机点。比我为每个新创建的图像使用迭代上升的平移和旋转。
我正在生成大约 20 个点云并将它们存储在这些 512*512 图像中。比我想加载图像,用它们创建点云并将它们与 ICP 对齐。
现在进行累积矩阵变换。时间 0 的图像将具有身份矩阵。但是任何其他图像都会从最后一个已知位置得到从 ICP (M) 收集的矩阵乘以变换矩阵作为变换:Mi = M * Mi-1
我不确定这是否是写入方式,或者我是否必须在应用完整转换之前转换回 Identity。
我的结果是 10 个点云:
在第一个中,我们看到没有 ICP 的收集点云,而在第二个中,我们看到了 ICP。我之前只用翻译测试过它,效果非常好。而且我只用旋转来测试它,而且我有很高的错误率。可能是旋转太高,因此 ICP 将点对齐错误,而不是找到错误的匹配项。
但是,如果我测试真实数据,从 Xbox Kinect 相机收集的图像,它似乎与我的 2D 点云示例中的错误相同。
那么我计算累积矩阵变换是否错误?还是可能有我看不到的不同问题?
我应该如何正确设置我的 ICP?我只使用设置:
icp.setTransformationEpsilon (1e-9);
还有其他方法可以正确测试吗?