python - 给定里面的一条线找到周围的矩形区域

标签 python opencv matplotlib annotations computer-vision

我的问题仅与 OpenCV/Matplotlib 有关。但是,要理解这个问题,请耐心等待几行 ML/计算机视觉方面的内容:

我正在研究平面图数据集的图像分割问题。我会为此使用完全卷积网络 (FCN)。

现在,FCN 需要一个图像,一个相应的分割图像。 例如:

image and its groundtruth

左边的图像是实际图像,而右边的图像是图像的正确“注释”。本质上,每个对象(类)都完全填充了自己的颜色——汽车、道路、建筑物等。

现在,就我而言,我正在处理平面图数据。示例平面图图像如下所示:

Example floorplan image

此类图像中的相关实体是墙壁、门等。

问题 我已经获得了对大量此类图像进行注释的数据,但是没有以上述形式进行注释。墙壁被注释为简单的线条 --- 这意味着它们只有 1 像素厚并且实际上不会填充实际图像中墙壁的面积/厚度。请参阅以下示例:

Annotated Data I have

请参见上图中左上角代表墙壁的 2 条线。虽然墙很厚,但我所拥有的注释数据只是那些粉红色的 1px 粗线。

但是,我需要的是完全填充墙壁区域。例如:

Ground truth I want

我现在想做的是,以编程方式将这些线转换为填充区域,即,基于每面墙的线数据,我希望创建这些线所在的墙的填充版本。

所以,本质上问题是这样的: 如果我在一个矩形区域内有一条细线,我能以某种方式得到它所代表的整个矩形区域吗?如果可以的话,我可以用它的颜色填充它,并且我可以根据需要对其进行注释。

我们可以做出一些假设: - 线条将始终代表它们所在的墙 - 与图像的其余部分相比,墙壁通常是较粗的线条,只有一些深色

再次对数据进行注释将非常困难且成本高昂,因此我问这个以防可以通过编程方式实现。

我对 opencv 和 matplotlib 知之甚少,因此这可能是一个新手问题。这可能是一件非常非常简单的事情。在这种情况下,请让我知道我需要阅读的算法或函数。

谢谢。

最佳答案

通常,您可以为此使用简单的“填充”算法,如 Mariana 的回答中所建议的那样。但是,您只需要延伸到给定的线——您不能继续沿着该办公区的西墙走下去。我假设每个最终结果都是一个与绘图轴对齐的矩形。

相反,您需要一个“波前”填充:将整条线向北和向南(大于单个像素的线尺寸)延伸至全部 的相邻像素是灰色的。然后对东西方向做同样的事情。您可以通过将线复制到相邻的像素行/列来执行扩展。

我不知道有哪个包会直接支持这个,但大多数会进行矢量化复制粘贴或等效更改。

关于python - 给定里面的一条线找到周围的矩形区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51866280/

相关文章:

python - 为什么调度函数从未被调用?

.net - 相机外部计算错误

python - 使用 python 数据框中的两列(值、计数)绘制直方图

python - 为多行调用 axis.plot() 指定 matplotlib 颜色

python - 使用 python 字典中的值的新 pandas 数据框列

python - 使用 Spacy 训练新模型

python - brew 安装 python3 后出现 SSL 错误

c++ - 使用 OpenCV 检测绘制在背景图像上的矩形

python - 如何在 Python 中以 VS 作为 IDE 使用 OpenCV

python - 如何使用 python 和 matplotlib 注释行尾?