我有一个应用程序,我必须找到从一组15个排序器和索引的3D点(X1,X2,...,X15)到另一组具有相同索引的15个点(1个初始点对应1个终结点)的旋转。
我读过很多关于使用Euler角(对某些人来说是邪恶的)、四元数或将向量投影到基轴上的旋转。但是我有一个额外的约束:我的最终集合中的一些点可能是错误的(即有错误的坐标),所以我想区分要求旋转的点离中值旋转非常远。
我的问题是:对于每组3个点(不是对齐的)和它们的图像,我可以计算四元数(根据转换矩阵不是纯旋转的事实,我有一些额外的计算,但这是可以做到的)。所以我得到了一组四元数(最多455个),我想去掉那些错误的。
有没有办法找出哪些点的旋转距离平均旋转很远?对于四元数来说,“均值”和“标准差”意味着什么,还是我必须计算欧拉角?一旦我得到了一组“好的”四元数,我如何计算“平均”四元数/旋转呢?
干杯,
Ricola3D
发布于 2012-07-06 23:26:03
在计算机视觉中,有一种叫做RANSAC的技术可以做你想做的事情。您可以使用一组最小的点对应关系来查找单个四元数/变换矩阵,而不是查找所有可能的四元数。然后,您将评估所有点的拟合质量,丢弃那些不够拟合的点。如果你没有足够好的匹配项,也许你的原始集合中有一个糟糕的匹配项。因此,您将放弃该尝试,并再次尝试。如果你确实得到了足够好的匹配,你将对所有的inlier点进行最小二乘回归拟合,以获得一个新的转换矩阵,然后迭代,直到你对结果满意。
或者,你可以把你所有的四元数归一化,找出它们之间的点积。点积应该始终是正的;如果它不是用于任何给定的计算,那么您应该对两个四元数中的一个的所有分量求反,然后重新计算。然后,您有了四元数之间的距离度量,您可以聚类或查找间隙。
发布于 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
复制相似问题