3D 旋转传播的平均值和度量

Average and Measure of Spread of 3D Rotations

我看过几个类似的问题,并且对我可以尝试的方法有一些想法,但我不记得看到过任何关于传播的问题。

所以:我正在研究一个测量系统,最终是基于计算机视觉的。

我进行了 N 次捕获,并使用一个库处理它们,该库以平移和旋转的 4x4 仿射变换矩阵的形式输出姿势估计。

这些姿势估计中有一些噪音。每个旋转轴的欧拉角标准偏差小于 2.5 度,因此所有方向彼此非常接近(对于所有欧拉角都接近 0 或 180 的情况)。小于 0.25 度的标准误差对我来说很重要。但是我已经 运行 解决了欧拉角特有的问题。

我想对所有这些非常接近的姿势估计进行平均,以获得单个最终姿势估计。而且我还想找到一些传播的衡量标准,以便我可以估计准确性。

我知道 "average" 实际上没有很好地定义旋转。

(郑重声明,我的代码使用 Numpy-heavy Python。)

我可能还想对这个平均值进行加权,因为已知某些捕获(和某些轴)比其他捕获更准确。

我的印象是,我可以只取平移向量的均值和标准差,而对于旋转,我可以转换为四元数,取均值,并以 OK 的精度重新归一化,因为这些四元数非常漂亮紧靠在一起。

我也听说过所有四元数都提到了最小二乘法,但我对如何实现它的大部分研究都以惨淡的失败告终。

这可行吗?在这种情况下是否有合理定义的传播衡量标准?

如果没有关于您的几何设置的更多信息,则很难回答。无论如何轮换我会:

  1. 创建 3 个单位向量

    x=(1,0,0),y=(0,1,0),z=(0,0,1)
    

    并对它们应用旋转并调用输出

    x(i),y(i),z(i)
    

    它只是将 matrix(i) 应用到 (0,0,0)

  2. 对所有测量值执行此操作

  3. 现在平均所有向量

    X=avg(x(1),x(2),...x(n))
    Y=avg(y(1),y(2),...y(n))
    Z=avg(z(1),z(2),...z(n))
    
  4. 更正矢量值

    所以把每个X,Y,Z的单位向量重新做一遍,取离旋转轴最近的轴作为主轴。它将保持原样并重新计算剩余的两个轴作为主轴和另一个向量的叉积以确保正交性。注意乘法顺序(错误的操作数顺序将否定输出)

  5. 构造平均变换矩阵

    请参阅 transform matrix anatomy 作为原点,您可以使用测量矩阵的平均原点

Moakher 写道 a paper 解释了基本上有两种方法可以计算旋转矩阵的平均值。第一个是加权平均值,然后使用 SVD 投影回 SO(3)。第二个是黎曼质心。这是一个更接近几何平均数的概念,而且计算起来更复杂。