我的问题仅与OpenCV / Matplotlib有关。但是,要理解这个问题,我需要学习几行ML /计算机视觉方面的内容:
我正在研究平面图数据集上的图像分割问题。我将使用完全卷积网络(FCN)。
现在,FCN需要一张图像,一个对应的分段图像。 例如:
左侧的图像是实际图像,而右侧的图像是图像的正确“注释”。本质上,每个对象(类)都完全充满了自己的颜色-汽车,道路,建筑物等。
现在,就我而言,我正在处理平面图数据。平面图示例如下所示:
此类图像中的相关实体是墙壁,门等。
问题我已经为一大堆此类图像添加了数据注释,但是上面的表格中没有注释数据。墙用简单的线条标注---这意味着它们仅1px厚,并且实际上并未填充实际图像中墙的面积/厚度。请参见以下示例:
请参阅上图左上角代表墙壁的2条线。当墙很粗时,我作为注释数据仅是那些粉红色的1px粗线。
但是,我所需要的实际上是完全填充墙壁区域。例如:
我现在要以编程方式将这些线转换为填充区域,即基于每条墙的线数据,我希望创建这些线所在的墙的填充版本。
所以,本质上来说,问题是这样的: 如果我在矩形区域内有一条细线,我能以某种方式获得它所代表的整个矩形区域吗?如果可以的话,可以用它的颜色填充它,并可以注释它的使用方式。
我们可以做出一些假设: -线条将始终代表其所在的墙 -墙通常是较粗的线,与其余图像相比只有一些暗色
再次注释数据将是非常困难且昂贵的,因此,我想问这个问题,以防可以通过编程方式实现。
我对opencv和matplotlib的知识很薄,因此这可能是一个新手问题。这可能是一件非常非常简单的事情。在这种情况下,请让我知道需要继续学习的算法或函数。
谢谢。
答案 0 :(得分:2)
通常,您可以为此使用简单的“填充”算法,如Mariana的回答中所建议。但是,您只需要延伸到给定的线,就不能继续沿着该办公区域的西墙延伸。我假设每个最终结果都是与绘图轴对齐的矩形。
相反,您需要“波前”填充:将 entire 线向北和向南延伸(线尺寸大于单个像素),直到所有 相邻像素的em>为灰色。然后对东西方向做同样的事情。您可以通过将行复制到相邻的像素行/列来执行扩展。
我不知道直接支持此功能的软件包,但大多数都会进行矢量化粘贴复制或等效更改。
答案 1 :(得分:1)
编辑我的答案以涵盖@Prune条件。 我可能会尝试一些逻辑,例如:
让我知道是否满足第四个条件。例如,在这种情况下,对于水平线,我们需要沿着水平线向上/向下迭代,寻找暗像素之间的较小距离,然后获取此y坐标以帮助绘制矩形。