我有一个应用程序,我必须找到从一组15个排序器和索引的3D点(X1,X2,...,X15)到另一组具有相同索引的15个点(1个初始点对应1个终结点)的旋转。
我读过很多关于使用Euler角(对某些人来说是邪恶的)、四元数或将向量投影到基轴上的旋转。但是我有一个额外的约束:我的最终集合中的一些点可能是错误的(即有错误的坐标),所以我想区分要求旋转的点离中值旋转非常远。
我的问题是:对于每组3个点(不是对齐的)和它们的图像,我可以计算四元数(根据转换矩阵不是纯旋转的事实,我有一些额外的计算,但这是可以做到的)。所以我得到了一组四元数(最多455个),我想去掉那些错误的。
有没有办法找出哪些点的旋转距离平均旋转很远?对于四元数来说,“均值”和“标准差”意味着什么,还是我必须计算欧拉角?一旦我得到了一组“好的”四元数,我如何计算“平均”四元数/旋转呢?
干杯,
Ricola3D
发布于 2012-07-04 06:10:55
这里有两个问题:
对第一个问题的一般回答是,“做一个least squares拟合”。在这方面,四元数可能比Euler角度更好;请尝试以下方法:
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如上所述,除了约束之外,最小二乘问题是线性的,这应该比欧拉角公式更容易解决。
对于第二个问题,我可以看到两种方法:
https://stackoverflow.com/questions/11312758
复制相似问题