【问题标题】:Find inner geometry from edges从边缘查找内部几何图形
【发布时间】:2012-08-28 11:05:33
【问题描述】:

首先我不确定要为此使用哪些关键字,我想我可能使用了错误的关键字来搜索它,所以如果有人能给我任何提示,我将不胜感激。

我的问题如下: 我需要在房屋平面图中找到“房间”。以这个几何体为例:

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

  • 房间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

47196

47 85

258 85

它是像素坐标的。

【问题讨论】:

  • 所以你有 1) 所有顶点的物理位置和 2) 在 1-2、2-9 等之间有一条边的事实?您能否粘贴示例的数据格式?
  • 我对其进行了编辑以显示我拥有的边缘信息。
  • 这些边数是什么意思?它们看起来像顶点坐标。您的边缘是否也有任何机会与轴对齐?如果是,问题就变得简单了。
  • 它们是坐标,但它们并不总是对齐的。谢谢!
  • 所以这些坐标是您唯一的输入?没有边,只有顶点的坐标?如果你有顶点和边,那么坐标就没有多大意义,因为那时你只是在无向图中搜索循环(不包含彼此)。你的问题对我来说仍然不是很清楚。这是图像处理(寻找边缘)或图论(寻找循环)问题,还是两者兼而有之?

标签: algorithm matlab math geometry edge-detection


【解决方案1】:

一种可能的解决方案是对该区域进行三角剖分,以使每个输入边都是某个三角形的边。然后将三角形分割成连通集并找到它们的边界。

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

【讨论】:

    【解决方案2】:

    图论并没有真正帮助我,因为我已经断开了共享信息的循环。例如 [1 2 9 10 3 4 5 8 1] 和 [11 12 14 13 11]。所以最后我最终做了一个图像填充,当扩展填充 1 个像素的边界并进行布尔运算以确定填充图像内的顶点时。

    【讨论】:

      【解决方案3】:

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

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

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

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

      重复直到主列表为空。

      对断开的组件重复所有过程 (11-12-13-14)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-02
        • 2016-12-14
        • 1970-01-01
        • 2013-11-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多