从边缘查找内部几何体

时间:2012-09-03 18:15:21

标签: algorithm matlab math geometry edge-detection

首先,我不确定使用哪个关键字,我认为我可能会使用错误的关键词进行谷歌搜索,所以如果有人能给我任何提示,我将非常感激。

我的问题如下: 我需要在房屋计划中找到“房间”。例如,采用这种几何:

enter image description here

所需的算法会告诉我哪些顶点绑定了每个房间。因此,对于这个例子,它将是:

  • 房间A:1,2,9,10,3,4,5,8,1
  • 房间B:2,3,10,9,2
  • 房间C:11,12,14,13,11
  • 房间D:5,6,7,8,5

我将顶点和边作为输入数据。 编辑: 边数据如下(边8,1,2):

x y

47 196

47 85

258 85

它是像素坐标。

3 个答案:

答案 0 :(得分:2)

Graph Theory并没有真正帮助我,因为我已经断开了共享信息的循环。例如[1 2 9 10 3 4 5 8 1]和[11 12 14 13 11]。所以最后我做了一个图像填充,当扩展填充1像素的边界并做一个boolen操作来找出填充图像中的哪个顶点。

答案 1 :(得分:0)

可能的解决方案之一是对该区域进行三角测量,以使每个输入边缘都是某个​​三角形的边缘。然后将三角形拆分为连接集并找到它们的边界。

有三种三角测量算法:耳剪,Delaunay,......

答案 2 :(得分:0)

这是planar graph。它有V个顶点,E个边和F = E - V + 2个面(包括外面)。我们必须确定所有面的边缘列表。每个边缘将在这些列表中使用两次(向前和向后)。

创建主弧列表,添加所有弧(即1-2个无向边添加1-2和2-1定向弧)

找到最低的顶点。如果有一些这样的点,请选择最左边的点(这里是第7个)。 沿CCW方向移动外表面(轮廓)(在每个顶点选择最右边的出弧):7-6-5-4-3-2-1-7。从主列表中删除访问的弧。

从主列表获取任何弧线,沿第一个内部面移动,遵循右手规则(即7-8-5-6-7),移除访问过的弧线。

重复直到主列表为空。

对断开连接的组件重复所有步骤(11-12-13-14)