转换列表的平均转换矩阵

Hug*_*une 10 algorithm math 3d transformation matrix

我有一个转换矩阵的多个估计,从两个点云到ICP(迭代最近点)相互映射.

如何为所有这些矩阵生成平均变换矩阵?

每个矩阵由刚性平移和仅旋转组成,没有刻度或倾斜.

理想情况下,我也想计算一个加权平均值,但是一个未加权的平均值现在可以.

平均翻译向量当然是微不足道的,但旋转是有问题的.我发现的一种方法是对旋转的各个基本向量求平均值,但我不确定是否会产生新的标准正交基,并且该方法似乎有点特别.

Nic*_*ler 11

拆分翻译和旋转转换是一个良好的开端.平均翻译是微不足道的.

平均旋转并不容易.大多数方法将使用四元数.因此,您需要将旋转矩阵转换为四元数.

逼近平均值的最简单方法是线性混合,然后重新规范四元数:

q* = w1 * q1 + w2 * q2 + ... + w2 * qn
normalize q*
Run Code Online (Sandbox Code Playgroud)

但是,这只是一个近似值.其原因在于,两个旋转的组合不是通过添加四元数来执行,而是通过将它们相乘来执行.如果我们将四元数转换为对数空间,我们可以使用简单的线性混合(因为乘法将成为加法).然后将四元数转换回原始空间.这是球面平均值的概念(Buss 2001).如果你很幸运,你会找到一个支持四元数的log和exp的库:

start with q* as above
do until convergence
    for each input quaternion i (index)
        diff = q[i] * inverse(q*)
        u[i] = log(diff, base q*)
    //Now perform the linear blend
    adapt := zero quaternion
    weights := 0
    for each input quaternion i
        adapt += weight[i] * u[i]
        weights += weight[i]
    adapt *= 1/weights
    adaptInOriginalSpace = q* ^ adapt    (^ is the power operator)
    q* = adaptInOriginalSpace * q*
Run Code Online (Sandbox Code Playgroud)

您可以为其定义阈值adaptInOriginalSpace.如果它是一个非常小的旋转,你可以打破循环.该算法被证明可以保持球体上的测地距离.


mcd*_*lla 2

http://en.wikipedia.org/wiki/Quaternions_and_spatial_rotationhttp://en.wikipedia.org/wiki/Rotation_matrix#Quaternion将为您提供一些优雅的数学知识以及一种将旋转矩阵转换为围绕旋转轴。每次旋转将有两种可能的表示,旋转角度和旋转轴都有不同的符号。

您可以转换所有内容并将它们标准化为具有 +ve 旋转角度,然后计算出平均旋转角度和平均旋转轴,将其重新标准化为单位向量。

OTOH,如果您的目的是计算出最准确的变换估计,则需要写下任何候选变换的拟合优度的一些度量 - 误差平方和通常在数学上很方便 - 然后解决优化问题找出哪种变换可以最小化误差平方和。这至少比取个别容易出错的估计的平均值更容易证明,而且很可能更准确。

  • 平均角度和轴似乎是一个简单的解决方案,但您确定它在数学上是合理的吗?如果两个角度属于不同的轴,那么对两个角度进行平均似乎很奇怪。 (2认同)