1

我部分实现了笔画宽度变换算法。我的实现很丑陋,但有些工作

我的实现给了我很多候选人(我使用一些规则来过滤它们)。但我仍然有很多非角色候选人。我想使用神经网络(或其他 ML 算法)来过滤它们。

我应该为我的分类器使用什么功能?

我可以提取均值/标准差(组件的 SW 值)和宽度/高度。

例子:

在此处输入图像描述

红色矩形是字符候选(实现不检测明暗字符,“路虎”的错误检测是正常的)组件过滤后的SWT图像

在此处输入图像描述

4

2 回答 2

1

在实践中使用的一种方法是将所有候选者缩放到相同的尺寸(宽度 x 高度),然后将这些像素中的每一个输入到神经网络中。

然后你有每个字符的输出(返回 0 和 1 之间,表示匹配的接近程度)(可能是最后一个输出表示不匹配,尽管这可以从没有明确的候选字符得出)。

使用神经网络,您将需要相当多的训练数据,它就是这样。避免手动获取所需训练数据的选项:

  • 在线查找训练数据
  • 以算法方式生成训练数据(创建一个算法来绘制字符和背景并将它们输入 NN)
  • 对已经获得的训练数据执行转换(旋转、调整大小、更改颜色)。这可以使相当小的训练集变得更大。确保不要尝试以这种方式生成太大比例的数据,否则您的网络可能无法正常运行。
于 2013-02-09T14:29:56.293 回答
1

神经网络和其他技术(例如 SVM)不用于过滤输入,而是用于对输入进行分类。不同之处在于过滤将根据输入是否匹配强加的规则来丢弃输入,因此它实际上不需要任何训练(更可能是一些好的阈值)。另一方面,/trained/ 分类器将一个类分配给给定的输入,这意味着您需要用预期的类和负样本充分训练分类器。因此,如果您想做前者或后者,方法会有所不同,但您在前者中使用的功能可能对后者也有用。

无论您采用何种路径,一些基本的预处理都涉及首先获得一个更清晰的组件,我的意思是删除给定示例中存在的组件内部的无关白点。在那之后,有很多选择。基本的宽度和高度测量值可用于过滤您确定与预期不匹配的组件,因此也无需对其进行分类。通过考虑连接组件的骨架,您可以获得端点和分支点,它们形成两个特征。欧拉数是另一个,事实上,有太多可能的特征需要提取,无法在此处列出。这些提到的特征的特点是它们都是尺度、旋转和平移不变的。这也意味着您需要其他特征来区分,例如,9从 a6中,骨架中的孔的质心就是一个这样的例子(请注意它,因为直接提取此特征对任何事物都不是不变的)。

请注意,即使是简单的特征也可以帮助分离整个字符集。例如,对于欧拉数 = 0,您将只得到 'A'、'D'、'O'、'P'、'Q'、'R'、'0'、'4'、'6'、或 '9',假设 ascii alphanum,一种行为良好的字体,以及对输入的良好预处理。

最后,还有相当多的论文可以寻找 SWT 之外的更多信息和不同的方法。例如,T-HOG是最近的一种,根据公布的结果,它比 SWT 略好。

编辑:恢复和扩展:

如果你想使用机器学习,你将需要大量的标记数据,你可以从中分离出来进行训练和测试。如果您的目标只是区分“这是一个字符”和“这不是一个字符”,并且没有充分描述后面的类(即,您几乎没有什么不是字符的示例,或者您无法表征它您可以接收的任何类型的输入),One-Class SVM 是一种选择。

对于要从​​单个字符中提取的特征,如前所述,它们太多,方法也很多。论文“Feature Extraction Methods for Character Recognition -- A Survey”(1995 年,根本不是最近的)讨论了其中一些(它还提到了训练数据的预期最小大小,请务必阅读),所以我包括它的部分内容在这里。

从字符中提取的可能很好的特征(灰度和二值图像):

  • Hu、Reiss、Flusser、Suk、Bamieh、de Figueiredo Moments(所有几何矩不变量均基于 Hu 在“通过 Moment Invariants 进行视觉模式识别”的初步工作的改进);
  • 泽尼克时刻

从骨架化字符中提取的良好特征:

  • T 形接头数量;
  • X 关节数量;
  • 折弯点数;
  • 端点数量;
  • 通过将原点放置在形状的质心与轴的交叉次数;
  • 半圆数

傅立叶描述符也可以应用于上述论文中所讨论的字符的骨架、二进制表示或图形表示。

于 2013-02-09T16:02:58.923 回答