确定一个三维坐标是否在点云中。

3
我有一堆三维坐标(我认为这被称为点云,但我不是该领域的专家,所以可能错了),它们共同定义了一个大致球形的形状。另外,我还有一堆坐标,这些坐标可能在这个点云中,也可能不在。我需要一种方法来确定这些坐标是否在点云内部。
到目前为止,我尝试使用点云定义一个多边形网格,并从中确定我的其他点是否在网格内部。 不幸的是,当我创建网格时(我正在使用meshlab的GUI进行测试,计划转换到命令行),它创建了一个有漏洞的网格,可能是因为我的某些点云区域比其他区域更稀疏。
有没有人有关于如何做到这一点的想法?也许有比我尝试的更简单的方法,或者尝试一些程序和模块?
谢谢
1个回答

2
我需要一种方法来确定这些坐标是否在点云中。
在我看来,这取决于您所说的“在”是什么意思。也就是说,您需要一个(正式的)定义这种关系:“一个点在点云中”。
例如,您可以使用 凸组合来定义“within”:
给定3D点q和点云Q = {q1,q2,...,qn},当且仅当q{q1,q2,...,qn}的凸组合时,qQ内。
如果这是情况,给定点q和点云Q,您可以先找到Q中点的凸包,然后判断q是否在凸包内。关于此任务,您可以参考此SO问题
或者您可以根据点云形成的网格来定义“within”,就像您所做的那样。那么定义可能是这样的:
给定3D点q和点云Q = {q1,q2,...,qn},可以从Q生成一个完全封闭的网格S。当且仅当q在S内部时,我们说q在Q内部。
这个定义有点含糊不清。可以从点云生成各种防水网格,例如使用Poisson表面重建或使用一些使用Delaunay三角剖分的方法重建表面。
然而,对于您的应用程序,从Q中选择任何一个防水网格可能都可以。
如果是这种情况,您的问题就是从给定的点云中提取一个防水表面网格。有许多方法可以从点云中提取三角形网格。在您的情况下,您需要那些可以生成防水网格的方法。
“MeshLab”提供了许多从点云重建表面的方法,但您使用的这种方法似乎不能保证完全密闭。您可能想要切换到“Poisson表面重建”,它也包含在MeshLab中,并且可以保证完全密闭。
另外,“Poisson表面重建”是开源的,可以在CLI中使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接