imagemagick - 如何识别完全形成的矩形?
问题描述
我正在尝试确定完全形成的反应角的坐标。我的意思是,它有 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
命令给出的输出中识别出哪些坐标属于完全形成的矩形?谢谢
解决方案
有几个想法浮现在脑海。我还没有将它们开发成完整的解决方案,但如果以后时间允许,可能会这样做。
您可以选择列表中每个连接组件的中心作为泛洪填充的种子点,例如黄色,然后将所有内容都设为非黄黑色(使用
-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
然后运行另一个连通分量分析,看看是否检测到一个完全黄色填充的形状。
顺便说一句,如果您专门寻找矩形,您可能会更好地检查 4 连接组件,而不是目前的 8 连接组件。