当前位置:首页 期刊杂志

基于OpenCV形态学的发票定位研究*

时间:2024-05-04

谢 阳 程艳云

(南京邮电大学人工智能学院、自动化学院 南京 210000)

1 引言

通常可借助发票的两个特点来进行定位:发票矩形框和发票打印字符。其中利用发票矩形框定位可以充分利用发票表格框线规整的特点来进行表格框线检测并输出坐标进行定位。刘长松[1],白伟[2]等提出,以增值税发票矩形框作为定位基准,利用矩形框两条平行的横线和竖线,通过投影法确定它的四个顶点来实现矩形框的定位。对发票进行版面分析,根据矩形框与各项目区域相对位置固定的特点,确定各项目区域的位置。该方法容易受到印章等因素的影响,若矩形框上有印章,则使用投影法定位速度无法保证并且靠投影波形定位矩形框容易失败。为了消除印章影响,文献[3]提出,使用直线表达式,计算出矩形框四条直线的焦点,即可确定矩形框的四个顶点。通过检测发票矩形框来实现定位,方法简单容易实现,但是容易受到发票平整度的影响,并且需要计算直线方程和交点,影响检测速度。宫义山等[4~5],刘洋[6],陈超[7]等出了基于模板匹配的发票定位算法,利用母版发票对待定位发票进行平方差匹配,不过这种方法由于需要提供模板发票并计算相关系数等多个参数,在没有模板的情况下无法实现,而且在活动匹配时最佳匹配点不能完全吻合,所以会影响定位速度和准确性。

随着越来越多的学者把精力放在如何把文字从复杂场景提取出来,因此除了利用发票矩形框进行定位之外,场景文本检测技术也可被应用于发票文本提取。场景文本检测是指将图像中包含文本的区域提取出来,一般可分为三种方法:基于纹理的方法,基于连通域的方法和基于纹理与连通域相结合的方法[8~9]。不过这些方法都是基于自然场景的文本区域定位方法,没有充分利用发票的标准规格特性,这样使得在发票文本提取中没有很高的效率。

在参考其他票据定位算法的基础上,基于专利定位方法[10]的基础上,通过观察发票的框线特征提出一种基于形态学的定位算法,等高线检测效果图如图1。

该定位算法具体操作如下:

1)对待处理发票进行常规预处理,包括灰度二值化,反转等;

(7)外卖市场:近几年随着美团、饿了么等外卖软件的兴起,越来越多的商家开始入驻外卖平台,学生的外卖需求也日益增大。

2)运用水平和垂直结构元分别对发票进行一维开操作;

3)图片加权合并,输出框线坐标集;

4)运用List筛选计算得到右下角坐标,然后以它为基准点计算待识别区域坐标;

5)裁剪识别区域。

整个定位流程图如图2。

图2 方法流程图

2 图片预处理

发票的预处理是发票识别前的一个规范化操作,在此进行发票的一些特殊处理即图片矫正,二值化,高斯去噪。

2.1 图片矫正

虽然我们在扫描发票时尽可能摆正,但是仍然无法完全避免图像倾斜的情况,为了避免因发票倾斜导致的定位不精确,我们需要在定位前对发票扫描图片进行矫正。

本次矫正运用到了边界跟踪[11]的方法进行发票图片轮廓提取,其次利用Susan角点检测算法[12]。

1)在待矫正图像上放置一个37个像素的圆形模板,模板在图像上滑动,依次比较模板内各个像素点的灰度与模板核的灰度,判断是否属于USAN区域。判别函数如下:

2)统计圆形模板中和核心点有相似亮度值的像素个数n(r0):

D(r0)是r0为中心的圆形模块。

3)使用如下角点响应函数。若某个像素点的USAN值小于某一特定阈值,该点被认为是初始角点,其中,g可以设定为USAN的最大面积的一半。

再利用Hough变换进行直线检测,Hough变换将笛卡尔坐标空间中的线变换为极坐标空间中的点。基本原理如下[13~14]。

在直角坐标系中,一条直线可以表示为

式中:k和b是待定参数,分别是斜率和截距。如果ρ为原点到直线上某点的距离,与x轴的正向夹角为θ,且θ∊[-90°,90°]。直线可表示为

