使用 ImageMagick 修剪扫描文档外部的空白区域不起作用

使用 ImageMagick 修剪扫描文档外部的空白区域不起作用

给定一个图像,该图像内部有一些实际内容,并且周围通常有一些不需要的白色或黑色或透明度,我想使用 ImageMagick 修剪或裁剪外部部分。

下面的图像是在计算机上以数字方式绘制的(在 HTML 上<canvas>):

画布.png

我尝试了以下 ImageMagick 命令:

$ convert canvas.png -trim +repage canvas_trimmed.png

并且它完美地工作了:

画布修剪后的图像

这正是我想要的。但现在我希望它也能用于扫描文档,这些文档并不像计算机生成的图像那样“完美”,即它们有更多的“白色”和“黑色”色调,并且没有更容易检测到的透明度。有时,它们甚至会在纸张的白色背景周围出现一些黑条,因为扫描仪的面积大于纸张:

扫描.jpg

对于这幅图像,我按照给定的顺序尝试了以下命令,每个命令都试图更积极一些,但没有产生任何结果——您看不到原始图像和“修剪”图像之间的任何区别,即修剪或裁剪根本不起作用:

$ 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>

在此处输入图片描述

在此处输入图片描述


更多资源

  • 修剪,去除图像的边缘

    “-border” 或 “-frame” 运算符的逆运算符是“-刮胡子",如果给出相同的参数,将删除这些命令添加的空格。

    关于这三个运算符要记住的主要一点是,它们在图像的相对侧添加和删除空间,而不仅仅是一侧或相邻侧。

    如果您只想删除图像的一个边缘,则需要使用“-chop”运算符。(请参阅下面的 Chop 示例)。

    与之前一样,所有运算符“-border”、“-frame”和“-刮胡子”,只会影响虚拟画布上的真实图像,而不会影响虚拟画布本身。

    来源

答案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

该解决方案由三部分组成:

  1. 我最初的问题中的命令
  2. 噪声消除如图所示这个答案
  3. 操作-shave员建议这个答案

相关内容