如何使用OpenCV从建筑楼层的顶部布局查找墙、柱、梁、门、窗和房间的位置和尺寸?

如何使用OpenCV从建筑楼层的顶部布局查找墙、柱、梁、门、窗和房间的位置和尺寸?,opencv,unity3d,image-processing,3d-reconstruction,Opencv,Unity3d,Image Processing,3d Reconstruction,我们的核心目标是: 使用图像处理读取/扫描建筑平面图图像(从CAD软件导出) 要使用图像处理读取/扫描建筑平面图图像(从CAD软件导出),请提取各种直线和曲线,将它们分组为结构实体,如墙、柱、梁等—“墙01”、“梁03”等 根据楼层平面图像中线条的比例和长度提取每个图元的尺寸(因为AutoCAD线条根据指定比例在尺寸上是精确的) 并将每个结构实体(及其尺寸)与“房间”关联 我们的灵活性在于,我们可以在楼层平面图像中定义不同结构实体的精确形状(门的矩形、窗的带剖面线的矩形等),并将它们导出到每个结

我们的核心目标是:

  • 使用图像处理读取/扫描建筑平面图图像(从CAD软件导出)
  • 要使用图像处理读取/扫描建筑平面图图像(从CAD软件导出),请提取各种直线和曲线,将它们分组为结构实体,如墙、柱、梁等—“墙01”、“梁03”等
  • 根据楼层平面图像中线条的比例和长度提取每个图元的尺寸(因为AutoCAD线条根据指定比例在尺寸上是精确的)
  • 并将每个结构实体(及其尺寸)与“房间”关联
  • 我们的灵活性在于,我们可以在楼层平面图像中定义不同结构实体的精确形状(门的矩形、窗的带剖面线的矩形等),并将它们导出到每个结构实体的一组图像中(例如,一个用于墙、一个用于柱、一个用于门等)

    对于上述“B”点,我们目前基于OpenCV的方法如下:

  • 将每个结构实体导出到其自己的图像中
  • 使用Canny和HoughLine变换识别图像中的线条
  • 将这些线分组为单个结构图元(如“Wall_01”)
  • 我们使用Canny+HoughLine变换以合理的精度检测/识别线段

    原始平面图图像

    个人“墙”形象:

    使用Canny+HoughLine标识的线段:

    (我还没有足够的声誉发布图片)

    因此,当前的问题是——将这些线组合成“Wall_01”这样的逻辑结构实体的最佳方式是什么

    此外,是否有任何特定的基于OpenCV的技术可以帮助我们将线段分组为逻辑实体?我们处理问题的方法正确吗?有没有更好的办法来解决这个问题


    更新: 添加另一个有效墙输入图像的图像。

    如果你对你的墙壁、门等在你的图像中的外观有明确的限制,你会使用这些。如果您自己生成CAD导出,请修改其中的设置,以便于执行此操作

    例如,所有的门都是棕色的,都是关着的

    对墙进行分组时也是如此。在图中,看起来您可以基于接近度进行分组(即,彼此相距X像素以内的任何对象都是一个组)。尽管如此,文本“C7”右侧和下方的墙可能会组合成一个



    如果您没有明确的定义,您可能会看到一些通用的图像识别问题,这意味着人工智能或机器学习。这将需要大量的输入供it人员学习,并且可能会变得非常复杂

    您提到的“从CAD软件导出”。如果导出格式为PDF,则它包含所有图形元素的矢量数据。你最好试着提取和解释它。从矢量格式转换成像素格式,然后再转换成数值模型,似乎有点麻烦

    如果您可以访问CAD文件和可以读取它们的CAD程序,那么在CAD程序中编写宏似乎可以获得更好的精度。如果在OpenCV中执行此操作,则仅限于光栅图像的像素精度。@bfris RealDWG是创建独立软件的唯一选项。否则,我们必须创建AutoCAD插件。RealDWG许可既昂贵又有限。普遍存在的许可问题。通常,Autodesk的响应速度不是很快。我试着在开发门户上注册和搜索,结果发现里面满是404。主要问题是没有对附近的墙进行分组。假设我们已经找到了相关的线段。鉴于此,我们如何找到哪3或4条线是一个连续墙的一部分?一旦我们了解到这一点,下一步就是找到每个墙的尺寸。好的,现在假设所有连接的黑线都保证是一堵墙的一部分,只有一堵墙,考虑最上面的黑线(上面的文字‘C8’)。这面墙是以上面的棕色线为界,还是以下面的棕色线为界?你有什么办法来区分吗?如果你不这样做,并不是因为你不在乎任何一种方式,我认为你不能用图像处理来解决这个问题。正如@bfris所建议的,您需要研究一下这个问题的CAD方面。如果您不介意,让OpenCV脚本沿着从黑线一端到另一端的非白线搜索怎么样?“单独的“墙”图像”是从原始布局图像中仅提取墙层。我已经用另一个输入图像更新了这个问题。因此,连接的黑线可能是也可能不是同一面墙的一部分。这是一个很好的捕获和建议。我将尝试pdf提取和。如果我遗漏了我们不处理PDF的任何原因,我也会与团队核实。我还将尝试将其转换为PostScript,看看这是否能使进展更容易。