累积同质转换:轮换有效,但翻译不起作用?

问题描述

我有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进行完善。实际上,成对应用任何转换都会导致几乎完美的重叠,但是累加它们会导致转换产生巨大偏差。旋转是如此之好,以至于闭环实际上产生了单位矩阵。

解决方法

您是否忽略了旋转对翻译的影响?

如果您有一个具有旋转R和平移v的变换T,以及另一个具有旋转Q和平移v的变换S,那么将T和S应用于点x的效果是得到y,其中

y = Q*(R*x+v) + u = Q*R + Q*v + u 

这是组合的变换具有旋转

P = Q*R

和翻译

w = Q*v + u

由此可知,与T的逆变换具有旋转

inv(R)

和翻译

- inv(R)*v

我们通常可以用4x4矩阵表示这种转换,以这种方式构成和应用转换可简化为矩阵乘法。但是请注意,这要付出一定的效率代价。

上面的

S和T将由4x4矩阵M和N表示。

M = ( Q u)
  = ( 0 1)
N = ( R v)
    ( 0 1)

然后,组合变换T的代表L就是S

   L = M*N

要将S应用于我们计算的点x

M*(x)
  (1)

和结果的前三个组成部分是变换点的组成部分。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...