如何在使用tesseract阅读之前清除图像的文本?

xiozqbni  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(251)

我正在使用tesseract从图像中读取文本。由于我的binaryimage输入不会是纯白色背景上的简单文本,因此我只得到50%的正确输出。
有没有办法对图像进行预处理,以便从tesseract获得正确的输出?我已经尝试过灰度缩放和二值化的图像使用大津的方法,但没有改善。
由于我是使用java来完成这些工作的,如果有人能够共享任何java库或步骤的详细信息,从而从tesseract获得更好的结果,那将是非常有帮助的。
我没有得到适当的imagemagick文档来在我的java代码中使用它。在此方面的任何帮助都将不胜感激。
示例图像(at&t的任何无线账单)

gkl3eglg

gkl3eglg1#

我试图通过灰度缩放和二值化来优化我的输出,但是没有用。然后我尝试boofcv来锐化我的图像,我得到了90%的优化输出。
在锐化图像之前,如果分辨率不够大,我们可以使用以下代码重新缩放图像:

public static BufferedImage scale(BufferedImage img, int imageType, int dWidth, int dHeight, double fWidth, double fHeight) {
BufferedImage img = null;
if(img != null) {
    img = new BufferedImage(dWidth, dHeight, imageType);
    Graphics2D g = img.createGraphics();
    AffineTransform at = AffineTransform.getScaleInstance(fWidth, fHeight);
    g.drawRenderedImage(img, at);
}
return img;

}
万一有人陷入同样的境地。

fbcarpbf

fbcarpbf2#

我认为你的账单扫描的分辨率可能太小了。我相信你会得到更好的结果,如果你有一个更高的分辨率图像(更大的尺寸)。您也可以尝试将扫描保存为非有损压缩格式。你可以尝试局部阈值。但我不认为这将有助于这么小的文本。不过,在imagemagick中,您可以使用-lat命令来实现这一点。

convert image.jpg -negate -lat 25x25+10% -negate result.png


根据需要调整值。我还有一个bash unixshell脚本textcleaner,在其他图像上可能更好。你可以在http://www.fmwconcepts.com/imagemagick/textcleaner/index.php

相关问题