【问题标题】:How to calculate the distance from a point to the boundary of a six-dimensional point cloud?如何计算一个点到六维点云边界的距离?
【发布时间】:2023-01-20 03:52:34
【问题描述】:

假设我有一个六维点云D,它只有一个簇,没有噪声,而且密度不均匀。 给定一个检查点C,如何计算C点到D点边界的距离? 当 C 在点云 D 之外时,这很容易;在这种情况下,距离是从 C 到 D 中所有点的最小距离。 但是当 C 在 D 的内部时呢? 2D-example 非常感谢!

我已经尝试过基于密度的算法 DBSCAN 来检测点云的边界点,但是它无法检测到足够的包围点云的实际边界点。

【问题讨论】:

  • 假设随着 D 中的点数趋于无穷大,D 的表面变得非常光滑,这样的假设是否正确? IE。在 2D 示例中,如果点数任意大,D 看起来像一个漂亮、光滑、实心的椭圆?
  • 是的,这样假设是正确的。

标签: point-clouds euclidean-distance boundary


【解决方案1】:

假设

基于这些点代表一个具有光滑、锐利表面的定义椭圆(根据你对我的问题的回答),你找到的边界位置必然是一个统计估计,正如我希望你知道的那样。

我假设这些点是均匀随机分布的。

我的想法

椭圆边缘(或云表面)的位置将位于从点云原点开始并通过 C 的直线上的某个位置。

  1. 从原点到 C 投影一个圆柱体(我稍后会谈到直径)。
  2. 计算圆柱体包围的点数。我发现了一些 C++ 代码,可以检查一个点是否在圆柱体内 here。该代码适用于 3 维,但很容易看出它如何适用于 6 维,而且它非常简单,您可以将其翻译成任何语言。
  3. 增加圆柱体的长度并再次计算它包围的点数。
  4. 继续,直到圆柱体包​​围的点数在几次迭代中没有改变。
  5. 然后您可以返回找到点计数停止增加的圆柱体长度。
  6. 圆柱体现在本质上代表一个向量,其末端位于 D 的边界上。
  7. 您还可以从最终圆柱体的长度中减去从 D 的原点到 C 的距离,以获得从 C 到边界的距离。

    您可以进行外部迭代,为 C 选择随机位置并每次都执行这些步骤。所有这些圆柱体的末端代表一组描述点云表面的新点,我认为这是练习的目的(从云中生成一个壳)。

    圆柱半径

    至于圆柱体的半径,这需要足够大以确保它不会太薄以至于错过边界附近的太多点,从而使您的距离太小。您可以反复试验,根据点云的密度进行一些判断,或者使用不同的半径多次进行上述测试。

    笔记

    这种方法实际上应该适用于任何形状,即使是无定形的形状,只要边界从不重叠(即表面上的所有点从原点可见)。

    所以它适用于立方体,但不适用于香蕉!您可以将其调整为任意形状,但由于这不在问题范围内,所以我暂时保留它。

【讨论】:

    猜你喜欢
    • 2015-10-07
    • 2018-05-03
    • 1970-01-01
    • 2021-08-18
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 2021-07-14
    相关资源
    最近更新 更多