利用直角坐标系与极坐标空间的点线对偶关系来实现直线检测,效果如图3。

图3 图片矫正效果图

2.2 二值化

初步二值化的主要目的是将发票的背景和发票图像中的主边框分离,由于背景灰度值和边框灰度值相差一般很大,因此此处二值化时所使用的阈值并非一个非常严格的值,可以简单地对当前票据进行灰度统计,选取与背景和边框相应的灰度峰值,使用调和方法得到一个合适的值为背景和边框的分界值。

图4 二值化处理效果

3 形态学处理和等高线加权

腐蚀与膨胀是灰度图像的初等形态学运算[15]。用B(x)代表结构元,E被定义为图像空间。B为具有原点的结构元素,腐蚀的定义为

用B腐蚀E就是B完全包含在E中时,B的原点位置的集合。膨胀的定义为

一维开操作即对利用一维结构元SE对图片进行先腐蚀再对结果进行膨胀的的形态学操作,腐蚀和膨胀结构元的选取很重要,在此我们选取一维矩形结构元,设图片长度为L,参数ð,在垂直等高线检测时结构元选取为(1,EH)即宽为1,长为EH,在水平等高线检测时选取(EH,1),EH参数为一个特定的参数选取不固定,它取决于文本图像的平均字符高度,因此我们进行平均字符大小估计,在此提出一种基于计算周边矩形连接元素高度的自动估计平均字符高度的方法,步骤如下:

1)选取一个随机像素p(x,y),且它四个相邻像素中至少有一个背景像素;

2)从像素p(x,y)开始,我们沿该像素连接的矩形元素轮廓进行操作;

3)重复1)、2)步,直到我们拥有最大的样本量,并计算出像素周边矩形连接元素的高度值集H;

4)取H中的最大值计为EH,这就是平均字符高度,示例如图5所示。

图5

本文算法是利用已经选取的一维结构元对图片进行开操作,分别迭代3次,由此可得到水平和垂直的等高线图片,如图6所示,图6(a)为水平结构元卷积后得到的垂直等高线,图6(b)为垂直结构元卷积后得到的水平等高线。

图6 水平和垂直的等高线

得到这两张等高线图片后,我们利用图片加权算法进行Addweight,设置两个图片的权值相等,合并加权后,为使表格框线更加清楚,在此我们再次选取3*3结构元对加权合并后的图片进行卷积。卷积后对图片按位取反得到图7,图7就是完整的发票表格线框架。

图7 合并加权后得到的发票表格框线

4 坐标获取

在得到发票表格框线图后,利用OpenCV库将坐标集以List方式进行输出,取得每条直线段的顶点坐标集,坐标集以(x,y)坐标对形式存储,如图8所示。

图8 坐标散点图

将含有坐标集的多维数据进行降维成一维数组,取得其中最大的数即右下角的横坐标,再进行奇数索引筛选取最大值得到右下角的纵坐标,这样就获得了右下角的坐标,通过以上方式获得的(x,y)就是基准点坐标。再通过基准点坐标获得待识别区域的坐标并进行剪裁得到待识别区域图片。

5 实验验证

本文代码采用Python及其相关库进行编写,该系统用52张标准的印刷体电子税发票作为样本,在不需要模板的情况下分别与投影法,直线检测法进行对比,对比结果如表1。

表1 对比结果

定位后的裁剪示例如图9。

图9 定位后的裁剪示例

以上都可以通过本文算法准确快速定位到需要识别的区域。

6 结语

本文中提出的基于OpenCV形态学的发票定位技术,利用结构元水平和垂直双卷积,再加权合并,从而定出发票的表格框线,并在确定框线后直接输出框线坐标,通过坐标筛选找到基准点,有效提高了定位准确率和速度。这种方法排除了印刷体文字和发票上其他标识造成的定位困难,直接定位到发票表格内区域,而且不需要额外提供模板,从这种意义上讲,该技术是非常通用的。特别是在中国,这种印刷体发票种类很多并且使用频繁,这种基于等高线检测的发票识别方法有较大的应用价值。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!