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

Posted

技术标签:

【中文标题】去除 OCR 图像处理中的背景颜色【英文标题】:Remove background color in image processing for OCR 【发布时间】:2011-07-27 08:17:01 【问题描述】:

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

我会保留后处理图像中的所有字母,同时仅删除浅紫色带纹理的背景。是否可以使用一些开源软件如 Imagemagick 将其转换为二进制图像(黑/白)来实现这个目标?如果背景有不止一种颜色怎么办?解决方法会一样吗?

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

我正在寻找编程方面的解决方案,而不是通过 Photoshop 之类的工具。

【问题讨论】:

你为什么不上传一张图片到一些图片服务器让我们看票? 因为网站阻止我上传图片,直到声誉达到 10。:-( 我会在达到那个里程碑后立即发布它,或者我当然可以通过电子邮件发送给你。 【参考方案1】:

您可以使用 GIMP(或任何其他图像编辑工具)来做到这一点。

    打开您的图片 转换为灰度 复制图层 使用大内核 (10x10) 将高斯模糊应用于顶层 计算顶层和底层的图像差异 对图像设置阈值以生成二值图像

图像模糊:

不同的图像:

二进制:

如果您只是一次性使用,那么 GIMP 可能就足够了。如果您希望多次这样做,您可能会编写一个 imagemagick 脚本或使用 Python 和 OpenCV 之类的东西编写您的方法。

上述方法的一些问题:

紫色文本 (CENTURY) 会丢失,因为它不像其他文本那样对比鲜明。您可以通过对图像的不同部分进行不同的阈值处理或使用局部直方图处理方法来解决此问题

【讨论】:

【参考方案2】:

以下显示了处理图像和 OCR 的可能策略

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

代码是Mathematica代码。

一点也不差!

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

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

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

【讨论】:

不错的简单解决方案!【参考方案5】:

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

【讨论】:

【参考方案6】:

希望这对某人有所帮助

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

这是结果

这是 OpenCV 中 Image Thresholding 的链接

【讨论】:

以上是关于去除 OCR 图像处理中的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV - 去除图像中的噪声

如何从背景和文本颜色相似的轮胎等图像中检测文本?

改进 OCR/图像识别的预处理

去除历史文档中的噪音和污点以进行 OCR 识别

从图像中去除 OCR 的噪声

OCR 的背景图像清理