给定一个图像,该图像内部有一些实际内容,并且周围通常有一些不需要的白色或黑色或透明度,我想使用 ImageMagick 修剪或裁剪外部部分。
下面的图像是在计算机上以数字方式绘制的(在 HTML 上<canvas>
):
我尝试了以下 ImageMagick 命令:
$ convert canvas.png -trim +repage canvas_trimmed.png
并且它完美地工作了:
这正是我想要的。但现在我希望它也能用于扫描文档,这些文档并不像计算机生成的图像那样“完美”,即它们有更多的“白色”和“黑色”色调,并且没有更容易检测到的透明度。有时,它们甚至会在纸张的白色背景周围出现一些黑条,因为扫描仪的面积大于纸张:
对于这幅图像,我按照给定的顺序尝试了以下命令,每个命令都试图更积极一些,但没有产生任何结果——您看不到原始图像和“修剪”图像之间的任何区别,即修剪或裁剪根本不起作用:
$ convert scan.jpg -trim +repage scan_trimmed.jpg
$ convert scan.jpg -fuzz 10% -trim +repage scan_trimmed.jpg
$ convert scan.jpg -fuzz 60% -trim +repage scan_trimmed.jpg
$ convert scan.jpg -fuzz 60% -bordercolor white -border 1x1 -trim +repage scan_trimmed.jpg
$ convert scan.jpg -fuzz 60% -bordercolor black -border 1x1 -trim +repage scan_trimmed.jpg
我在这里做错了什么?如何修改可以可靠地修剪计算机生成的图像的 ImageMagick 命令,以便它能够同样可靠地修剪上述样式的扫描文档?
答案1
您可以使用-刮胡子并且简单地刮胡子然后使用随后使用的逻辑进行相应的处理。
笔记: 您刮胡子
40x40
关闭(例如“-shave”或之后的参数10x10
等)非常重要,因此请务必进行彻底测试,以确保此设置在您的图像环境中普遍有效。
示例逻辑
@ECHO ON
SET Convert="C:\Program Files\ImageMagick\Convert.exe"
%convert% C:\Folder\Circle.jpg -shave 40x40 C:\Folder\ShavedCircle.jpg
<The rest of your logic against C:\Folder\ShavedCircle.jpg now>
前
后
更多资源
答案2
使用 ImageMagick 去除图像中的污点或噪音
下面是我用来去除问题图片中的污垢斑点的方法,但我继续使用了刮胡子第90x90
一个是您确认可以帮助解决我为奖励提供的其他解决方案中的问题的。
示例逻辑
@ECHO ON
SET Convert="C:\Program Files\ImageMagick\Convert.exe"
%convert% C:\Folder\Circle.jpg -shave 90x90 C:\Folder\ShavedCircle.jpg
%convert% C:\Folder\ShavedCircle.jpg -write MPR:source ^
-morphology close rectangle:3x4 ^
-morphology erode square MPR:source -compose Lighten -composite ^
-morphology erode square MPR:source -composite ^
-morphology erode square MPR:source -composite ^
-morphology erode square MPR:source -composite ^
-morphology erode square MPR:source -composite ^
-morphology erode square MPR:source -composite ^
-morphology erode square MPR:source -composite ^
-morphology erode square MPR:source -composite ^
-morphology erode square MPR:source -composite ^
C:\Folder\cleaned.jpg
前
后
由于振铃噪声的性质,所有黑色噪声斑点与字母之间至少有 1 个像素的距离。
消除这种噪音的一个好方法是扩大图像,使得每个字母至少保留一个“种子”部分,然后在使用原始图像作为蒙版的同时侵蚀这些种子;实际上是对每个字母进行洪水填充。
这样,字母和其他大斑点的形状就被完美地保存了,而较小的斑点则消失了。
对于示例数据来说,仍然保留每个字母形状一部分的最大扩张似乎是 3x4 矩形;也许使用更小的东西以防万一。
此命令首先扩大 3x4 矩形,然后逐渐侵蚀,直到字母再次完整
代码
convert cleanup.tif -write MPR:source ^ -morphology close rectangle:3x4 ^ -morphology erode square MPR:source -compose Lighten -composite ^ -morphology erode square MPR:source -composite ^ -morphology erode square MPR:source -composite ^ -morphology erode square MPR:source -composite ^ -morphology erode square MPR:source -composite ^ -morphology erode square MPR:source -composite ^ -morphology erode square MPR:source -composite ^ -morphology erode square MPR:source -composite ^ -morphology erode square MPR:source -composite ^ cleaned.png
更多资源
答案3
最终提供完美结果的,至少对于我在原始问题 ( scan.jpg
) 中展示的具体示例而言,是以下两步解决方案:
convert \
scan.jpg \
-write MPR:source \
-morphology close rectangle:3x4 \
-clip-mask MPR:source \
-morphology erode:8 square \
+clip-mask \
scan_intermediate.jpg
convert scan_intermediate.jpg -shave 40x40 -fuzz 10% -trim +repage scan_final.jpg
该解决方案由三部分组成: