用于文本识别的图像预处理
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 学者中搜索该术语应该会为您提供一些有用的出版物。
【讨论】:
谢谢,那篇论文真的很有用。我查看了形态学操作,但正如您所说,它们取决于文本大小。以上是关于用于文本识别的图像预处理的主要内容,如果未能解决你的问题,请参考以下文章