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

问题描述:

我正在使用tesseract从图像中读取文本。由于我的BinaryImage输入不会是纯白色背景中的简单文本,所以我只能获得50%的正确输出。如何在使用tesseract阅读之前清洁图像的文本?

有没有办法预处理图像,以便我可以从tesseract得到正确的输出?我已经尝试过使用Otsu's method进行灰度缩放和二值化图像,但没有任何改进。

由于我正在使用java做所有这些工作,如果有人可以共享任何java lib的详细信息或步骤以从tesseract中获得更好的结果,将会有所帮助。

我没有得到正确的ImageMagick文档在我的Java代码中使用它。任何对此的帮助表示赞赏。

sample image (any wireless bill of AT & T)

看到的例子我试图通过灰度缩放和二值化图像优化我的输出,但它没有帮助。然后我尝试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; 

}

的情况下,任何人都陷在同样的情况。

我觉得你的帐单的扫描可能是在太小的分辨率。如果你有更高分辨率的图像(更大的尺寸),我相信你会得到更好的结果。您也可以尝试以非损失压缩格式保存扫描。你可以尝试局部区域阈值。但我认为这不会对这样的小文本有帮助。不过,在ImageMagick中,你可以用-lat命令来完成。

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

enter image description here

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

+0

感谢您的帮助。我发现写得很好的用于图像处理的java库。我现在可以优化输出。我会在我的回答中解释更多。 –