使用奇异值分解方法(SVD)对齐Unity中的2组3D点

时间:2016-03-03 09:21:45

标签: unity3d decomposition mathdotnet singular

我想将轮廓上的一组参考点转换为一组相应的目标点。每个轮廓总共有8个点。

reference and corresponding target points

为了计算旋转&翻译矢量,我使用Math.Net Numerics库来执行SVD计算 - 这个想法来自this URL(第3-7页):

但不知何故,我注意到使用SVD计算结果进行的转换似乎不准确。结果如下图所示:

Unity result after applied translation vector calculated from SVD

变换应该尽可能接近地将参考点移动到目标点,但是如果突出显示,它会远离目标点。

此外,我还做了一个简单的测试,我计算了两个轮廓的质心并进行演绎:(TargetCentroid - RefCentroid =翻译矢量)。最终的转换结果与通过SVD相同。

我做错了吗?任何人都可以建议一个更好的解决方案来将ref点转换为目标点吗?

修改 1.从参考模型到各种目标模型的服装转换

Garment transformation

1 个答案:

答案 0 :(得分:0)

这似乎是一个过于复杂的问题解决方案。

如果你有目标点,你可以将给定点瞄准它们相应的目标点。

或者,如果目标是相同的网格但具有与图片中不同的比例和旋转,您可以只是相对地翻转变换值,缩放和旋转,而无需单独遍历所有点。

使用Vector3.Lerp

修改 此外,lerping将导致所有点同时到达目标,在大多数情况下,这是所需的行为。