文字切割算法思考

数据集特征分析

首先,数据集主要瞄准的是安徽师范大学馆藏徽州文书中的字体,这些文字在年份上跨越了元代、明代至清代并按照古人的书写习惯呈竖列书写,并且在制作数据集的过程中可以发现,每一列并不是竖直排布,列与列之间存在重合现象,所有的古代文书除了极为标准的官方文书外都存在该现象,也就是说,列与列之间很难去完全分隔开,除此之外,如果对墨迹进行增量和锐化处理,虽然字体会更加清晰明显,但是也可以观察到除了字体之外,还有一些没必要的连笔、不规则的墨迹等等都会为分割列文字增加难度。

图像处理理论介绍

数字图像

图像一般分为模拟图像和数字图像,模拟图像在空间上是连续的,数字图像是离散的,数字图像可以由模拟图像转化而来,我们常见的一些图像都是数字图像,例如手机拍摄的图片、通过电脑合成和编辑的图像等。
数字图像以像素为基本单位,用二维数组来存储和表示,数字图像中的一个像素点的灰度值由f(x,y)表示

灰度化和二值化

图像灰度化是指将具有三个通道的彩色图转换为仅有一个通道的灰度图的过程
常见的灰度化方法:分量法、最大值法、平均值法和加权平均法

图像的二值化是将灰度图转换为二值图的过程,图像二值化过程如下:选定一个阈值t,将灰度图中灰度值大于t的设置为255,反之,设置为0
阈值t的常用选择方法如下:
固定阈值法、灰度平均值法、自适应阈值法(以每个像素为中心,设置邻域窗口,将邻域窗口的所有值的中值设置为该像素的阈值)、基于谷底最小值阈值法、基于双峰均值阈值法、OTSU(最大类间方差)算法

具体介绍:OTSU算法
可跳至该位博主的博客: link

数字形态学

基本运算包括:腐蚀和膨胀、开运算和闭运算等
膨胀:位于某个点的探针(结构元素)是否有探测到物件
腐蚀:位于某个点的探针(结构元素)是否全都有探测到物件
开运算:用同样大小的结构元素先做腐蚀运算再做膨胀运算
闭运算:用同样大小的结构元素先做膨胀运算再做腐蚀运算

仿射变换和透视变换

仿射变换是指在几何中,从一种二维坐标到另一种二维坐标的线性变换,由一系列原子变换组成,包括:平移、旋转、缩放、翻转、和剪切
透视变换是将一个视平面内的图像投影到另一个新的平面的视平面

投影算法

参考算法:
链接: link
此算法在逻辑上比较简单清晰,基本思路为:
①横向扫描,切出每一行。
②对每一行进行纵向扫描,得出每一个字

在执行此算法之前,需要对原始图像进行相关处理,得到二值图(仅有黑白色),涉及到了图像学的相关知识,可以通过opencv进行处理。由于在数据集的制作过程中,已经使用图像处理工具Camscanner对图像进行过增亮锐化处理,处理结果类似于二值图,所以这一步可以粗略地认为已经执行过了。
接下来是有关文字切割算法的内容,根据原作者的意思,需要获取处理过的图像的尺寸,一般是长×宽(设长为1200,宽为600),如果是从左往右的横向扫描,则扫描的结果应当会有600个数值,这个数值表示在1200个点中黑色点的数量,在这些数值中,y轴数值不为0的区域就是文字存在的地方,为0的区域就是每行之间相隔的距离。通过以下规则就可以找出每一行文字的起始点和终止点,以定位该行文字区域:
①如果前一个数为0,则记录第一个不为0的坐标。
②如果前一个数不为0,则记录第一个为0的坐标。形象的说就是从出现第一个非空白行(开始有字)到出现第一个空白行(没有字)这段区域就是文字存在的区域。
纵向扫描与横向扫描同理。

考虑到古代手写体文字是按列排布的,所以算法的基本思路要修改为:
①竖向扫描,切出每一列。
②对每一列进行横向扫描,得出每一个字。
根据实验步骤,以及源码的运行结果,我粗略地估计该算法对目标图像的处理效果:
该算法对于数字切割十分理想,但是对于汉字会存在切割失败的现象,例如说部分汉字两两之间是连在一起的,纵向扫描算法无法准确切割,这会导致切割结果出现文字连接在一起的情况。

考虑到目标数据集的特征,归纳出以下问题亟待解决:
①手写字体本来就容易出现文字的连笔情况,这会导致算法的第二步横向扫描会出现与链接中作者遇到的一样的问题,即切割结果出现文字粘连的情况。
②按列扫描数据集无法切割成功,这是因为数据集中的文字虽然是按列分布的,但是由于不够规范,列与列直接不是垂直分布的,所以竖向扫描的时候根本无法把每一列切割出来,即使切割出来了,由于文字黏连的情况也无法把单个文字摘出来。
③由于数据集是采集字古代手写文书,无法避免的有不规则的墨迹作为黑色部分存在于二值图中,这更会增加横竖向扫描分割的难度。
以上提出的三个问题充分表名了该算法无法满足切割目标数据集的需要,我们还可以得出以下结论供之后在寻找文字切割算法中规避没必要的精力浪费,即一般的计算机编码的汉字或者非手写体的文字切割算法都不会适用于目标数据集,同时,一般的横向竖向扫描分割算法也不适合与目标数据集。
故尝试一以失败告终。
提出以下尝试方向:
个人觉得很难直接找到一种成熟算法对原数据集进行处理,这是由于手写体极其难以辨别的特点,为了充分利用尝试一种的成果,可以做出以下改进:
①重新制作数据集,既然根据该算法无法成功分列,那么就制作以列为单位的数据集,数据集的宽度尺寸尽量保持一致,长度尺寸随意,这是为了保证数据集的一致性,这样做的好处还可以缩小数据集中图像的尺寸规避无效墨迹的干扰。
②如果我们采用以列为单位的数据集,那么原算法不需要有太大的删减工作,因为以列为单位的数据集直接省去了算法的第一步竖向扫描,或者竖向扫描的结果与原来保持一致。
③针对文字连笔情况,这需要对算法进行改进,改进策略不再是按行扫描分割文字,而是设置切割窗口解决文字连笔情况,因为文书是出自于同一个人的手笔,同一张图像的文字的大小不会相差过大。

基于形态学的切割算法

与投影法的思路一致,只不过处理对象不同,之前处理的是电脑生成的汉字,而在该论文中处理的是碑帖图像
引用:[1]孙进. 碑帖图像文字切割方法研究[D].天津大学,2019.DOI:10.27356/d.cnki.gtjdu.2019.003583.

图像校正

增强处理(亮度、对比度、锐度)以增强文字轮廓与背景的区分度
图像灰度化和二值化处理,转化为白底黑字图像
图像缩放至固定尺寸做形态学运算

  • 投影获取候选区四个顶点坐标
  • 坐标扩充
  • 坐标变换
    主要是选择二值化处理方法,阈值的选择采用OTSU最合适

图像切割

类似于投影法+形态学参数固定

图像降噪

主要是对小噪点进行去除,使用中值滤波效果最佳

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

so.far_away

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值