用于文本识别的图像预处理

Posted

技术标签:

【中文标题】用于文本识别的图像预处理【英文标题】:Image preprocessing for text recognition 【发布时间】:2012-07-12 22:40:33 【问题描述】:

在 EmguCV 中应用于图像以进行文本识别的最佳图像预处理操作集是什么?

我已经包含了两个示例图像here。

不适合应用低通或高通过滤器,因为文本可以是任意大小。我尝试过中值和双边滤波器,但它们似乎对图像影响不大。

理想的结果是所有文本为白色,其余大部分为黑色的二进制图像。然后,此图像将被发送到 OCR 引擎。

谢谢

【问题讨论】:

你能把这些示例图片上传到这里吗?链接给出 403 禁止 【参考方案1】:

没有什么比得上最好的了。请记住,数字图像可以由不同的捕获设备获取,每个设备都可以嵌入自己的预处理系统(过滤器)和其他可以彻底改变图像甚至添加噪声的特性。因此,必须对每个案例进行不同的处理(预处理)。

但是,有一些常用操作可用于改进检测,例如,一个非常基本的操作是将图像转换为灰度并应用threshold 对图像进行二值化.我之前使用的另一种技术是the bounding box,它允许您检测文本区域。要从图像中去除噪声,您可能对腐蚀/扩张操作感兴趣。我在this post 上演示了其中一些操作。

此外,还有其他关于 OCR 和 OpenCV 的有趣帖子,您应该看看:

Simple Digit Recognition OCR in OpenCV-Python Basic OCR in OpenCV

现在,只是为了向您展示一种可用于示例图像的简单方法,这是反转颜色并应用阈值的结果:

cv::Mat new_img = cv::imread(argv[1]);
cv::bitwise_not(new_img, new_img);

double thres = 100;
double color = 255;
cv::threshold(new_img, new_img, thres, color, CV_THRESH_BINARY);

cv::imwrite("inv_thres.png", new_img);

【讨论】:

我想我必须为每个图像找到正确的腐蚀/扩张操作集。现在,我似乎无法找到适用于所有图像的合理组合。不过,分水岭的例子效果最好。 还有其他方法可以检测图片中的文字吗? 第二个 OpenCV 链接失效,这里有一个替代方案:github.com/damiles/basicOCR【参考方案2】:

尝试形态学图像处理。看看this。但是,它仅适用于二值图像 - 因此您必须对图像进行二值化(阈值?)。虽然它很简单,但它取决于字体大小,因此一个结构元素不适用于所有字体大小。如果您想要一个通用的解决方案,有许多论文用于图像中的文本检测 - 在 google 学者中搜索该术语应该会为您提供一些有用的出版物。

【讨论】:

谢谢,那篇论文真的很有用。我查看了形态学操作,但正如您所说,它们取决于文本大小。

以上是关于用于文本识别的图像预处理的主要内容,如果未能解决你的问题,请参考以下文章

VGG:用于大规模图像识别的超深卷积网络

论图像识别的预处理技术

论图像识别的预处理技术

图像识别的预处理技术

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

使用 Tesseract 进行鸡蛋标记识别的图像预处理