4

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

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

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

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

干杯,

Ricola3D

4

2 回答 2

4

这里有2个问题:

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

第一个的一般答案是“做最小二乘拟合”。四元数可能会比欧拉角更好;尝试以下操作:

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 对的随机小子集,并找到适合每个的最小二乘法。如果一大组这些结果具有相似的旋转且总误差较低,您可以使用它来识别“好”对(从而消除坏对);然后返回并找到适合所有好对的最小二乘法。
于 2012-07-03T22:10:55.417 回答
3

在计算机视觉中,有一种称为RANSAC的技术可以执行您建议的操作。您将使用最小的点对应集来查找单个四元数/变换矩阵,而不是找到所有可能的四元数。然后,您将评估所有点的适合质量,丢弃那些不够适合的点。如果您没有足够的好匹配,那么您的原始集合中的匹配可能会很差。因此,您将放弃该尝试并重试。如果您确实获得了足够好的匹配,您将对所有内点进行最小二乘回归拟合以获得新的转换矩阵,然后迭代直到您对结果满意为止。

或者,您可以获取所有标准化四元数并找到它们之间的点积。点积应始终为正;如果不是针对任何给定的计算,您应该否定两个四元数之一的所有组件并重新计算。然后,您可以测量四元数之间的距离,并且可以聚类或寻找间隙。

于 2012-07-06T15:26:02.867 回答