首页 > 解决方案 > 如何识别完全形成的矩形?

问题描述

我正在尝试确定完全形成的反应角的坐标。我的意思是,它有 4 个面,带有白色边框线,完全是盒子。

这是我的输入图像。 在此处输入图像描述

在下图中,我用黄色显示了我想要获取坐标的矩形。 在此处输入图像描述

在此输入图像中,有 3 个带有白色边框线的黑色矩形和 1 个全白矩形。

我当前convert的代码给出了所有区域的坐标,包括那些为我的目的产生噪音的白色区域。

convert input.png \
-define connected-components:verbose=true \
-define connected-components:area-threshold=100 \
-connected-components 8 -auto-level out:null | grep "255,255,255"

  7602: 233x81+295+192 411.0,232.0 18873 srgb(255,255,255)
  31: 356x70+365+28 542.4,57.2 4602 srgb(255,255,255)
  7604: 538x510+45+273 163.1,529.1 4394 srgb(255,255,255)
  7605: 292x470+627+273 809.5,494.2 2116 srgb(255,255,255)
  1393: 149x45+785+40 860.8,60.5 2040 srgb(255,255,255)
  8449: 513x125+70+658 326.0,708.6 761 srgb(255,255,255)
  7015: 43x27+291+110 312.5,122.1 620 srgb(255,255,255)
  7599: 84x43+676+148 717.5,169.0 250 srgb(255,255,255)

所以,我的问题是:有没有办法从convert命令给出的输出中识别出哪些坐标属于完全形成的矩形?谢谢

标签: imagemagickcoordinates

解决方案


有几个想法浮现在脑海。我还没有将它们开发成完整的解决方案,但如果以后时间允许,可能会这样做。

  • 您可以选择列表中每个连接组件的中心作为泛洪填充的种子点,例如黄色,然后将所有内容都设为非黄黑色(使用-fill black +opaque yellow)并再次运行连接组件以查看是否获得填充形状正确的区域。因此,例如,选择您的第 4 个输出行:

    7604: 538x510+45+273 163.1,529.1 4394 srgb(255,255,255)

并从中心进行洪水填充:

magick outlines.png -fill yellow -floodfill +314+478 black result.png

在此处输入图像描述

或者更进一步:

magick outlines.png -fill yellow -floodfill +314+478 black -fill black +opaque yellow result.png

在此处输入图像描述

然后运行另一个连通分量分析,看看是否检测到一个完全黄色填充的形状。

  • 您可能会运行一个命中或未命中形态,寻找线末端并跟随它们回到T 形路口并擦除它们以摆脱超出矩形末端的“过冲”线。

顺便说一句,如果您专门寻找矩形,您可能会更好地检查 4 连接组件,而不是目前的 8 连接组件。


推荐阅读