从图像中删除特定尺寸的线条

Nav*_*eed 3 imagemagick

我对下图使用了以下 imagemagick 命令:

convert img.png -define morphology:compose=darken -morphology Thinning Rectangle:17x1+0+0\< tmp.png
Run Code Online (Sandbox Code Playgroud)

这会删除图像中的所有线条,但我只想删除每个块左上角数字右侧和底部的小水平和垂直线。我想保留主列和行线。谁能告诉我该怎么做? 在此输入图像描述

这就是我得到的结果(请注意,将图像内容划分为列和行的长线也消失了。我希望这些线保留):在此输入图像描述

Mar*_*ell 5

我注意到脚本比线条更精细/更薄且不太规则,因此它更容易受到侵蚀技术的影响。考虑到这一点,我们可以像这样放弃文本:

convert vcards.png -colorspace gray -threshold 50% -morphology erode disk:1.5 +repage z1.png
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这是一个好的开始,但如果我们使用它作为蒙版,我们将丢失原始图像中的长水平线。因此,我们可以通过将所有行投影到一个单像素宽的高列并对所有白色超过 80% 的行进行阈值处理来找到所有这些。然后将图像加宽回其原始宽度。

convert z1.png -colorspace gray -resize 1x\! +repage -threshold 80% -scale 810x1518\! +repage z2.png
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

现在将两个蒙版组合起来,这样它们就只处理小标题框的下侧和右侧。

convert z1.png \( z2.png -negate \) -compose darken -composite z3.png
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

最后,将蒙版加厚一点,因为它可能在之前的处理过程中发生了变化,并将其应用到原始图像。

convert vcards.png \( z3.png -morphology dilate disk:2 -negate \) -compose darken -composite result.png
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

它可以全部组合成一个命令,但我不会这样做,因为某些方面可能不适用于您的所有图像,虽然它们都是单独实现和记录的,但单独改进或纠正它们更简单。