如何对单个数字或多个数字进行分类

时间:2013-09-03 05:42:31

标签: opencv image-processing ocr image-segmentation digit

我有一个包含数字的图像。

original image

有:1,153,25,50,23和40

对于每一位数字,我对数字识别没有任何问题。我能认出有1,1,5,3,5,0,2,5,2,3,4,0。

现在,我想让他们成为1,153,25,50,23和40。

我的方法是,使图像变得模糊,因此数字的边界框与其他数字的边界框相遇。然后在多个边界框的巨大边界框内提取数字。

我的期望是这样的

expectation

但是,现实就像这样

reality

1,153,25,5,0和2340

,因为

  • 距离5和0太远

  • 距离23和40太近

我的问题是,是否有另一种方法可以对那些是单数字还是多数字进行分类?如果有,怎么样? :) 非常感谢你:))

*抱歉我的英文不好

**我使用的是opencv c ++

2 个答案:

答案 0 :(得分:2)

与此相比,模糊然后找到边界框的计算时间很长:

如果您可以选择每个数字,那么您必须至少为每个数字都有一个中心点。我会通过找到每个数字的宽度和高度以及旋转来进一步做到这一点。有了这些信息,我将应用一组与读取数字相对应的规则。

这些规则可行:

  1. 以节点编号等于位数
  2. 的空图表开头
  3. 被测数字是否有任何其他数字小于一个宽度(或两个宽度相互之间的中心点)?
  4. 如果是,则两个数字具有相同的旋转(+/-容差)
  5. 如果是,那么旋转90(+/- tol)度到两位数的中心点之间的线?
  6. 使用两点的矢量差异确定顺序
  7. 在两位数字之间创建方向性边缘
  8. 检查对面的另一个数字(快捷方式)
  9. 重复下一个数字
  10. 沿着图表查找您的一组数字
  11. 考虑到这样的问题,我宁愿使用概率来订购一组可能的解决方案,那么你的程序可以询问操作员,或者它是否会卡住,假设有一件事可以回去并选择下一个"最好的& #34;之一。

    希望这有帮助,我羡慕你的数字识别技能:)

答案 1 :(得分:0)

我建议你不要模糊图像。只需提取单个字符及其边界框即可。然后,您可以迭代地为其质心应用欧氏距离阈值,将边界框合并在一起,一次一个。然后,您可以将每个数字建模为链接列表,并通过简单的方向启发式继续添加到元素两侧的列表中。