我想自动清理扫描页面中的可见边框/阴影。
我这样做的想法很简单:在图像中检测所有像素为白色或接近白色的最大矩形,然后将图像裁剪为该矩形或用白色填充外部。< / p>
我可以编写自己的程序来查找这样的矩形,但我更喜欢使用ImageMagick(也可以进行裁剪或填充),netpbm或其他可用的实用程序Linux和Cygwin。
他们可以这样做吗?怎么样?
PS:我刚发现very similar question。 如果答案对我有用,那将是重复的。
答案 0 :(得分:1)
convert具有可在执行autocrop之前应用的过滤器。我在这里有一个例子:
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>
更新
考虑到这一点,转换的-level
选项可以在pnmcrop工具中很好地工作。这意味着您首先进行转换,裁剪转换后的图像,搜索原始图像中最终图像的位置,使用该几何图形裁剪原始图像。一个sinopsis就是这样的:
convert <original> -level 20%,80% <temp>
pnmcrop <temp>
compare <original> <temp>
convert <original> -crop ... <final>
将它放在一个脚本中,如上所述,您的自动裁剪图像周围没有纯色。
嗯...实际上,如果我们与&lt; temp&gt;进行比较,那么compare命令肯定会好很多。图像。
convert <original> -level 20%,80% <tempA>
pnmcrop <tempA> <tempB>
compare <tempA> <tempB>
convert <original> -crop ... <final>
对确切的pnmcrop
和compare
命令行选项不太确定,但请按照以下方式考虑:&lt; tempA&gt;由convert
(第1行)写一次,然后用于生成&lt; tempB&gt;然后我们搜索&lt; tempB&gt;在&lt; tempA&gt;内获得我们最终为裁剪命令重复使用的位置和大小(几何)(最后convert
。)
答案 1 :(得分:1)
我这样做(我的问题是您链接的similar one)与ImageMagick和LSD的组合。
您的里程数可能因调整的不同设置而有所不同(事实上,我的算法会在不同的设置和不同的分辨率下运行整个过程多次,直到有人认为&#34;足够好&#34;),但一般情况下我的策略是:
deskew
。trim
存储每个EPS的裁剪尺寸。morphology
删除劣质扫描中的斑点。我使用的所有参数都相当于我的用例,但这是一般的方法。祝你好运!