如何识别图像中的字母? (在 OCR 之前)

Posted

技术标签:

【中文标题】如何识别图像中的字母? (在 OCR 之前)【英文标题】:how do I identify letters in an image? (before OCRing) 【发布时间】:2011-06-21 03:41:14 【问题描述】:

我在网上只能找到关于 OCR 的信息,但我还没有,我仍然需要识别图像中字母的位置。

任何帮助将不胜感激

【问题讨论】:

【参考方案1】:

有趣的是,答案并不像看起来那么简单。有些人可能认为在图片上定位字符是 OCR 的第一步,但事实并非如此。实际上,在您真正完成识别之前,您无法确定每个字符的位置。

它的工作方式完全取决于您要识别的图像类型。首先,您应该在文本区域(块)和其他所有内容上分割您的图像。

只是几个例子:

如果要识别汽车图片上的车牌,则应先定位车牌,然后再将其拆分为单独的字符。 如果您正在识别某些申请表,您可以通过了解其布局来定位文本所在的区域 如果您要识别书页扫描,则必须区分图片和文本区域,然后仅处理文本。

从这一刻开始,您不再需要原始图像,您所需要的只是文本块的二值化图像。所有 OCR 算法都适用于二进制图像。您可能还需要进行其他类型的图像转换,例如直线拉直、透视校正、倾斜校正等 - 所有这些都取决于您识别的图像类型。

找到文本块并对其进行规范化后,您应该进一步查找文本块上的文本行。在文本水平线的简单情况下,通过水平线创建像素直方图非常简单。

现在,当你有台词的时候,你可能会认为现在很简单,你可以把它分成字符,huray!再次,这是错误的。有连字、断字甚至连字(两个字母形成一个单一的形状)等现象,或者字母的部分在下一个字符的右上方或下方。你应该做的是创建几个分割线到单词和单个字符的 hipotesis,然后尝试 OCR 每个变体,用置信度对每个 Hypotesis 进行加权。最后一步是使用字典检查此图中的不同路径并选择最佳路径。

只有现在,当您真正识别出所有内容时,您才能说出各个字符的位置。

所以,简单的答案是:使用 OCR 程序识别您的图像,并从其输出中获取字符坐标。

【讨论】:

【参考方案2】:

一般而言,您会寻找几乎纯色的小连续区域。我建议对每个像素进行采样并构建一个附近像素的数组,这些像素也落在原始像素颜色的阈值内(对每个匹配像素的邻居重复)。将整个数组作为潜在角色放在一边(或现在检查)并继续前进(可能会忽略以前收集的像素以加快速度)。

如果您事先知道文本的字体大小、质量和/或颜色,则可以进行优化。如果不是,您将希望对构成“连续区域”的阈值相当慷慨。

【讨论】:

我实际上做了这样的事情(我正在分批扫描文档并构建了一个可以在文档之间插入的分隔页。我从扫描仪获取 mtiff 并对其进行处理以找到要拆分的标记将 mtiff 转换为单独的 PDF)。如果你走这条路,你将花费大量时间来处理检测算法,因为字体、字体大小、扫描质量差等超出你的想象。我建议只对整个页面进行 OCR。它的计算成本并不高。

以上是关于如何识别图像中的字母? (在 OCR 之前)的主要内容,如果未能解决你的问题,请参考以下文章

Windows下命令行及Java+Tesseract-OCR对图像进行(字母+数字+中文)识别,亲测可行

Windows下命令行及Java+Tesseract-OCR对图像进行(字母+数字+中文)识别,亲测可行

在 OCR(光学字符识别)之前,您会推荐啥软件用于图像增强? [关闭]

印刷字符识别基于matlab OCR印刷字母+数字识别含Matlab源码 1861期

印刷字符识别基于matlab OCR印刷字母+数字识别含Matlab源码 287期

OCR无法识别Steam键(Dot Matrix OCR)