如何识别完全成型的矩形?
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 连通分量。
我正在尝试确定完全形成的反应角的坐标。我的意思是,它有 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 连通分量。