我正在开发Visual Studio平台上的手写识别和相关内容,并使用openCV库。输入采用二进制扫描.tif图像的形式。
目前我遇到了一个障碍,试图找出一种方法来识别被删除的单词,就像你用直线/曲线击出(取消)单词一样。我不会做个别字符识别'因为这会浪费计算能力。
有没有办法以另一种方式识别这种情况?
以下是我遇到的两个想法,但我不确定 - 1 GT;使用像<这样的面具0 0 0,1 1 1,0 0 0>这将有助于找到所有水平线...但这将是一个非常大的假设。线条可以是波浪状的,也可以是任何方向。
2 - ;骨架化输入并寻找交叉点。这将给我相当多的交叉点 - 包括由于用于击出单词的线而发生的交叉点。使用一些近似像最小二乘等我可以得到一个近似的线。但问题是交叉口可能在许多地方发生 - 例如。 'b'等2个交叉点。
有什么建议吗?
答案 0 :(得分:2)
您是否考虑过使用Hough transform来检测打击线?
这是一个illustration of the use of hough transform in handwriting,它将为您提供直观的方法:
您可以使用openCV快速测试它。该函数称为cvHoughLines2
。
答案 1 :(得分:0)
为什么不处理轮廓?你可以利用Poly(Ten-Chin)近似,只分析链重建产生的几个向量。如果你想做更多,那么使用混合金字塔/轮廓方案,以获得具有不同细节水平的向量近似值,从粗略分辨率到最精细。
当您获得“合理”数量的独特细分时,停止细化,应用标准化(参见Moments - Hu's Moments)来制作样本的指纹,并最终采用强大的分类系统。
我建议你看一下OpenCV套件的ML(机器学习)部分,以便更好地参考后一部分。对于栅格数据,Haar的小波+隐马尔可夫模型效果很好,对于矢量,也许你可以使用较难设置的东西(SOM,KNN,KMeans)。
答案 2 :(得分:0)
我会选择个性识别。这可能是对计算能力的浪费,但它可以提供最好的结果。只需找到一种从字符识别中获取值的方法,该值可以显示字符识别的好坏,然后找到非字符的阈值。我认为取消将以某种方式破坏char,使得识别会有问题找到一些东西,也许你可以用这个事实来找到被取消的字符。为了改善结果,查找在文本的同一区域中被严重识别的许多字符,通常整个单词被取消,因此不良识别结果将聚集。
如果你的表现最终非常糟糕,你可以随时回来并改进算法。