我一直在多次尝试创建一种从汉字中提取笔画信息的算法。我尝试了各种方法,但没有一种非常令人满意,可能是因为我对图形算法的了解有限。
基本上,我有以下数据:
中文字符,可以是像素或矢量(黑色)
笔划的整体轮廓,以像素为单位(红色)
整体方向(蓝色箭头)。
由此,我试图提取中风。如果必须这样做,根据可用数据,您会使用哪些方法?你能想到任何自动提取中风的方法吗?
答案 0 :(得分:5)
答案 1 :(得分:3)
您可能正在寻找medial axis,也称为topological skeleton。简而言之,您将解决所有与边缘上的多个点等距离的点。您可能需要对结果曲线进行一些平滑或简化。
棘手的部分是将形状的一部分分成多个笔划。我不相信有明确的方法可以做到这一点。也许将“公共区域”定义为以每个骨架交点为中心的圆,与最近的边相切?然后可能在间隙上插入一些行程宽度?
答案 2 :(得分:2)
我认为你不能提出一种没有不正确的情况的算法。某些字符的某些部分相同但不等同于相同的笔划数。例如,从技术上讲,马从视觉角度也包括口(当然不是语言性的)。
我唯一的想法是将该区域分成小区域并编写一个算法,尝试遵循笔画所在的设定顺序,但我无法想象这会很容易,并且取决于字体,有些行被扩展到他们不应该进入的区域。
由于其不寻常的布局,还有一些字符对算法效果不佳 - 只有遵循笔画顺序的严格规则才能得到正确的数字:例子包括凹和凸。 / p>
我不得不问 - 笔画计数是每个字符的基本信息 - 为什么你需要创建一个算法来计算它?是不是更容易进行字符识别,只是在自定义词典中查找字符的笔划数?
答案 3 :(得分:2)
从蓝线和样本图像我认为这三步法可能适用于很多情况:
对于沿线的每个点,选择更近的所有红色像素 到那一点比最近的白色像素。这将粗略地为您提供角色的笔触,但是在两个笔划交叉的区域周围有凸起,并且您将在笔划的两端排除一些像素。
要消除凸起,请隔离笔划的边缘像素,并计算该边缘图像的hough transform。从中选择两条最重要的线。这将给你(如果笔划足够直)沿着笔划边缘的两条线。消除笔划中的所有红色像素,这些红色像素在垂直方向上比这两条线更远离蓝线。现在(对于一个足够笔直的笔划)你所缺少的将是一些小的孤立的像素块,在步骤1或步骤2中可以消除这些像素:
添加仅触及笔划的所有小的孤立像素区域,而不是笔划的其他部分。如果您在步骤2中找到的行太靠近蓝线,您也可以在步骤1和步骤2之间执行此步骤。
答案 4 :(得分:1)
我认为最简单的可行方法是:
完成此操作后,您可以使用更复杂的策略来选择一个优秀的,与细分相关的T。