一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种针对三线表的表格结构识别的方法、设备和存储介质

2022-12-06 22:35:15 来源:中国专利 TAG:


1.本发明涉及图像处理技术领域,尤其涉及一种针对三线表的表格结构识别的方法、设备和存储介质。


背景技术:

2.光学字符识别ocr (optical character recognition)技术的发展解决了将图像中的文字信息转化为机器可读字符的任务,但表格是一种特殊的文字信息载体,单元格的信息具有相关性,不能单纯用ocr技术读取表格信息。因此提取表格结构是提取表格信息的必要任务。
3.现有基于传统图像处理的表格结构识别技术大多针对单元格全封闭的表格,难以识别三线表尤其是水平线长短不一的复杂三线表。基于深度学习的表格结构识别算法对于单元格的检测,由于空白单元格等干扰,常存在单元格漏检的现象。且深度学习的方法对于数据依赖性较强,需要大量训练数据;深度学习模型往往占用大量内存,预测速度通常较慢。
4.申请号为cn202010882990.1的中国专利公开了一种纸质表格结构自动识别的方法及装置。该方法遍历表格的交叉点,对交叉点进行分组、过滤、排序等处理,生成单元格集合,从而得到表格结构;但该方法涉及的是实线、封闭的表格识别,对于开放的不封闭的诸如三线表的表格识别却不适用,通用性欠佳。
5.申请号为cn202010432633.5的中国专利公开了一种表格结构还原方法、装置、设备、系统和可读存储介质。该方法采用基于深度学习的方法,训练两个模型分别检测表格的行和列,结合字符所在的行列信息还原表格结构。该方法需要使用两个模型进行预测,采用基于深度学习的方法,内存消耗较大,效率低;虽然未对表格线做出要求,但不适用于复杂表格。


技术实现要素:

