基于Sobel算子的银行卡号识别研究*

2021-09-15 08:35徐毓凯杨国平
计算机与数字工程 2021年8期
关键词:算子灰度轮廓

徐毓凯 杨国平

(上海工程技术大学机械与汽车工程学院 上海 201620)

1 引言

随着社会和互联网技术的飞速发展,网上银行已逐渐成为人们日常生活不可或缺的一部分。移动支付也成为目前社会主流的消费方式[1],比如微信支付、支付宝等。随之我们会将银行卡和各种移动支付软件进行绑定。在实际绑定过程中,目前的常用方式大多还是用户自己手动输入银行卡号码,然而手动输入十几位银行卡号很慢且容易出错,并且对部分视力不佳的中老年人很不友好,影响用户体验。因此,银行卡卡号的自动识别功能将会给人们带来很大的便利。

虽然目前的字符识别技术发展已较为成熟,比如文本识别[2~4]、车牌识别等[5~6],但银行卡识别技术还没有广泛应用于各大移动支付平台中。针对这一问题和现状,本文提出了一种基于Sobel算子的银行卡识别算法。首先用基于Sobel边缘检测的方法提取银行卡轮廓,然后获取银行卡卡号的数字区域,最后对数字区域的银行卡号进行识别。

2 Sobel边缘检测

Sobel算子是图像处理中的算子之一[7~10],在影像处理和计算机视觉领域中常被用来做边缘检测。Sobel算子最早由美国科学家Irwin Sobel和Gary Feldman于1968年在史丹佛大学的人工智能实验室(SAIL)提出。为了纪念他们所做的贡献,用他们的名字命名了该算子。概念上,Sobel算子就是一个小且是整数的滤波器对整张图片在水平及垂直方向上做卷积,因此它所需的运算资源相对较少。另一方面,对于图像中频率变化较高的地方,它所得的梯度的近似值也比较粗糙。

目前在银行卡的轮廓提取中较为常用的方法为基于Canny算子的边缘检测[11~13],Canny算子的运用场景较多,它其中有很多参数,通过对这些参数的变化会对算法的性能产生影响。本文的银行卡轮廓定位利用Sobel算法替代Canny算法。获取数字区域过程中采用增强对比度再利用特定阈值获取数字区域替代了之前Canny算法的边缘检测。虽然Sobel算法只能检测水平和垂直方向的边缘,对于纹理较为复杂的图像,其边缘检测效果不是很理想,但是对于银行卡数字识别来说,边缘纹理并不是很复杂,用Sobel算子进行边缘检测反而计算简单,速度快。图1为对原始灰度图像分别基于Canny算子和Sobel算子所做的边缘检测图。

图1 Canny和Sobel边缘检测比较

Sobel算子做平面卷积的原理按所示方程(1)计算:

分别可得到水平和竖直两个方向的亮度差分近似值。其公式如下:

其中A是指原图像,Gx及Gy是指对水平和竖直两个方向的计算。然后通过式(4)可以对图像的梯度值进行计算。

3 实验过程

3.1 提取银行卡轮廓

一般来说,我们生活中手机识别到的银行卡都不是直接的灰度图像(如图2),图像处理过程中我们会分别对彩色图像的三个颜色通道进行处理,计算量会很大且影响识别过程的速度,因此需要对彩色图像进行灰度处理。如图3为对彩色银行卡灰度处理后的图像。

图2 彩色银行卡图像

图3 灰度处理图像

然后我们需要对灰度图像进行顶帽操作。顶帽运算也被称为“礼帽”运算,它为原图像与图像作“开运算”的结果图之差。其中开运算就是对图像进行先腐蚀后膨胀的过程,一般可以用来对图像边缘进行平滑处理,消除一些小的毛刺和干扰。如图4则为对图3进行顶帽操作后的图像。

图4 顶帽操作后的图像

顶帽操作之后,我们就会用Sobel算子进行边缘检测,由于银行卡边缘背景信息比较简单且具有一定的规律性,因此本文只对x轴方向进行了Sobel算子边缘计算得到了待识别银行卡的轮廓(见图5),通过后文实验可以看出只做x轴方向的Sobel计算边缘检测效果也比较理想,并且计算简单,效率高。

图5 sobel边缘检测

3.2 获取银行卡数字区域

通过上文的实验可以得到银行卡的轮廓信息,接下来我们需要获取银行卡数字区域。首先对银行卡轮廓图像进行闭操作(先膨胀,再腐蚀)将卡号数字连在一起(见图6),然后对图6进行二值化操作将目标区域和背景区别开来(见图7),接着计算轮廓信息找到图7中的所有轮廓得到图8。

图6 闭操作

图7 二值化

图8 目标区域轮廓

如图8得到的目标区域的轮廓我们可以看出已经找到的轮廓不仅包含数字区域,还包含一些例如银行名称,logo等一些干扰区域轮廓,因此我们需要从中排除这些干扰区域轮廓,得到只包含卡号数字的区域轮廓。经过筛选轮廓,我们得到了四组数字轮廓区域,如图9是得到的四组数字区域的其中一组。

图9 数字区域

3.3 银行卡数字识别

一般而言,银行卡卡号识别的方法有很多,常用的主要有:模板匹配识别法[14]、神经网络识别法[15]、特征统计匹配识别法等[16]。本文的研究对象一般只有十几位的阿拉伯数字,且每个数字0~9之间选择,分布具有很强的规律,且本文考虑的情况需要快速的识别出银行卡号信息,所以采用模板匹配字符识别法。

第一步要建立一个模版。首先导入一个包含0~9数字模板的图像(图10),将图像分别进行灰度处理和二值化(图11),然后找到图像的所有轮廓,遍历每一个轮廓,每一个数字轮廓对应每一个模板(图12)。

图10 包含模板数字图像

图11 灰度化及二值化

图12 数字模板

第二步将待检测银行卡数字区域的每一个数字轮廓与第一步的10个数字模板分别比较,计算每一个待检测数字与每一个模板的匹配得分,得分最高的模板即为待识别数字的正确模板。最终识别的结果如图13所示。

图13 识别结果

4 结语

随着互联网和移动支付技术的飞速发展,本文的研究对象也有着广泛的应用前景。目前对银行卡号识别的相关文献和参考资料非常少,一些开发出银行卡号识别技术的公司其识别技术及方法均未公开,银行卡号的识别技术研究依然具有一定的实用性。

本文在现有的常用的银行卡号识别技术上做了一些改善,将常用的Canny边缘检测方法改为了只做x轴方向的Sobel边缘检测,检测结果差别不大,但是计算简单,提高了识别过程中图像预处理的效率。另外,针对银行卡号具有固定字体的规律,使用模板匹配法对数字进行识别,也一定程度上节省了时间。与此同时,本文在一些方面仍有不足,需要进一步的改进。例如银行卡图像数据库涉及到个人隐私问题,本文并没有对大量真实的银行卡进行验证。另外,在识别过程中没有考虑银行卡使用过程中的磨损问题,实验对象采取的只是比较理想的图像。虽然本文具有一定的不足,但是仍为银行卡号识别提供了一定的参考意义。

猜你喜欢
算子灰度轮廓
航空滤光片阵列多光谱图像条带灰度调整算法
天津港智慧工作平台灰度发布系统和流程设计
Domestication or Foreignization:A Cultural Choice
Arduino小车巡线程序的灰度阈值优化方案
跟踪导练(三)
QK空间上的叠加算子
逼近论中的收敛性估计
儿童筒笔画
一种基于灰度分割的调焦评价函数
创造早秋新轮廓