2011-04-01 177 views
5

我想删除背景颜色以提高OCR对图像的准确性。样品看起来象下面这样:删除OCR图像处理中的背景颜色

enter image description here

我把所有的信件后处理后的图像中,而只是去除光紫色纹理背景。是否有可能使用Imagemagick等开源软件将其转换为二进制图像(黑/白)以实现此目标?如果背景有多种颜色会怎么样?解决方案是一样的吗?

此外,如果我还想删除紫色字母(剧院名称)和行以便只保留黑色字母呢?简单的裁剪可能不起作用,因为紫色字母也可能出现在其他地方。

我正在寻找一种解决方案,而不是像Photoshop那样的工具。

+0

你为什么不上传到一些图像服务器的图像,并让我们看到了票? – 2011-04-01 00:21:53

+0

,因为该网站阻止我上传图片,直到声望达到10。:-(我会尽快将其发布到里程碑,或者我可以给你发一封邮件。 – charles 2011-04-01 00:55:57

回答

3

您可以对图像应用模糊处理,以便获得几乎清晰的背景。然后将原始图像的每个像素的每个颜色分量除以背景上的像素的对应分量。你会得到白色背景上的文字。额外的后处理可以进一步帮助。

如果文字比背景颜色深(在每个颜色分量中),则此方法起作用。否则,您可以反转颜色并应用此方法。

6

您可以使用GIMP(或任何其他图像编辑工具)执行此操作。

  1. 打开图像
  2. 转换为灰度
  3. 重复层
  4. 使用大内核(10×10),以在顶层
  5. 应用高斯模糊计算的顶部和底部之间的图像差图层
  6. 阈值图像产生二进制图像

图像模糊:

enter image description here

差图像:

enter image description here

二进制:

enter image description here

如果你正在做它作为一个一次性的,GIMP是可能够好了。如果你期望这么做很多次,你可以写一个imagemagick脚本或者使用类似Python和OpenCV的代码来编写你的方法。

一些问题,上述办法:

  • 紫色文本(世纪)丢失,因为它不是作为对比的其他文字。你可以以你的方式围绕它通过阈值图像的不同部分不同,或者通过使用本地直方图操作方法
5

以下是处理图像的可能战略和OCR它

的最后一步是做一个OCR。我的OCR例程非常基本,所以我相信你可能会得到更好的结果。

该代码是Mathematica的代码。

enter image description here

不差!

0

希望这可以帮助别人

OpenCV中使用一行代码,你可以使用的OpenCV和python

#Load image as Grayscale 
im = cv2.imread('....../Downloads/Gd3oN.jpg',0) 
#Use Adaptivethreshold with Gaussian 
th = cv2.adaptiveThreshold(im,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2) 

这里得到,结果如下

enter image description here

这里的链接Image Thresholding

0

In Imagemagick,你可以使用-lat函数来做到这一点。

convert image.jpg -colorspace gray -negate -lat 50x50+5% -negate result.jpg 

enter image description here

convert image.jpg -colorspace HSB -channel 2 -separate +channel \ 
-white-threshold 35% \ 
-negate -lat 50x50+5% -negate \ 
-morphology erode octagon:1 result2.jpg 

enter image description here