【问题标题】:How do I find the largest nearly white rectangle in a bitmap with ImageMagick?如何使用 ImageMagick 在位图中找到最大的近乎白色的矩形?
【发布时间】:2014-04-25 17:49:46
【问题描述】:

我想自动清除扫描页面中的可见边框/阴影。

我这样做的想法很简单:检测图像中所有像素为白色或接近白色的最大矩形,然后将图像裁剪为该矩形或用白色填充外部。

我可以编写自己的程序来查找这样的矩形,但我更喜欢使用ImageMagick(也可以进行裁剪或填充)、netpbm 或其他适用于 Linux 和 Cygwin 的实用程序。

他们能做到吗?怎么样?

PS:我刚刚找到了very similar question。 如果那里的答案对我有用,这将是重复的。

【问题讨论】:

  • Gimp 中有一个自动裁剪功能。我不知道是否可以在脚本中使用它,但它通常效果很好。
  • Morphology 上的有趣文章可能会有所帮助。您能否在图片之前和之后发布您期望的示例?
  • @emcconville:请参阅this question,这是相同的问题,但提出了不同的问题。
  • @Alexis Wilke:这似乎只裁剪完全空白的材料,例如pnmcrop - 但我还需要裁剪阴影和边框。

标签: imagemagick imagemagick-convert


【解决方案1】:

convert 具有过滤器,您可以在执行自动裁剪之前应用这些过滤器。我这里有一个例子:

 http://www.alexiswilke.me/blog/learning-more-about-convert-imagemagick

所以使用类似的东西:

convert <in-image> -level 20%,80%,1.0 <out-image>

这将使黑暗区域变成黑色,白色区域变成全白。

接下来,您要逐行比较顶部的图像,以找出要从顶部删除的行数。这是通过比较工具完成的(您也可以在进行比较时使用它来应用“-level过滤器”,例如使用-fuzz。)我没有仔细尝试,所以我不能给你确切的命令行那个……

 http://www.imagemagick.org/script/compare.php

比较过程完成后,您应该有顶部的行数,底部,左侧和右侧的行数(如果他们不测试列,请考虑将图像旋转 90 %.)

最后,你有了几何图形,你可以应用裁剪了:

convert <in-image> -crop <width>x<height>+<xpos>+<ypos> <final-image>

更新:

考虑一下,convert 的-level 选项在 pnmcrop 工具中可以很好地工作。这意味着您首先要进行转换,裁剪转换后的图像,在原始图像中搜索最终图像的位置,使用该几何图形来裁剪原始图像。概要是这样的:

convert <original> -level 20%,80% <temp>
pnmcrop <temp>
compare <original> <temp>
convert <original> -crop ... <final>

将其放入脚本中,您就可以自动裁剪图像周围没有提到的纯色。

嗯...实际上,如果我们与 图像进行比较,比较命令肯定会更好。

convert <original> -level 20%,80% <tempA>
pnmcrop <tempA> <tempB>
compare <tempA> <tempB>
convert <original> -crop ... <final>

不太确定确切的pnmcropcompare 命令行选项,但可以这样想:convert(第一行)编写一次,然后用于生成 ,然后我们在 中搜索 以获得最终重用于裁剪命令的位置和大小(几何)(最后一个 convert。)

【讨论】:

    【解决方案2】:

    我使用 ImageMagick 和 LSD 的组合来执行此操作(我的问题是您链接到的 similar one

    您的里程可能会因调整的不同设置而异(事实上,我的算法在整个过程中多次使用不同的设置和不同的分辨率,直到一个被认为“足够好”),但我的一般策略是这样:

    1. 使用 ImageMagick 将图像转换为黑白(仅黑色像素和白色像素,而不是灰度)PGM 图像。
    2. 使用带有一些非常极端参数的 LSD,仅从页面边缘的 PGM 图像生成 EPS 图像。
    3. 存储 EPS 的旋转角度,由 ImageMagick 检测到 deskew
    4. 使用 ImageMagick 旋转 EPS 使其笔直。 (我的扫描图像可能是歪的。)
    5. 使用 ImageMagick 的 trim 存储 EPS 的裁剪尺寸。
    6. 获取原始扫描,将其旋转旋转角度,然后使用 ImageMagick 将其裁剪为裁剪尺寸。
    7. 如果需要,请使用 ImageMagick morphology 去除劣质扫描中的斑点。

    我使用的所有参数都相当随意/特定于我的用例,但这是一般方法。祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-10
      • 1970-01-01
      • 2018-09-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多