我目前正在研究某种 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 )
如果有人能帮助我解决这个问题,我将不胜感激。
最佳答案
大多数 OCR 使用神经网络进行识别或分类
这些必须正确配置为所需的任务,如内部互连架构的层数等。神经网络的另一个问题是它们必须经过适当的训练,这很难正确地进行,因为您需要知道诸如适当的训练数据集大小之类的事情(因此它包含足够的信息并且不要过度训练)。如果您没有使用神经网络的经验,如果您需要自己实现它,请不要走这条路!!!
还有其他方法可以比较模式
您可以根据以下内容比较图像:
您为每个测试字符创建功能列表并将其与您的字体进行比较,然后最接近的匹配是您的字符。此外,这些特征列表可以缩放到某个固定大小(如
64x64
),因此识别在缩放时变得不变。这是我用于 的功能示例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
现在:预先计算字体中每个字符和每个读取字符的所有特征。从字体中找到最接近的匹配这在旋转时部分不变并倾斜到一个点。我愿意 OCR 对于填充字符,因此对于轮廓字体,它可能需要进行一些调整
【备注】
为了进行比较,您可以使用距离或 correlation coefficient
关于math - OCR 和字符相似度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22786288/