OCR和字符相似

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

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

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

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

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

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

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

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

对于识别或分类,大多数OCR使用neural network

这些必须正确configuration为所需的任务,如层数内部互连体系结构等等。 neural network的另一个问题是,他们必须经过适当的训练,这是很难做到的,因为你需要知道适当的训练数据集大小(因此它包含足够的信息,不要过度训练)。 如果你没有neural network的经验,不要这样,如果你需要自己实现它!

还有其他的方式来比较模式

  1. vector方法

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

    您可以根据以下内容比较图像:

    • 直方图
    • DFT / DCT频谱分析
    • 尺寸
    • 每行占用的像素数
    • 各行占用像素的起始位置(左起)
    • 每行占用像素结束位置(从右开始)
    • 这3个参数也可以对行进行
    • 兴趣点列表(点是一些变化,如强度凹凸,边缘,…)

    您为每个testing字符创buildfunction列表并将其与您的字体进行比较,然后最接近的匹配就是您的字符。 此外,这些function列表可以缩放到一些固定的大小(如64x64 ),所以识别变得不变。

    这里是我用于OCR的function样本

    OCR字符功能

    在这种情况下(特征尺寸被缩放到适合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 

    现在:预先计算字体中每个字符的所有特征以及每个字符。 从字体中find最接近的匹配

    • 所有特征向量/数组之间的最小距离
    • 不超过一些临界值差异

    这是旋转偏斜不变,并倾斜到一个点。 我做填充字符的OCR ,所以对于轮廓字体,它可能会使用一些调整

[笔记]

为了比较,您可以使用距离或相关系数