3

我正在 Visual Studio 平台上进行手写识别和相关工作,并使用 openCV 库。输入采用二进制扫描的 .tif 图像的形式。

目前,我遇到了一个障碍,试图找出一种方法来识别被删除的单词,就像你使用直线/曲线删除(取消)单词一样。我不会进行单个字符识别,因为这会浪费计算能力。

有没有办法以替代方式识别此类事件?

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

2> 骨架化输入并寻找交叉点。这会给我很多交叉点 - 包括那些由于用于删除单词的线而发生的交叉点。使用一些近似值,如最小二乘等。我可以得到一条近似线。但问题是在许多地方都可能出现交叉路口——例如。'b'中的2个交叉点等。

有什么建议么?

4

3 回答 3

2

您是否考虑过使用霍夫变换来检测打击线?

这是在手写中使用霍夫变换的说明,它将让您直观地了解该方法: 手写 检测到的线

您可以使用openCV快速测试它。该函数被调用cvHoughLines2

于 2009-11-26T09:31:18.563 回答
0

为什么不处理轮廓?您可以利用 Poly (Ten-Chin) 近似并仅分析由链重建产生的少数向量。如果您想做更多,请使用混合金字塔/轮廓方案,以获得具有不同细节级别的向量近似值,从粗略分辨率到最精细分辨率。

当你得到一个“合理”数量的独特片段时停止细化,应用归一化(见 Moments - Hu's Moments)来制作你的样本指纹,最后采用强大的分类系统。

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

于 2009-10-03T07:38:43.593 回答
0

我会选择个人字符识别。这可能会浪费计算能力,但可以提供最好的结果。只需找到一种从字符识别中获取值的方法,该值表明该字符被识别得有多好,然后为非字符的事物找到一个阈值。我认为取消会以某种方式破坏字符,从而识别将无法找到某些东西,也许你可以使用这个事实来找到被取消的字符。为了改善结果,在文本的同一区域寻找许多识别不佳的字符,通常会取消整个单词,因此识别不好的结果会聚集在一起。

如果你的表现最终很糟糕,你可以随时回来改进算法。

于 2009-10-28T14:33:56.960 回答