使用 C# 在 Unity 中进行已知对应的点云注册

问题描述 投票:0回答:1

因此,我在物理对象(比如说立方体)的扫描 3D 模型上有一组已知点,名为 p1(x,y,z)、p2(x,y,z) 和 p3(x,y,z) .

前面提到的物理对象位于用户面前,用户将点击物理立方体上的相同 3 个点(在任务 3 中),对应于 p1、p2、p3,即 p1'、p2' 和 p3 '。然而,p1'、p2'和p3'可能不是完美的正方形,因为用户只是人类。如何将扫描的3D模型移动到用户输入的实体模型的位置?

Here's an image of the problem

当然,我研究了像 Umeyama 的方法这样的点云配准技术,但就我个人而言,用 C# 实现似乎非常复杂,尽管有一个 python 实现here。有了这个解决方案,我实际上不知道如何用结果矩阵执行翻译...在寻找一个稍微简单的解决方案时,我发现了另一个post,它用 2 个点来完成它。这让我想到,也许我可以对两个点 p1 和 p2 使用相同的算法,将其与 p1' 和 p2' 匹配,然后围绕 p1' -> p2' 迭代旋转模型,直到 p3 和 p3' 位于有点准确的位置。

c# unity-game-engine geometry transform point-clouds
1个回答
0
投票

查看 Jonathan Selstad 的 MathUtilities 中的 Unity Kabsch 求解器。他还写了一篇关于它的博客文章

请注意,样本不断调用

Update
中的求解器。如果您只求解一次,您可以编辑
extractRotation
方法以使用更多迭代。

© www.soinside.com 2019 - 2024. All rights reserved.