2014-04-01 39 views
3

我目前的工作在某种OCR(光学字符识别)系统。我已经写了一个脚本来从文本中提取每个字符,并清除(大部分)违规行为。我也知道字体。我现在有例如图像是:OCR和性格相似

M(http://i.imgur.com/oRfSOsJ.png(字体)和http://i.imgur.com/UDEJZyV.png(扫描))

K(http://i.imgur.com/PluXtDz.png(字体)和http://i.imgur.com/TRuDXSx.png(扫描))

C(http://i.imgur.com/wggsX6M.png(字体)和http://i.imgur.com/GF9vClh.png(扫描))

对于所有这些图像,我已经有一种二进制矩阵(1为黑色,0为白色)。我现在想知道是否有某种类似数学投影的公式来查看这些矩阵之间的相似性。我不想依赖图书馆,因为这不是我给的任务。

我知道这个问题似乎有点模糊,也有类似的问题,但我正在寻找的方法,而不是一个包,到目前为止,我无法找到有关该方法的任何意见。这个问题含糊不清的原因是我真的没有必要开始。我想要做的事实际上是在维基百科上描述的:

矩阵匹配涉及将图像与存储的字形逐像素地进行比较;它也被称为“模式匹配”或“模式识别”。[9]这依赖于输入字形与图像的其余部分正确隔离,并且存储的字形具有相同的字体和相同的比例。这种技术最适合打字文本,遇到新字体时效果不佳。这是早期的基于光电池的OCR实现的技术,相当直接。http://en.wikipedia.org/wiki/Optical_character_recognition#Character_recognition

如果有人能够帮助我解决这个问题,我将非常感激。

回答

8

用于识别或分类大多数OCR的使用神经网络

这些必须正确地配置,以类似的内部互连体系结构层的数目期望的任务,等等。神经网络的问题在于它们必须经过适当的训练,这很难做到正确,因为您需要知道适当的训练数据集大小(因此它包含足够的信息并且不会过度训练)。如果你没有神经网络的经验,如果你需要自己实现,不要这样做!

也有其他的方法来比较图案

  1. 向量方法

    • 多边形化图像(边缘或边界)
    • 比较多边形的相似性(表面面积,周长,形状....)
  2. 像素办法

    您可以比较图像基于:

    • 直方图
    • DFT/DCT频谱分析
    • 大小
    • 数量占据每个像素在每一行占用的像素的线
    • 开始位置(左起)占领的像素的每一行中
    • 端位置(从右击)
    • 这些3个参数也可以进行对行的兴趣列表
    • 点(点是某些变化像强度凹凸,边缘,...)

    您为每个测试字符创建功能列表并将其与您的字体进行比较,然后最接近的匹配就是您的字符。此外,这些功能列表可以缩放到某些固定大小(如64x64),因此识别在缩放时变得不变。

    下面是我使用特征样品OCR

    OCR character features

    在这种情况下(特征尺寸缩放以适合在NxN),所以每一个字符具有6阵列由N号码,如:

    int row_pixels[N]; // 1nd image 
    int lin_pixels[N]; // 2st image 
    int row_y0[N];  // 3th image green 
    int row_y1[N];  // 3th image red 
    int lin_x0[N];  // 4th image green 
    int lin_x1[N];  // 4th image red 
    

    现在:预先计算字体中每个字符以及每个字符的所有特征。从字体找到最紧密匹配的所有特征向量之间

    • 分钟距离/阵列
    • 不超过一些treshold差

    这是关于旋转partialy不变和倾斜到一个点。我做OCR用于填充字符,以便为轮廓字体它可能使用的一些调整

[注意事项]

为了便于比较,你可以使用距离或correlation coefficient