PIL - 图像处理 - 如何在没有嘈杂背景的情况下实现干净的图像?二值化步骤是否已经过时?

时间:2015-07-08 12:08:33

标签: image-processing python-imaging-library ocr tesseract

下午好,

我正在编写一个ocr程序来检测图像上的文本。到目前为止,我得到了很好的结果,但是当文字是黑色而背景是白色时。我该怎么做才能改善浅色背景(黄色,绿色等)上有白色文字的图像?

一个原始示例图像可能是: original image

到目前为止,我只是使用以下方法将其转换为grey_scale:

image = image.convert('L')

然后应用一系列过滤器,例如: SHARPEN 平滑 模糊 等

然后我像这样进行二值化:

image = image.point(lambda x: 0 if x<128 else 255, '1') #refers to http://stackoverflow.com/questions/18777873/convert-rgb-to-black-or-white and also to http://stackoverflow.com/questions/29923827/extract-cow-number-from-image

我的outoup图像对于像这样的ocr喂食确实非常糟糕: Output

我做错了什么?浅色背景上白色文字的最佳方法是什么?

另一个疑问:我的二元化步骤是强势/夸大?

我应该混合一些过滤器吗?你能建议吗?

PS:我是图像处理的新手,所以请保持简单= x

非常感谢您的关注和帮助/建议。

1 个答案:

答案 0 :(得分:2)

我尝试使用ImageMagick,它也有Python绑定 - 除了我在命令行上做过。我想你可以很容易地调整我做的事情 - 我不会说Pythonese也不会使用PIL但是希望它会给你一些关于可能的途径的见解。

convert http://i.stack.imgur.com/2cFk3.jpg -fuzz 50% -fill black +opaque white -threshold 50% x.png

基本上它采用不在白色50%范围内的任何颜色并用黑色填充它,然后它将结果阈值为纯黑色和白色。

enter image description here

另一种选择是根据颜色的饱和度对图像进行阈值处理。因此,您转换为HSB色彩空间,分离通道并丢弃色调和亮度。然后,您将获得阈值饱和度,如下所示:

convert http://i.stack.imgur.com/2cFk3.jpg -colorspace hsb -separate -delete 0,2 -threshold 50% x.png

投掷-negate以获得黑色白色字母。

enter image description here

我已经为PIL复制了一些其他代码,并且正在修改它可能接近你需要的东西 - 请记住我不知道Python:

import colorsys
from PIL import Image
im = Image.open(filename)
ld = im.load()
width, height = im.size
for y in range(height):
    for x in range(width):
        r,g,b = ld[x,y]
        h,s,v = colorsys.rgb_to_hsv(r/255., g/255., b/255.)

        if s>0.5:                     // <--- here onwards is my attempted Python
           ld[x,y] = (0,0,0)
        else:
           ld[x,y] = (255,255,255)