【问题标题】:What features to use from character candidates从角色候选中使用哪些功能
【发布时间】:2013-02-09 14:02:25
【问题描述】:

我部分实现了the Stroke Width Transform algorithm。 我的实现很丑陋,但有些工作

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

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

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

例子:

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

【问题讨论】:

  • 如果你能把你得到的输出包括在内,那会很有帮助,所以我们可以看到哪些描述符可能有用。例如,我不知道是什么构成了您的(非)字符候选者,特别是因为您提到“我的实现很丑陋,但有些东西有效”。这意味着它可以产生任何类型的输出。
  • 我添加了一个样本。稍后我将添加更多示例和一些有关组件的信息
  • 这没有多大帮助。您将根据 SWT 转换的结果提取特征,对吗?因此,您需要在 SWT 之后包含生成的图像,而不是带有选定矩形的原始图像。
  • 也许你的意思是这样的:hostingkartinok.com/…
  • 很可能是这样,现在为了让每个人都更轻松,您可以只保留该图像中与您在输入图像中显示的矩形相对应的区域。

标签: machine-learning computer-vision neural-network


【解决方案1】:

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

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

请注意,即使是简单的特征也可以帮助分离整个字符集。例如,对于欧拉数 = 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 关节数;
  • 折弯点数;
  • 端点数量;
  • 通过将原点放置在形状的质心与轴交叉的次数;
  • 半圆数

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • 感谢您的回答!但是如果我使用这些方法,那么我需要大量的样本来有效地训练 ann 吗?也许有更有效的方法?
    • 正负样本的比例是多少?
    • @Dark_Daiver 你需要相当数量的正样本和负样本。我会说至少positive:negative = 1:1。负样本的差异可能比给定字符大得多,但字符很多,所以1:1 平均为character:negative = 1:36(假设有 36 个不同的字符)。
    猜你喜欢
    • 1970-01-01
    • 2012-12-17
    • 2013-01-18
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多