5

它是 OCR 过程的一部分,即:

如何将句子分割成单词,然后再分割成字符?

这个任务的候选算法是什么?

4

4 回答 4

1

作为第一遍:

  • 将文本处理成行
  • 将线加工成段(连接的部分)
  • 找到可以放置在每对线段之间的最大白带。
  • 查看宽度序列并选择“大”宽度作为空白。
  • 空白之间的一切都是一个词。

现在你只需要一个足够好的“大”定义。

于 2010-04-10T14:31:37.747 回答
1

首先,NIST(Nat'l Institutes of Standards and Tech.)在大约 15 年前针对这个确切的问题发布了一个 称为NIST 基于表单的手写识别系统的协议——即提取和准备文本即图像数据OCR 机器学习算法的输入。NIST 这个小组的成员也发表了一些关于这个系统的论文。

他们的分类器的性能也通过该算法发布的数据(“NIST 手写样本表格”)得到了证明。

我下载并使用的大约六个 OCR 数据集中的每一个都引用了 NIST 使用的数据提取/准备协议来准备数据以输入到他们的算法中。特别是,我很确定这是准备波士顿大学手写数字数据库所依赖的方法,该数据库被视为 OCR 的基准参考数据。

因此,如果 NIST 协议不是真正的标准,至少它是一种经过验证的方法,可以将文本作为图像准备用于 OCR 算法的输入。我建议从那里开始,并使用该协议来准备您的数据,除非您有充分的理由不这样做。

总之,NIST 数据是通过直接从预先打印的表格中提取 32 位 x 32 位标准化位图来准备的。

这是一个例子:

00000000000001100111100000000000 00000000000111111111111111000000 00000000011111111111111111110000 00000000011111111111111111110000 00000000011111111101000001100000 00000000011111110000000000000000 00000000111100000000000000000000 00000001111100000000000000000000 00000001111100011110000000000000 00000001111100011111000000000000 00000001111111111111111000000000 00000001111111111111111000000000 00000001111111111111111110000000 00000001111111111111111100000000 00000001111111100011111110000000 00000001111110000001111110000000 00000001111100000000111110000000 00000001111000000000111110000000 00000000000000000000001111000000 00000000000000000000001111000000 00000000000000000000011110000000 00000000000000000000011110000000 00000000000000000000111110000000 00000000000000000001111100000000 00000000001110000001111100000000 00000000001110000011111100000000 000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111往

我相信 BU 数据准备技术包含 NIST 技术,但在最后增加了一些步骤,不是为了提高保真度,而是为了减小文件大小。特别是 BU 组:

  • 从 32 x 32 位图开始;然后
  • 将每个 32 x 32 位图划分为 4x4 的非重叠块;
  • 接下来,他们计算每个块中激活像素的数量(“1”激活;“0”不激活);
  • 结果是一个 8 x 8 输入矩阵,其中每个元素都是整数 (0-16)
于 2010-04-10T13:24:12.467 回答
0

我假设您正在使用 matlab 中的图像处理工具箱。

区分图像中的文本。您可能想要关注:

  1. 灰度(大大加快速度)。
  2. 对比度增强。
  3. 轻轻腐蚀图像以去除噪点(划痕/光点)
  4. 扩张(重)。
  5. 边缘检测(或 ROI 计算)。

通过反复试验,您将获得适当的系数,这样您在第 5 步之后获得的图像将包含围绕每个字母/单词/行/段落的凸区域。

笔记:

  1. 本质上,你扩张得越多,你得到的元素就越大。即,最小扩张将有助于识别字母,而相对较高的扩张将需要识别行和段落。
  2. 在线 ImgProc MATLAB 文档

查看在线文档中的“文档中的示例”部分或参考 Matlab 帮助菜单中的图像处理工具箱文档。

那里给出的示例将指导您正确调用函数及其各种格式。

示例代码(不是我的)

于 2010-04-17T16:34:22.993 回答
0

用于查找二进制序列,如 101000000000000000010000001 检测序列 0000,0001,001,01,1

于 2010-08-31T09:29:13.250 回答