准确的二进制图像分类

Ble*_*der 12 python ocr opencv image-processing simplecv

我正试图从游戏板中提​​取一个项目的信件.目前,我可以检测游戏板,将其分割成各个方块并提取每个方块的图像.

我得到的输入是这样的(这些是单独的字母):

在此输入图像描述在此输入图像描述在此输入图像描述在此输入图像描述在此输入图像描述在此输入图像描述

起初,我正在计算每个图像的黑色像素数,并将其用作识别不同字母的方法,这对于受控输入图像效果较好.但是,我遇到的问题是,对于与这些图像略有不同的图像,我无法做到这一点.

我每个字母大约有5个样本用于培训,这应该足够好了.

有谁知道什么是一个好的算法用于此?

我的想法是(在图像标准化后):

  • 计算图像和每个字母图像之间的差异,以查看哪一个产生最少的错误.但是,这不适用于大型数据集.
  • 检测角落并比较相对位置.
  • ???

任何帮助,将不胜感激!

moo*_*eep 14

我认为这是某种监督学习.您需要对图像进行一些特征提取,然后根据为每个图像计算的特征向量进行分类.

特征提取

乍看之下,特征提取部分看起来像Hu-Moments的好方案.只需计算图像时刻,然后从这些计算cv :: HuMoments.然后你有一个7维实值特征空间(每个图像一个特征向量).或者,您可以省略此步骤并将每个像素值用作单独的功能.我认为这个答案中的建议是朝这个方向发展的,但增加了PCA压缩以减少特征空间的维数.

分类

至于分类部分,您几乎可以使用任何您喜欢的分类算法.你可以为每个字母使用SVM(二进制是 - 否分类),你可以使用NaiveBayes(最大可能的字母是什么),或者你可以使用k-NearestNeighbor(kNN,特征空间中的最小空间距离)方法,例如弗兰.

特别是对于基于距离的分类器(例如kNN),您应该考虑对特征空间进行归一化(例如,将所有维度值缩放到欧几里德距离的某个范围,或使用类似马哈拉诺比斯距离的东西).这是为了避免在分类过程中具有较大价值差异的过多表现的特征.

评估

当然,你需要训练数据,即给出正确字母的图像特征向量.以及评估流程的流程,例如交叉验证.


在这种情况下,您可能还想查看模板匹配.在这种情况下,您可以使用训练集中的可用模式对候选图像进行卷积.输出图像中的高值表示图案位于该位置的概率很高.


Chr*_*rle 5

这是一个认识问题.我个人使用PCA和机器学习技术(可能是SVM)的组合.这些是相当大的主题,所以我担心我不能真正详细说明,但这是最基本的过程:

  1. 收集您的训练图像(每个字母不止一个,但不要发疯)
  2. 标记它们(可能意味着很多东西,在这种情况下,它意味着将字母分组为逻辑组 - 所有A图像 - > 1,所有B图像 - > 2,等等)
  3. 训练你的分类器
    • 通过PCA分解运行一切
    • 将所有训练图像投影到PCA空间
    • 通过SVM运行投影图像(如果它是一个类别的分类器,一次执行一个,否则一次完成所有这些.)
    • 保存您的PCA特征向量和SVM训练数据
  4. 运行识别
    • 加载到PCA空间
    • 加载SVM培训数据
    • 对于每个新图像,将其投影到PCA空间并要求SVM对其进行分类.
    • 如果你得到一个答案(一个数字)将它映射回一个字母(1 - > A,2 - > B等).