我有 3 个点云(云 0、云 1 和云 2),使用地面激光扫描仪在 3 个不同的位置获得。这些云在它们之间重叠,这意味着存在一个刚性 3D 身体变换 T,它可以正确地将一个云记录到另一个云上。我有两个这样的转换,T10,它将云 1 移动到云 0;和 T20,它将云 2 移动到云 0(选择云 0 作为全局参考)。问题是,如何找到将云 2 与云 1 重叠的转换?我已经找到了旋转,但我找不到平移向量。这是可能的?
我通过将变换 T20 乘以 T10 的倒数得到的旋转,因为 T10^(-1) = T01,因此,T20*T01 = T21。当我将此转换应用于云 2 时,它会正确地将云 2 旋转到云 1(两者都在同一方向),但是它们之间存在偏移,我不明白为什么。
这些变换只是齐次矩阵 T (4x4),它们只是旋转矩阵 R (3x3) 和平移向量 t (3x1) 的交汇点,对吧?可以组成轮换。我发现从云 2 到云 1 的旋转表明了这一点。但是为什么这种转变会出现在翻译中呢?
其实我有几朵云,要注册一个远离原点的云,我需要通过乘法累加几次变换(例如:T50 = T54 * T43 * T32 * T21 * T10),我乘的越多,差异越大在翻译中。
我想说的是,虽然乘法会累积错误,但它们非常小,因为注册是手动完成的,并通过 ICP 进行了细化。事实上,成对应用任何转换都会导致几乎完美的重叠,但累积它们会导致翻译出现巨大偏差。旋转非常好,以至于闭环实际上会产生单位矩阵。