6.针对上述问题,本发明提供了一种针对三线表的表格结构识别的方法、设备和存储介质,解决了三线表的结构识别,也能解决某条表格线的上下方单元格列数不一致的复杂三线表结构识别。通过本发明,可以更准确、更通用地识别出三线表的结构。
7.为了解决上述问题,本发明提供如下的技术方案:一种针对三线表的表格结构识别方法,包括如下步骤:s1:读取含三线表的待识别图片,进行预处理;所述三线表的水平表格线长度为等长或不等长;s2:将经过所述预处理的三线表图片转化为取反二值化图像;具体来说,读取待识别三线表的图片,转为灰度图,进行二值化处理得到二值化图像img_bin,对二值化图像的每个像素做取反操作,得到取反后的二值化图像img_inv;s3:对所述取反二值化图像img_inv进行形态学处理,此处为水平腐蚀膨胀操作,
得到水平表格线图像img_horizontal_lines,同时得到水平表格线位置信息;s4:将所述二值化图像的像素和所述水平表格线图像的像素进行逻辑或操作,得到无表格线图像;s5:对所述无表格线图像img_bitor分别进行水平腐蚀操作和垂直腐蚀操作,并将所述水平腐蚀操作和所述垂直腐蚀操作的结果合并,得到初始单元格掩膜img_cell;s6:遍历水平表格线,根据表格线长度,再次分割单元格,得到最终单元格掩膜img_cell;s7:计算所述最终单元格掩膜中单元格行列序列信息、所占行列数信息以及单元格框坐标信息的集合,得到代表三线表的表格结构。
8.优选地,所述预处理包括:采用霍夫变换的算法,对所述待识别图片进行角度矫正。
9.优选地,所述s3包括:对所述取反二值化图像先进行迭代三次的水平腐蚀操作,再进行迭代四次的水平膨胀操作,得到所述水平表格线图像img_horizontal_lines,仅保留水平表格线;获取所述水平表格线图像中水平表格线在xoy坐标系的坐标及宽、高信息;所述xoy坐标系的原点为图像左上角,y轴由上至下为正;将所述水平表格线按照y轴坐标从小到大排列。
10.优选地,所述s5包括:获取所述无表格线图像的图像宽度img_width,应用大小为(2*img_width,kernel_h) 的核对所述无表格线图像进行水平腐蚀操作,得到图像img_horizontal;获取所述无表格线图像的图像高度img_height,应用大小为(kernel_w, 2*img_height)的核对所述无表格线图像进行垂直腐蚀操作,得到图像img_vertical;其中,kernel_h根据表格行间距设置,通常取kernel_h=3, kernel_w根据表格列间距设置,通常取kernel_w=10;将所述图像img_horizontal和图像img_vertical按相同权重合并,对合并后图像的像素进行取反操作,再应用预设大小的核,如大小为(2, 2)的核进行两次膨胀操作,然后对像素进行取反操作,得到所述初始单元格掩膜img_cell。
11.优选地,所述s6包括:步骤6.1:按顺序遍历步骤3所述水平表格线;如果所有水平表格线长度相等,则以所述初始单元格掩膜为最终单元格掩膜;如果出现比第一条水平表格线短的水平表格线,则对当前表格线上方和下方的水平长度范围内的单元格列数进行重新分割;即,以第一条线长度作为表格总宽度的基准,若存在比第一条线更短的线,则认为该表格线的上下方可能存在列数不等的单元格,此时要对该表格线长度范围内的单元格列数重新切分;步骤6.2:以当前水平表格线的长度为宽,当前水平表格线与上一条水平表格线的距离为高,确定一个位于该水平表格线上方的待分割区域;以当前水平表格线的长度为宽,当前水平表格线与下一条水平表格线的距离为高,确定一个位于该水平表格线下方的待分割区域;步骤6.3:对2个所述待分割区域(图像img_bitor中的目标区域)分别进行水平投
影和垂直投影;分别遍历水平和垂直投影列表,在投影值发生突变时,即投影值由0突变或突变为0时记录坐标,得到坐标集合cells_x和cells_y,其中,每两个相邻的坐标点为一段连续投影的起止点,若相邻两个连续投影间隔小于一定阈值,则删去邻接的两个坐标点,通常阈值可以取20,此时邻接的两个坐标点可以被认为是同一个连续投影;步骤6.4:遍历集合cells_x和cells_y,得到所述待分割区域内所有单元格的坐标;更新待分割区域的单元格的掩膜img_cell;步骤6.5:重复步骤6.1至步骤6.4直至遍历完所述水平表格线,得到所述最终单元格掩膜。
12.优选地,进所述s7包括:检测所述最终单元格掩膜img_cell的单元格轮廓,获得每个单元格的左上角坐标(x_min, y_min)和宽高信息(w,h);创建单元格集合boxes,所述单元格集合boxes包含每个单元格信息box(x_min, y_min, w, h);在所述单元格集合boxes中的所述单元格信息box按照y_min升序排列;将所述单元格集合boxes中的所有单元格按行划分,基于表格总行数n建立对应每一行表格的n个集合row,以每一行的单元格为对应的集合row中的元素,以所有的集合row为集合rows的元素;此处先把集合中的第一个单元格分到第一行中,遍历之后的所有单元格,比较当前单元格与前一个单元格的y_min,判断是否为同一行,把同一行的单元格分到同一个集合row,把不同行的集合row组成新的集合rows,其中集合rows的大小即为表格总行数i;遍历集合rows,计算每行单元格数量,取最大的单元格数量作为表格总列数m,并取最大的单元格数量所在行的所有单元格的x_min坐标,作为每一列起始x轴坐标,得到集合column_x,其中集合column_x的大小为m;创建一个n行m列的二维集合bounding_boxes;遍历集合rows的所有集合row,在任一集合row中,遍历所有单元格,比较任一单元格的x_min与每一列起始x轴坐标的差,取差的最小值对应的集合索引作为当前单元格所在的列,然后把该单元格的box信息赋给集合bounding_boxes的对应行列位置处;由于集合bounding_boxes中的某些行列位置可能存在空集,故遍历集合bounding_boxes,根据当前单元格周围的空集分布,计算出每个单元格所占的行数和列数,得到单元格所有信息,包括:单元格起始的行列(row, column)、单元格所占的行列数(row_num, col_num)、单元格的左上角坐标(x_min, y_min)以及单元格的宽和高(w, h);全部单元格所有信息构成集合cells,以集合cells为三线表的表格结构;所有信息为cell(row, column, row_num, col_num, x_min, y_min, w, h)。
13.一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过所述总线通信,所述机器可读指令被所述处理器执行时执行所述的针对三线表的表格结构识别方法。
14.一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机可执行指令,所述计算机可执行指令被处理器加载并执行时,实现所述的针对三线表的表格结构识别方法。
15.本发明提出一种针对三线表的表格结构识别的方法、设备和存储介质,针对三线
表包括由多条水平线构成的表格,通用性更强,提高了对于各种类型的三线表结构识别的准确率,有效减少了单元格漏检、多检的问题;本发明生成的表格结构结果包含的信息完整、具体,有利于后续的表格结构还原等处理;采用非数据驱动的方法,无需大量数据,运算量小。通过本发明,可以更准确、更通用地识别出三线表的表格结构。
附图说明
16.为了更清楚地说明本实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单介绍,显而易见地,下面描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
17.图1为本发明实施例中的三线表结构识别方法的流程示意图;图2为本发明实施例中待识别的复杂三线表的样图;图3为本发明实施例中处理后的无表格线的三线表样图;图4为本发明实施例中步骤150的流程示意图;图5为本发明实施例中步骤152完成后的img_horizontal图;图6为本发明实施例中步骤153完成后的img_vertical图;图7为本发明实施例中单元格初步分割后的初始单元格掩膜图;图8为本发明实施例中步骤160的流程示意图;图9为本发明实施例中单元格完成分割后的最终单元格掩膜图;图10为本发明实施例中步骤170的流程示意图;图11为本发明实施例中一种电子设备的结构示意图。
具体实施方式
18.为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式做进一步的详细描述。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。
19.如图1所示,本发明提供的一种针对三线表的表格结构识别方法,基于图像识别实现,包括如下步骤:步骤110:获取含三线表的待识别图片,进行预处理矫正。
20.进一步地,所述步骤110具体包括:采用霍夫变换的算法,对原图像进行角度矫正;本实施例中,先对图像进行霍夫变换检测出图中的直线,再计算这些直线的倾斜角,根据倾斜角进行旋转矫正。
21.步骤120:待识别三线表的图片文件如图2所示,转为灰度图,进行二值化处理得到二值化图像img_bin,对二值化图像的每个像素做取反操作,得到取反后的二值化图像img_inv;本实施例中的待识别的图像中仅含三线表,或仅由水平表格线构成的表格。表格结构样式不作限定,水平表格线可以等长,也可以不等长;表格线上下方的单元格列数可以不等;进一步地,经二值化处理后的图像img_bin为白色背景黑色字符,反色处理后得到
的图像img_inv为黑色背景白色字符。
22.步骤130:对img_inv进行水平腐蚀和膨胀操作,得到水平表格线位置信息及图像img_horizontal_lines;进一步地,获得水平表格线位置信息及图像的具体过程为:获取图像宽度img_width,应用大小为(0.02*img_width, 1)的核对图像依次进行三次腐蚀操作、四次膨胀操作,得到仅保留水平表格线的图像img_horizontal_lines;对图像img_horizontal_lines使用轮廓检测,并获取轮廓外接矩形,得到水平表格线的左上角点的坐标及宽高信息,并根据左上角点的y轴坐标从小到大排列,得到集合lines。
23.步骤140:对二值化图像img_bin和水平表格线图像img_horizontal_lines进行像素或操作,得到合并后无表格线的表格图像img_bitor,如图3所示;本实施例中,得到的图像img_bin背景为白色,表格线和字符为黑色;得到的图像img_horizontal_lines中背景为黑色,仅保留了对应位置的白色表格线,对两幅图像逻辑或操作后,得到背景为白色,且仅保留黑色字符的图像img_bitor。
24.步骤150:对无表格线表格img_bitor分别进行水平腐蚀操作、垂直腐蚀操作,合并后得到初始单元格掩膜img_cell。具体流程如图4所示,具体如下:步骤151:获取图像宽度img_width,图像高度img_height;步骤152:应用水平核对无表格线表进行水平腐蚀,得到img_horizontal;所述水平核大小为(2*img_width,3);如图5所示;步骤153:应用垂直核对无表格线表进行垂直腐蚀,得到img_vertical;所述垂直核大小为(10, 2*img_height);如图6所示;步骤154:按各0.5的相同权值融合img_horizontal和img_vertical,得到img_cell;步骤155:对图像img_cell进行逻辑取反;步骤156:应用大小为(2, 2)的核进行两次膨胀操作;步骤157:对膨胀操作后的图像img_cell进行逻辑取反;步骤158:再进行二值化处理,只保留字符像素所在区域,得到初始单元格掩膜img_cell,如图7所示。
25.步骤160:遍历水平表格线,根据表格线长度,针对复杂的三线表进行进一步的单元格分割,得到最终单元格掩膜img_cell。具体流程如图8所示,实施步骤如下:步骤161:遍历水平表格线lines;步骤162:如果遍历完成,则转至步骤168;否则,下一步;步骤163:当前表格线长度短于第一条线;以第一条线长度作为表格总宽度的基准,若存在比第一条线更短的线,则认为该表格线的上下方可能存在列数不等的单元格。此时要对该表格线长度范围内的单元格列数重新切分。
26.步骤164:以当前表格线为宽确定重新分割的表格区域;以该表格线的长度为宽,与该表格线相邻的上方一条线的距离为高,确定一个位于该表格线上方的待分割区域;以该表格线的长度为宽,以该表格线与底部表格线的距离
为高,确定一个位于该表格线下方的待分割区域。
27.步骤165:对该区域像素在水平和垂直两个方向投影;对图像img_bitor中的待分割区域分别进行水平投影和垂直投影操作,若待分割区域某一像素值为0,则认为是单元格中的黑色字符,其对应的坐标的投影值加1。分别遍历水平和垂直投影列表,在投影值由0突变或突变为0时,记录坐标得到坐标集合cells_x和cells_y。其中,每相邻两个坐标点为一段连续投影的起止点。
28.步骤166:通过投影筛选并记录单元格在水平和垂直两个方向上的坐标;遍历集合cells_x进行筛选。若相邻两段投影的间距小于等于20个像素,则认为这两段投影属于一个单元格内。因此删除前一段投影的终止点和后一段投影的起始点;若相邻两段投影的间距大于20个像素,则认为这两段投影不属于一个单元格,并取间距的中点作为分界点,以适当间距重新分配前一段投影的终止点和后一段投影的起始点。最终得到处理后的集合cells_x;遍历集合cells_y进行筛选。若相邻两段投影的间距小于等于6个像素,则认为这两段投影属于一个单元格内。因此删除前一段投影的终止点和后一段投影的起始点。最终得到处理后的集合cells_y;对于集合cells_x每相邻两个点,代表待分割区域内某一列单元格的起止坐标。对于集合cells_y每相邻两个点,代表待分割区域内某一行单元格的起止坐标。因此通过遍历集合cells_x和cells_y,可以得到待分割区域内所有单元格的坐标。
29.步骤167:在待分割区域根据单元格坐标绘出单元格掩模;根据待分割区域内所有单元格的坐标修改单元格掩膜图像img_cell,结果如图9所示。
30.步骤168:返回结果,获得最终单元格掩膜img_cell。
31.步骤170:计算单元格行列序列信息、所占行列数信息以及单元格框坐标信息集合,代表三线表的表格结构,具体流程如图10所示。
32.步骤171:检测单元格轮廓,获取轮廓信息;检测单元格掩膜图像img_cell中的轮廓,确定img_cell中每个单元格的左上角坐标和宽高信息box(x_min, y_min, w, h);计算单元格平均高度mean_height。
33.步骤172:将单元格按从上到下排列;根据单元格左上角点的y轴坐标y_min从上到下排列,得到单元格集合boxes;所述单元格集合boxes包含每个单元格信息box(x_min, y_min, w, h)。
34.步骤173:根据y_min,计算单元格行位置;对boxes中的所有单元格按行划分。先把集合中的第一个单元格分到第一行中,遍历之后的所有单元格,比较当前单元格与前一个单元格的y_min,若满足cur_y 《= pre_y 0.5*mean_height,则认为当前单元格与前一个单元格为同一行。其中cur_y为当前单元格y轴坐标,pre_y为前一个单元格y轴坐标,mean_height为单元格平均高度。更新单元格信息box为box(row,x_min, y_min, w, h),接着把同一行的单元格分到同一个集合row,把不同行的集合row组成新的集合rows,其中集合rows的大小为表格总行数i。
35.步骤174:根据x_min,计算单元格列位置;遍历集合rows,计算每行单元格数量,取最大的单元格数量作为表格总列数j,并
取该行所有单元格的x_min坐标,作为每一列起始x轴坐标,得到集合column_x,其中集合column_x的大小为j;在当前行集合row中,遍历所有单元格,比较当前单元格的x_min与每一列起始x轴坐标的差,取差的最小值对应的集合索引作为当前单元格所在的列,更新单元格信息box为box(row,column,x_min, y_min, w, h)。
36.步骤175:根据单元格行数和最大列数构建二维集合;创建一个i行j列的二维集合bounding_boxes;遍历集合rows的所有行,然后把该单元格的box信息赋给集合bounding_boxes的对应行列位置处。
37.上述步骤执行完成后,集合bounding_boxes中的某些行列位置可能存在空集。遍历集合bounding_boxes,先遍历二维集合bounding_boxes的行,再遍历列,根据当前单元格周围的空集分布,计算出该单元格所占的行列数。对于每一行中的每个单元格,向右向下搜索,判断是否存在仅该单元格为非空的矩形区域,若存在,则记录该区域的列数和行数,并用特定元素将空集填充,防止重复。具体步骤如下:步骤176:遍历二维集合的行;步骤177:如果遍历完成,转至步骤187;否则,下一步;步骤178:遍历当前行的所有单元格;步骤179:如果遍历完成,转至步骤176;否则,下一步;步骤180:将当前单元格视为目标单元格,向下检测同一列的一个单元格是否为空;步骤181:如果当前单元格为空,下一步;否则,转至步骤183;步骤182:目标单元格所占行数加1;转至步骤180;步骤183:由当前单元格,向右检测同一行的一个单元格是否为空;步骤184:如果当前单元格为空,下一步;否则,转至步骤178;步骤185:如果目标单元格所在行的列内其他单元格为空,则下一步;否则,转至步骤183;以当前单元格的列索引与目标单元格所在的所有行索引确定单元格,若这些单元格为空,则认为目标单元格所占列数加1;步骤186:目标单元格所占列数加1,转至步骤183;步骤187:返回单元格结构;所述单元格结构增加了该单元格所占据的行数量和列数量,更新单元格信息box为box(row,column, row_num, col_num,x_min, y_min, w, h)。
38.通过上述步骤,可以得到单元格的所有信息box(row, column, row_num, col_num, x_min, y_min, w, h);其中(row, column)表示单元格起始的行列数,(row_num, col_num)表示单元格所占的行列数,(x_min, y_min, w, h)表示单元格检测框的坐标以及宽高信息。最终生成单元格集合cells,所述集合cells代表表格结构。
39.通过以上实施例的实施,不难发现,本发明提供的方法解决了三线表的结构识别,特别是解决了某条表格线的上下方单元格列数不一致的复杂三线表的结构识别。通过本发明,可以更准确、更通用地识别出三线表的结构。
40.图11为实现本技术实施例所提供的一种电子设备的结构示意图。如图11所示,所述电子设备200包括处理器201、存储器202和总线203。
41.所述存储器202存储有所述处理器201可执行的机器可读指令,当电子设备200运行时,所述处理器201与所述存储器202之间通过总线203通信,所述机器可读指令被所述处
理器201执行时,可以执行如上述图1至图10所示实施例中的一种针对三线表的表格结构识别的方法,具体实现方式可参见实施例,在此不再赘述。
42.本技术实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时可以执行如上述实施例中的一种物联网边缘网关的数据预处理方法,具体实现方式可参见实施例。
43.以上为本发明的部分实施例,尽管本发明的内容已经通过上述部分实施例做了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献