如何从汉字中提取笔画

时间:2011-08-09 07:45:00

标签: algorithm graphics computer-vision ocr cjk

我一直在多次尝试创建一种从汉字中提取笔画信息的算法。我尝试了各种方法,但没有一种非常令人满意,可能是因为我对图形算法的了解有限。

基本上,我有以下数据:

  • 中文字符,可以是像素或矢量(黑色)

  • 笔划的整体轮廓,以像素为单位(红色)

  • 整体方向(蓝色箭头)。

enter image description here

由此,我试图提取中风。如果必须这样做,根据可用数据,您会使用哪些方法?你能想到任何自动提取中风的方法吗?

5 个答案:

答案 0 :(得分:5)

我首先计算每个蓝色像素到最近的白色像素的距离。然后,您可以保留比最近的白色像素更近的所有红色像素。之后可以使用一些过滤器对效果进行平滑处理(可能类似于erosion后跟close)。

答案 1 :(得分:3)

您可能正在寻找medial axis,也称为topological skeleton。简而言之,您将解决所有与边缘上的多个点等距离的点。您可能需要对结果曲线进行一些平滑或简化。

棘手的部分是将形状的一部分分成多个笔划。我不相信有明确的方法可以做到这一点。也许将“公共区域”定义为以每个骨架交点为中心的圆,与最近的边相切?然后可能在间隙上插入一些行程宽度?

答案 2 :(得分:2)

我认为你不能提出一种没有不正确的情况的算法。某些字符的某些部分相同但不等同于相同的笔划数。例如,从技术上讲,马从视觉角度也包括口(当然不是语言性的)。

我唯一的想法是将该区域分成小区域并编写一个算法,尝试遵循笔画所在的设定顺序,但我无法想象这会很容易,并且取决于字体,有些行被扩展到他们不应该进入的区域。

由于其不寻常的布局,还有一些字符对算法效果不佳 - 只有遵循笔画顺序的严格规则才能得到正确的数字:例子包括凹和凸。 / p>

我不得不问 - 笔画计数是每个字符的基本信息 - 为什么你需要创建一个算法来计算它?是不是更容易进行字符识别,只是在自定义词典中查找字符的笔划数?

答案 3 :(得分:2)

从蓝线和样本图像我认为这三步法可能适用于很多情况:

  1. 对于沿线的每个点,选择更近的所有红色像素 到那一点比最近的白色像素。这将粗略地为您提供角色的笔触,但是在两个笔划交叉的区域周围有凸起,并且您将在笔划的两端排除一些像素。

  2. 要消除凸起,请隔离笔划的边缘像素,并计算该边缘图像的hough transform。从中选择两条最重要的线。这将给你(如果笔划足够直)沿着笔划边缘的两条线。消除笔划中的所有红色像素,这些红色像素在垂直方向上比这两条线更远离蓝线。现在(对于一个足够笔直的笔划)你所缺少的将是一些小的孤立的像素块,在步骤1或步骤2中可以消除这些像素:

  3. 添加仅触及笔划的所有小的孤立像素区域,而不是笔划的其他部分。如果您在步骤2中找到的行太靠近蓝线,您也可以在步骤1和步骤2之间执行此步骤。

答案 4 :(得分:1)

我认为最简单的可行方法是:

  1. 逐一绘制蓝色箭头
  2. 计算每个蓝线段的距离变换
  3. 将此离散距离与红色区域相交
  4. 删除距蓝色段大于T
  5. 的红色区域

    完成此操作后,您可以使用更复杂的策略来选择一个优秀的,与细分相关的T。