2D点的边界

时间:2016-09-21 08:17:33

标签: c++ matlab 3d

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

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

是否有其他技术/功能可以实现2D点的自然边界线?我已经测试了图像上的凸包函数,它错过了许多边界点。

Boundary of Points`

1 个答案:

答案 0 :(得分:2)

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

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

  

enter image description here

     

如Edelsbrunner和Mücke的论文[2]所述,人们可以直观地将α形思想如下。想象一下,大量的冰淇淋组成了空间ℝ3,并将点作为“硬”巧克力块。使用这些球形冰淇淋勺中的一种,我们将冰淇淋块的所有部分切割成我们可以到达而不会碰到巧克力块,从而甚至在内部雕刻出孔(例如,通过简单地移动勺子就无法到达的部分)外)。我们最终会得到一个(不一定是凸起的)物体,由帽子,弧线和点限定。如果我们现在将所有“圆形”面都拉直到三角形和线段,我们可以直观地描述所谓的S形的α形。这里是2D过程的一个例子(我们的冰淇淋勺只是一个圆圈):