2009-10-02 69 views
3

我正在开发Visual Studio平台上的手写识别和相关内容,并使用openCV库。输入是以二进制扫描.tif图像的形式。识别出手写的文字

目前,我进入了一个障碍,试图找出一种方式来识别被敲出来的单词,就像用直线/曲线敲出(取消)单词一样。我不打算做个人角色识别,这会浪费计算能力。

有什么方法可以用另一种方式识别这种情况吗?

以下是我发现的两个想法,但我不确定 - 1>使用像< 0 0 0,1 1 1,0 0 0>的掩码,这将有助于查找所有水平线...但这将是一个非常大的假设。线条可以是波浪形的,并且可以是任何方向。

2>镂空输入并查找交点。这会给我不少交集 - 包括由于用来排除单词的线而发生的交集。使用一些近似像最小二乘等我可以得到一个近似线。但是在许多地方都会出现交叉点的问题 - 例如。 'b'中的2个交点等。

有什么建议吗?

+0

通过它的线条波浪文本,呃?试图击败CAPTCHA? :) – endolith 2009-10-14 21:23:50

回答

0

为什么不加工轮廓?您可以利用Poly(Ten-Chin)近似并仅分析由链重建产生的少数向量。如果你想做更多的事情,然后使用混合金字塔/轮廓方案,以获得具有不同细节水平的向量近似值,从粗分辨率开始到最好。

当您获得“合理”数量的独特细分时,停止细化,应用标准化(请参阅Moments-Hu's Moments)对您的样本进行指纹分析,最后采用强大的分类系统。

我建议你看看OpenCV套件中的ML(机器学习)部分,以便更好地参考后一部分。对于栅格数据,哈尔的小波+隐马尔可夫模型效果很好,对于矢量而言,也许你可以使用较难设置的东西(SOM,KNN,KMeans)。

0

我会去个别字符识别。这可能会浪费计算能力,但它可以带来最好的结果。只需找到一种方法,从字符识别中获取价值,以表明角色被识别的性能如何,然后为不是角色的事物找到阈值。我认为取消会以某种方式破坏字符,这种方式会使识别遇到问题,并可能使用这个事实来查找被取消的字符。为了改善结果,在文本的同一区域查找许多被严重识别的字符,通常整个字被取消,因此不良识别结果会聚集在一起。

如果您的表现非常糟糕,最终您可以随时回来并改进算法。