3D 旋转分布的平均值和测量

ikr*_*ase 8 geometry quaternions affinetransform rotational-matrices pose-estimation

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

所以:我正在开发一个测量系统,最终基于计算机视觉。

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

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

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

我知道“平均”对于轮换实际上并没有很好的定义。

(郑重声明,我的代码是使用 Numpy 的 Python 编写的。)

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

我的印象是,我可以只取平移向量的平均值和标准差,对于旋转,我可以转换为四元数,取平均值,并以良好的精度重新归一化,因为这些四元数非常接近。

我还听说过所有四元数中的最小二乘法,但我对如何实现这一点的大部分研究都以惨败告终。

这可行吗?在这种情况下是否有一个合理明确的传播衡量标准?

Spe*_*tre 3

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

  1. 创建 3 个单位向量

    x=(1,0,0),y=(0,1,0),z=(0,0,1)
    
    Run Code Online (Sandbox Code Playgroud)

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

    x(i),y(i),z(i)
    
    Run Code Online (Sandbox Code Playgroud)

    它只是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))
    
    Run Code Online (Sandbox Code Playgroud)
  4. 修正向量值

    所以再次制作各个X,Y,Z单位向量,并取距离旋转轴较近的轴作为主轴。它将保持原样,并重新计算剩余两个轴作为主轴和另一个向量的叉积,以确保正交性。注意乘法顺序(错误的操作数顺序将使输出无效)

  5. 构造平均变换矩阵

    变换矩阵解剖学视为原点,您可以使用测量矩阵的平均原点