如何使用ImageMagick查找位图中最大的近似白色矩形?

如何使用ImageMagick查找位图中最大的近似白色矩形?,imagemagick,imagemagick-convert,Imagemagick,Imagemagick Convert,我想自动清除扫描页面中的可见边框/阴影 我的想法很简单:在图像中检测一个最大的矩形,其中所有像素都是白色或接近白色,然后将图像裁剪为该矩形,或者用白色填充外部 我可以编写自己的程序来查找这样一个矩形,但我更喜欢使用(它也可以进行裁剪或填充)或其他可用于Linux和Cygwin的实用程序 他们能做到吗?怎么做 附言:我刚找到一份工作。 如果答案对我有效,这将是一个副本。convert有一些过滤器,您可以在执行autocrop之前应用这些过滤器。我举了一个例子: 因此,请使用以下方法: conve

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

我的想法很简单:在图像中检测一个最大的矩形,其中所有像素都是白色或接近白色,然后将图像裁剪为该矩形,或者用白色填充外部

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

他们能做到吗?怎么做

附言:我刚找到一份工作。
如果答案对我有效,这将是一个副本。

convert有一些过滤器,您可以在执行autocrop之前应用这些过滤器。我举了一个例子:

因此,请使用以下方法:

convert <in-image> -level 20%,80%,1.0 <out-image>
把它放在一个脚本中,你就可以像前面提到的那样在图像周围自动裁剪出非纯色的图像

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

转换-级别20%,80%
pnmcrop
比较
转换-裁剪。。。
不太确定确切的
pnmcrop
compare
命令行选项,但可以这样想:由
convert
(第1行)编写一次,然后用于生成,然后我们在其中搜索以获得位置和大小(几何体),最终用于裁剪命令(最后一次
convert

我使用ImageMagick和

您的里程数可能会随着不同设置的调整而变化(事实上,我的算法在整个过程中多次以不同的设置和不同的分辨率运行,直到其中一个被认为“足够好”),但我的一般策略是:

  • 使用ImageMagick将图像转换为黑白(只有黑白像素,而不是灰度)PGM图像
  • 使用带有一些极端参数的LSD,从页面边缘的PGM图像生成EPS图像
  • 存储由ImageMagick通过
    deskew
    检测到的EPS旋转角度
  • 使用ImageMagick旋转EPS使其笔直。(我扫描的图像可能会扭曲。)
  • 使用ImageMagick的
    修剪
    存储EPS的裁剪尺寸
  • 进行原始扫描,并将其旋转至旋转角度,然后使用ImageMagick将其裁剪至裁剪尺寸
  • 如果需要,请使用ImageMagick
    形态学
    去除劣质扫描中的斑点

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

    Gimp中有一个自动裁剪。我不知道是否可以在脚本中使用它,但它通常工作得很好。关于它的有趣文章可能会有所帮助。你能在你所期望的图像之前和之后发布一个例子吗?@emcconville:See,这是一个相同的问题,但提出了一个不同的问题。@Alexis Wilke:这似乎只裁剪完全空白的材质,比如-但我还需要裁剪阴影和边框。
    convert <in-image> -crop <width>x<height>+<xpos>+<ypos> <final-image>
    
    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>