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的经验,不要这样,如果你需要自己实现它!
还有其他的方式来比较模式
-
vector方法
- 多边形图像(边缘或边框)
- 比较多边形的相似性(表面积,周长,形状,…)
-
像素方法
您可以根据以下内容比较图像:
- 直方图
- DFT / DCT频谱分析
- 尺寸
- 每行占用的像素数
- 各行占用像素的起始位置(左起)
- 每行占用像素结束位置(从右开始)
- 这3个参数也可以对行进行
- 兴趣点列表(点是一些变化,如强度凹凸,边缘,…)
您为每个testing字符创buildfunction列表并将其与您的字体进行比较,然后最接近的匹配就是您的字符。 此外,这些function列表可以缩放到一些固定的大小(如
64x64
),所以识别变得不变。这里是我用于OCR的function样本
在这种情况下(特征尺寸被缩放到适合
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 ,所以对于轮廓字体,它可能会使用一些调整
[笔记]
为了比较,您可以使用距离或相关系数