如何识别完全成型的矩形?

How to identify fully formed rectangles?

我正在尝试确定完全形成的反应角的坐标。我的意思是,它有 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 命令给出的输出中识别哪些坐标属于完全形成的矩形?谢谢

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

  • 您可以选择列表中每个连接组件的中心作为 flood-fill 的种子点,例如黄色,然后将所有非黄色的东西设为黑色(-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

然后 运行 另一个连通分量分析,看看是否检测到完整的 yellow-filled 形状。

  • 你可以 运行 一个 Hit-or-Miss 形态,寻找 line ends and follow them back to T-junctions 并擦除它们以摆脱 "overshoot" 行伸出矩形的末端。

顺便说一下,如果您专门寻找矩形,您可能最好检查 4 连通分量而不是目前的 8 连通分量。