【问题标题】:Boundary of 2D points二维点的边界
【发布时间】:2016-09-21 08:17:33
【问题描述】:

找到点的边界在计算机科学的许多领域都非常有用。目前我有一个 3D 网格的可见顶点,我投影了 2D。二维点将用于获取边界和各种类型的边缘。

从 matlab 链接on a function obtaining the boundary of points 获得的示例图像显示了一组二维点的边界(橙色和红色)。橙色边界使用收缩因子,类似于convex hull function 创建的边界。在我们的例子中,我们想要一个更自然的点边界,比如红色边界线(不是通过凸包函数实现的边界)。 matlab 的边界函数未定义,因为我使用的是较旧的 2014 版本(我认为这是原因)。

是否有另一种技术/功能来实现 2D 点的自然边界线?我已经在图像上测试了凸包函数,它错过了很多边界点。

`

【问题讨论】:

  • 更自然的边界到底是什么意思? matlab 函数使用收缩因子 - 您只是想使用不同的收缩来执行此操作,还是您有不同的标准集?
  • 补充一点:对我来说,红线不清楚为什么有些点不包括在内,而其他点是。
  • 只是为了澄清我所说的自然边界在物体形状方面的含义。让我们以汽车为例。假设它最初由 3D 空间中的点云表示。我将点云从相机点的方向投影到 2D 空间中。视觉上外部的 2D 点表示汽车的边界或边缘。轮廓或边缘会弯曲,有时使用凸包可能无法真实代表汽车的轮廓线。我似乎无法在 matlab 中使用边界函数,因为它声明未定义。另一方面,我尝试了凸包

标签: c++ matlab 3d


【解决方案1】:

看起来 matlabs 边界函数只是返回点集 alpha 形状的边界:https://en.wikipedia.org/wiki/Alpha_shape

在 cgal 中有一个 c++ 实现:http://doc.cgal.org/latest/Alpha_shapes_2/index.html 来自我们拥有的文档:

正如 Edelsbrunner 和 Mücke 的论文 [2] 中所提到的,人们可以直观地将 α 形状想象为以下形式。想象一大块冰淇淋构成空间 ℝ3 并包含作为“硬”巧克力块的点。使用其中一个球形冰淇淋勺,我们可以切出冰淇淋块的所有部分,而不会撞到巧克力块,从而甚至在内部挖出洞(例如,通过简单地移动勺子无法到达的部分)外)。我们最终会得到一个(不一定是凸的)对象,由帽、弧和点包围。如果我们现在将所有“圆形”面拉直为三角形和线段,我们就可以直观地描述 S 的 α 形状。这是这个过程在 2D 中的示例(我们的冰淇淋勺只是一个圆形):

【讨论】:

猜你喜欢
  • 2010-11-23
  • 2014-08-13
  • 2018-02-05
  • 2019-07-05
  • 2021-06-01
  • 2018-01-01
  • 2013-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多