gpt4 book ai didi

math - 找到优化的旋转

转载 作者:行者123 更新时间:2023-12-01 11:00:32 25 4
gpt4 key购买 nike

我有一个应用程序,我必须在其中找到从一组 15 个排序器和索引 3D 点(X1、X2、...、X15)到另一组具有相同索引的 15 个点(1 个初始点对应于 1 个最终点)的旋转。

我已经阅读了很多关于用欧拉角(对某些人来说是邪恶的)、四元数或在基轴上投影矢量来寻找旋转的文章。但我有一个额外的限制:我的最终集合中的一些点可能是错误的(即有错误的坐标),所以我想区分要求旋转距离中值旋转很远的点。

我的问题是:对于每组 3 个点(未对齐的点)及其图像,我可以计算四元数(根据变换矩阵不是纯旋转的事实,我有一些额外的计算,但可以完成)。所以我得到了一组四元数(最多 455 个),我想删除错误的四元数。

有没有办法找到哪些点给出远离平均旋转的旋转? “均值”和“标准差”是否对四元数有意义,还是我必须计算欧拉角?一旦我有了一组“好的”四元数,我该如何计算“平均”四元数/旋转?

干杯,

利口乐3D

最佳答案

这里有2个问题:

  • 你如何计算任意数量的点的“最佳拟合”?
  • 如何决定接受哪些点,拒绝哪些点?


  • 第一个的一般答案是“做一个 least squares 适合”。在这方面,四元数可能比欧拉角更好;尝试以下操作:
    foreach point pair (a -> b), ideal rotation by unit quaternion q is:
    b = q a q* -> q a - b q = 0

    因此,寻找适合 q 的最小二乘法:
    minimize sum[over i] of |q a_i - b_i q|^2
    under the constraint: |q|^2 = 1

    如上所述,除约束外,最小二乘问题是线性的,这应该比欧拉角公式更容易解决。

    对于第二个问题,我可以看到两种方法:
  • 如果您的点不是太远,您可以尝试使用所有点运行最小二乘求解器,然后返回,扔掉“异常值”(那些平方误差最大的点对),然后再试一次。
  • 如果非常不一致的点抛弃了上述过程,您可以尝试选择 3 或 4 对的随机小子集,并为每个找到最小二乘拟合。如果这些结果中的一大组具有相似的旋转且总误差较低,您可以使用它来识别“好”对(从而消除坏对);然后返回并找到适合所有好的对的最小二乘法。
  • 关于math - 找到优化的旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11312758/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com