Unity 与 C 语言中已知对应关系的点云配准#

Point Cloud Registration With Known Correspondence in Unity with C#

提问人:codingliketheresnoyesterday 提问时间:10/29/2023 最后编辑:codingliketheresnoyesterday 更新时间:11/8/2023 访问量:78

问:

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

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

这是问题的图片

当然,我研究了像 Umeyama 的方法这样的点云配准技术,但对于我个人来说,这在 C# 中实现似乎非常复杂,尽管这里有一个 python 实现。有了这个解决方案,我实际上不知道如何使用生成的矩阵执行转换......寻找一个稍微简单的解决方案,我找到了另一个用 2 点来做到这一点的帖子。这让我想到,也许我可以对两个点(p1 和 p2)使用相同的算法,将其与 p1' 和 p2' 匹配,然后围绕 p1' -> p2' 迭代旋转模型,直到 p3 和 p3' 处于某种精确的位置。

C# unity-game-engine 几何体 变换 点云

评论

0赞 Nico Schertler 11/1/2023
Umeyama 的算法(或者在您的情况下,Kabsch 的算法,因为您不需要缩放)是要走的路。一旦你有了矩阵,你只需将其应用于你的输入点,你就完成了。没有比这更简单的了。你只需要找到一个合适的线性代数库来计算协方差矩阵的奇异值分解。据我所知,Unity没有内置功能。

答:

0赞 treep 11/8/2023 #1

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

请注意,该示例在 中不断调用求解器。如果只求解一次,则可以编辑方法以使用更多迭代。UpdateextractRotation