删除OCR图像处理中的背景颜色

时间:2011-04-01 00:13:56

标签: algorithm image-processing imagemagick ocr

我正在尝试删除背景颜色,以提高OCR对图像的准确性。样本如下所示:

enter image description here

我将所有字母保留在经过后处理的图像中,同时只删除浅紫色纹理背景。是否可以使用Imagemagick等开源软件将其转换为二进制图像(黑/白)来实现这一目标?如果背景有多种颜色怎么办?解决方案是否相同?

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

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

6 个答案:

答案 0 :(得分:7)

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

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

    enter image description here

    差异图片:

    enter image description here

    二进制:

    enter image description here

    如果你是一次性做的话,GIMP可能还不错。如果您希望多次执行此操作,您可以编写一个imagemagick脚本或使用Python和OpenCV等方法编写您的方法。

    上述方法存在一些问题:

    • 紫色文字(CENTURY)会丢失,因为它与其他文字不同。你可以通过不同的方式对图像的不同部分进行阈值处理,或者使用局部直方图操作方法来解决这个问题。

答案 1 :(得分:5)

以下显示了处理图片的可能策略,并对其进行了OCR

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

代码为Mathematica代码。

enter image description here

一点都不差!

答案 2 :(得分:3)

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

如果文本比背景(在每个颜色组件中)更暗,则此方法适用。否则,您可以反转颜色并应用此方法。

答案 3 :(得分:1)

如果您的图像被捕获为RGB,只需使用绿色图像或快速转换可能@misha's convert to greyscale solutions可能做的拜耳模式。

答案 4 :(得分:1)

在Imagemagick中,您可以使用-lat函数来执行此操作。

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

application(_:didFinishLaunchingWithOptions:)

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

答案 5 :(得分:0)

希望这有助于某人

使用一行代码可以使用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

这里是OpenCV中Image Thresholding的链接