欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    毕业论文-基于opencv的银行卡号识别.doc

    • 资源ID:13763789       资源大小:1.93MB        全文页数:20页
    • 资源格式: DOC        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    毕业论文-基于opencv的银行卡号识别.doc

    1、20本科毕业论文(科研训练、毕业设计)题 目:基于opencv的银行卡号识别姓 名:xxxx学 院:信息科学与技术学院系:自动化系专 业:自动化年 级:2009级学 号:xxxxxx指导教师(校内): xxxx 职称:讲师年 月 日目录摘要 3英文摘要 4引言 5第1章绪论61.1引言61.2银行卡号识别的研究现状61.3识别的目的和意义61.4 opencv开源图像库 71.5程序的模块7第2章图像预处理模块82.1引言82.2灰度化处理82.3二值化处理10第3章字符定位模块113.1引言113.2膨胀和腐蚀113.3轮廓提取133.4垂直投影14第4章字符分割模块164.1引言164.2

    2、字符分割164.3图像归一化17第5章 字符识别模块18第6章 结论19致谢语 20参考文献 20基于opencv的银行卡号识别摘要 银行卡号是由19位数字编号组成的一串号码。由于每一张银行卡的卡号都具有唯一性,所以通过确定银行卡卡号就可以识别银行卡,得到银行卡的相关信息。银行卡卡号的自动识别对实现银行卡的有效管理和进行银行卡的相关服务具有重要的理论意义和实际应用价值。本论文设计了一个银行卡卡号自动识别程序,这个程序基本上可以完成银行卡卡号的自动识别。该程序是在对图像进行图像预处理的基础上,对图像处理得到的二值图进行膨胀和腐蚀变换,利用X/Y方向投影定位卡号字符位置;采用投影法分割卡号字符并进

    3、行归一化处理;最后采用模板匹配法识别字符得到银行卡卡号。实验结果表明,程序具有较高的识别速率和准确率,并且具有一定的稳定性。关键词银行卡卡号 字符识别 模板匹配 图像处理Reasearch On Bank Card Number Identification Program Based On Template MatchingAbstractThe serial number of bank card is a number consists of 19numbers.As the serial number of each bank card is unique,so by the bank

    4、 card serial number we can be sure of the bank card and get the information of the bank card.The automatic recognition of bank card serial number has important theoretical significance and practical value to realize effective management of the bank card and bank card services.This paper designed a b

    5、ank card serial number automatic recognition program, this program can basically complete the automatic recognition of bank card serial number.The program is based on image processing of the image, the image processing of the two value image dilation and erosion using X/Y transform, the direction of

    6、 projection sequence number character position; the sequence number and character segmentation are normalized by projection method; finally, using template matching method to recognize character of bank card serial number. The experimental results show that, the program has a high recognition rate a

    7、nd accuracy, and has certain stability.Key Words bank card serial number; Character recognition; Template matching; Image processing引言随着国民经济的高速发展,银行卡的使用越来越频繁。每一张银行卡都有着它的一个唯一的19位编号,只要通过银行卡的卡号号码就可以确定相应的银行卡。所以,对银行卡卡号进行识别在进行银行卡服务时有着重要意义。传统银行卡服务时的人工识别银行卡号码太过费时费力。所以银行卡号的自动识别变得越来越重要。本文依据银行卡号字符的特点,研究并实现了一种基

    8、于模板匹配的银行卡号识别系统,可以快速而准确地识别银行卡号。该系统对研制或改进银行卡自动服务系统具有一定的指导作用和参考价值。第1章 绪论1.1引言银行卡号的识别涉及多个领域,包括模式识别、图像处理、计算机等多门学科,是一门综合性的应用技术。随着国民经济的高速发展,银行卡的使用越来越频繁。每一张银行卡都有着它的一个唯一的19位编号,只要通过银行卡的卡号号码就可以确定相应的银行卡。所以,对银行卡卡号进行识别在进行银行卡服务时有着重要意义。传统银行卡服务时的人工识别银行卡号码太过费时费力。所以银行卡号的自动识别变得越来越重要。本系统可以根据银行卡图片自动识别银行卡号码,可以广泛的应用在各个领域。1

    9、.2银行卡号识别的研究现状在图像字符识别方面,现在大多采用的是神经网络1、差别不等式2、模板匹配3等技术。神经网络具有推广能力、并行处理和自组织性等特性,因此它适合用于图像识别4。特别在图像进行特征提取和识别时,神经网络明显优于传统的识别方法5。目前使用最为广泛的神经网络是BP网,它对样本的识别率虽然很高。但网络训练比较麻烦,需要选择大量的样本才能保证最终的识别结果。同时,在实现过程中,由于受参数初始化的影响,它时常会无法收敛,或陷入局部极值。差别不等式需要每一张纸币的特征差别点和选取合适的阈值,这些需要专家根据经验来选择,因此具有较大的主观性。1.3识别的目的和意义本文根据银行卡号的特点,设

    10、计了一个基于模版匹配的银行卡号识别程序,经过实验发现,这个程序可以比较快速而准确地识别银行卡号,并且基本上可以保证银行卡号识别功能要求。本文通过对图像处理与模式识别中已有算法的分析研究,设计并实现了基于模板识别的银行卡号识别系统。不仅可以识银行卡号,其相关技术也可应用到车牌号码、护照号、身份证号或其他印刷体字符的识别。1.4OpenCV开源图像库本程序采用了在C+6.0上采用了OpenCV工具(OpenCV版本1.0)实现了银行卡号的识别。OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运

    11、行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效由一系列 C 函数和少量 C+ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。Opencv避免了VC代码对图像进行处理的繁琐细节,而且由于opencv包含大量的开源图像处理函数,可以方便的对其进行修改和应用,在保证精度的同时大大减少识别的时间。1.5程序的模块银行卡号的自动识别主要包含图1的几个模块。图1银行卡号识别流程图图像预处理模块是用来进行银行卡卡号识别的前期准备工作的模块。图像处理模块的要求就是把原始图像处理为适合后续模块处理要求的图像。一般用来去

    12、除图像中不需要的信息。字符分割模块是对预处理后的图像进行卡号字符的准确定位与分割,它是卡号识别系统中一个较为关键的模块,卡号定位与分割的准确与否将直接影响系统的识别率。字符分割的准确性依赖于卡号定位和图像的清晰度。如果图像中有着较为明显的干扰和噪声,二值化图像中可能出现字符粘连,需要特殊处理。字符定位是在分割出的图像中找到卡号各个字符所在位置并将其从中分离出来,为后面卡号字符识别作准备。特征提取的主要目的是从那些已分割出来的单个卡号字符图像中提取出用于区分不同字符的本质特征,用来识别。字符识别是在数字模板库中找到和待识字符匹配的字符。模板库是在银行卡号识别系统实现后创建的数字模板库。第2章图像

    13、预处理模块2.1 引言整个识别系统主要由图像预处理模块、字符分割模块、字符定位模块、字符识别模块几个模块组成。下面详细介绍这几个模块是如何用opencv的函数实现的。以一张编号为9559981090571602515的银行卡为例来介绍系统的整个识别过程。图像预处理模块是用来进行银行卡号识别的前期准备工作的模块。图像处理模块的要求就是把原始图像处理为适合后续模块处理要求的图像。本系统的原始图像采用RGB图像,系统的图像处理模块主要对原始图像进行灰度化、二值化等处理。银行卡原始图像如图2所示。图2 原始图像2.2灰度化处理图像灰度化处理就是将指定图像每个像素点的RGB三个分量通过一定的算法计算出该

    14、像素点的灰度值,使图像只含亮度而不含色彩信息。本程序中一开始得到的采集的银行卡图像是彩色图像,其中包含了大量颜色信息,但识别卡号并不需要关心这些颜色信息,这些颜色信息反而会对银行卡卡号的识别造成干扰并且颜色信息浪费了大量数据空间储存。所以可以通过对原始图像进行灰度化处理来去掉银行卡的颜色信息,这样有利于后续模块的处理并且可以节约大量的系统的存储空间。一般有以下四种方法对彩色图像进行灰度化。1)分量法将彩色图像中的三分量的亮度作为三个灰度图像灰度值,可根据需要选取一种灰度图像。f1(i,j)=R(i,j)f2(i,j)=G(i,j)f3(i,j)=B(i,j)其中fk(i,j)(k=1,2,3)

    15、为转换后的灰度图像在(i,j)处的灰度值。2.最大值法将彩色图像中的三分量亮度的最大值作为灰度图的灰度值。f(i,j)=max(R(i,j),G(i,j),B(i,j)3.平均值法将彩色图像中的三分量亮度求平均得到一个灰度值。f(i,j)=(R(i,j)+G(i,j)+B(i,j) /34.加权平均法根据重要性及其它指标,将三个分量以不同的权值进行加权平均。由于人眼对绿色的敏感最高,对蓝色敏感最低,因此,按下式对RGB三分量进行加权平均能得到较合理的灰度图像。f(i,j)=0.30R(i,j)+0.59G(i,j)+0.11B(i,j)本系统采取的方法是调用了opencv里灰度化函数cvCvt

    16、Color。该函数采用加权平均法,将银行卡彩色图像转为灰度图像。对原始图像处理得到的结果如图3所示。 2.3二值化处理在将原始图像进行灰度化处理后,对得到的灰度图像进行二值化处理。二值化处理就是将灰度图像转换为只包含黑色和白色两种颜色的图像,它们之间没有其他灰度的变化。在二值图中用255表示白色,0表示黑色。相对于灰度图,二值图可以大大压缩数据量,并且可以大幅度简化后续工作。图像二值化采用阈值分割来实现,即以一个合适的阈值将图像分为大于和小于阈值的两部分像素群,对应表示图像中的目标和背景,从而将目标从背景中分离出来。选取阈值的方法有多种。迭代法所得的阈值能有效的分割图像,区别目标和背景的主要区

    17、域所在,但是在图像的细微处的区分不是很好。经典Ostu6算法必须对所有的灰度值遍历计算类间方差,再通过比较得到最大方差,因此其运算大。Bernsen算法7实现速度慢,还会出现笔划间断和伪影等现象。由于本文中目标图像和背景在灰度上有明显差异,采用双峰法来确定最佳分割阈值。首先根据输入的数字图像作出反映这幅图像中的灰度级与出现这种灰度的概率之间关系的灰度直方图。直方图中出现了两个峰值,一个处于目标灰度区,另一个处于背景灰度区。这两个峰分别对应目标与背景数目较多的像素点,两峰之间的波谷对应边缘附近数目较少的点。在大量实验基础上,本系统选取阈值为37。然后,采用固定阈值法对图像进行二值化处理。将图3中

    18、的灰度图进行二值化处理得到的二值图如图4所示。图4 二值图第3章字符定位模块3.1引言字符分割模块是对预处理后的图像进行卡号字符的准确准确定位与分割,它是卡号识别系统中一个较为关键的模块,银行卡号定位与分割的准确与否将直接影响系统的识别率。本模块主要包括对银行卡号的定位、卡号字符定位、卡号字符分割、卡号字符图像归一化处理。银行卡号的定位是在整张图像中定位出卡号的位置,将其从背景图像中分离出来,便于后面从图像中分离出卡号字符。银行卡号字符定位是在已定位的银行卡号中找到银行卡号各字符所在位置,为后面字符分割作准备。字符分割是将银行卡号分割成19个单个的银行卡号字符图像。图像归一化是将分割成的单个的

    19、银行卡号字符图像规范成统一的大小且将银行卡号字符放置在图像的中心。3.2膨胀和腐蚀调用膨胀函数和腐蚀函数使银行卡卡号在X方向连成一整个黑色区域并消除一些二值图中干扰黑色区域。从图像处理角度看,二值图像的腐蚀和膨胀就是将一个小型二值图(结构元素,一般为3*3大小,本系统采用3*1大小)在一个大的二值图上逐点移动并进行比较,根据比较的结果作出相应处理。膨胀算法:用3*1的结构元素,扫描二值图像的每一个像素,用结构元素与其覆盖的二值图像做“与”运算,如果都为0,结构图像的该像素为0,否则为1.结果:使二值图像扩大一圈。腐蚀算法:用3*1的结构元素,扫描二值图像的每一个像素,用结构元素与其覆盖的二值图

    20、像做“与”运算,如果都为1,结构图像的该像素为1,否则为0.结果:使二值图像减小一圈。膨胀与腐蚀的处理效果就如其名字一样,我们通过膨胀连接相近的图像区域,通过腐蚀去除孤立细小的色块。通过这一步,我们将所有的银行卡卡号字符连通起来,这样为我们接下来通过轮廓识别来得到卡号区域做准备。由于字符都是横向排列的,因此要连通这些字符我们只需进行横向的膨胀即可。然后可以通过检测图片的轮廓得到卡号所处的区域并提取出来。将图4的二值图进行膨胀得到的图像如图5所示。图5 膨胀图经过上一步操作,理论上来说银行卡上的字符连通成一个矩形区域,我们可以发现出了卡号区域还有一些黑色区域,我们可以使用腐蚀变换来消除一些。对图

    21、5的图像进行腐蚀变换消除部分较小的黑色区域。图6 腐蚀图3.3轮廓提取通过轮廓提取我们可以定位卡号区域。OpenCV 里提取目标轮廓的函数是findContours,它的输入图像是一幅二值图像,输出的是每一个连通区域的轮廓点的集合:vectorvector。外层vector的size代表了图像中轮廓的个数,里面vector的 size代表了轮廓上点的个数。更为准确的说,经过上面的操作,我们将原始图片中在X方向排列紧密的纵向边缘区域连通成了一个矩形区域,除了卡号符合这个特点外,其他一些部分如银行名,银行卡标志等可能同样符合。因此我们可能会找到很多这样的区域,这就需要我们进一步根据一些关于银行卡特

    22、点的先验知识对这些矩形进行进一步筛选。最终,定位银行卡卡号所在的矩形区。矩形的筛选算法筛选效果的好坏直接决定了整个一套识别算法是否能得到一个好的结果。我设计的筛选算法主要涉及这几个部分:1.高度(图片高度的5%以上)2.宽度(图片宽度的25%以上) 3.位置(图片高度的20%80%之间)4.大小形状(宽高比5:1)这个时候遇到了一个问题,opencv轮廓查找函数有时无法将一个轮廓完整的提取出来。如图7所示,这一张银行卡提取的结果没有全部包含卡号区域。图7 检测结果失败图3.4垂直投影为了解决上述问题,我们将得到的轮廓在Y方向投影,确定卡号位置。本系统采用的是逐像素点查找的方法对轮廓区域进行投影

    23、。对每一列,系统进行逐点查找,统计出每一列黑色像素点数目x。在将一幅空白图中对应列的最下面x个点变成黑色的就可以得到垂直投影图。将得到的轮廓垂直投影结果如图8所示。图8 垂直投影图通过垂直投影图可以得到银行卡号左右边界,再由轮廓的上下边界就可以得到卡号的区域。使用cvSetReal2D函数将查找得到的区域绘制出来,如图9所示。图9 银行卡卡号定位图将提取出的卡号二值化。得到的提取图如图10所示。图10提取二值图第4章 字符分割模块4.1引言由于文字信息在现今社会的广泛应用,计算机视觉研究的重要方向之一:字符图像的分割与识别技术得到了越来越多的重视,可用于生活中的许多方面,例如手写体和印刷体文字

    24、的识别,门牌号的识别,支票上签名的识别,工程图纸的数字化,机器人视觉导航,以及各种表单、车辆牌照的识别。这些广泛的应用领域都说明字符图像分割与识别技术有着重要的意义。4.2字符分割常用的分割方法有:阈值法、区域生长法、分裂合并法、边缘检测法、人工神经网络法、基于模糊集理论法、分类器和聚类法等。本系统字符定位分割方法是将将提取出卡号二值图进行Y方向膨胀腐蚀使每个字符变成一个黑块。由于银行卡卡号字符之间有一定距离,系统采用对银行卡卡号字符垂直投影,在垂直方向上的投影值不为零的区域有字符,然后以银行卡卡号的下边界和左边界的交点为起点,沿X轴进行搜索,找到每个卡号。然后将图像进行X和Y方向的投影得到图

    25、像中字符位置。接着通过投影位置可以把字符分割出来。将得到的二值图在Y方向投影,得到垂直投影图图11。图 11字符垂直投影图根据垂直投影图进行处理,可以从银行卡卡号中分割出单个的卡号字符图像。卡号的分割如图12所示。注意图12中每个字符周围的线框就是分割的位置。图 12 字符分割图4.3图像归一化上面得到的字符图像大小不一,位置不同,无法直接与模版字符匹配。为了使字符图像可以与模版匹配,必须对图像进行归一化处理。图像归一化一般分为大小位置和笔划粗细等归一化。由于系统识别的字符是阿拉伯数字的印刷体,所以只需要进行大小和位置归一化处理。本文的字符图像归一化通过调用opencv中cvResize函数将

    26、得到的字符大小变成与模版字符大小一致。方便字符识别。第5章 字符识别模块字符识别模块主要实现卡号字符识别功能即将处理好的卡号字符与模版相对比,在数字模板库中找到和待识卡号字符匹配的字符,从而完成字符的识别。银行卡的卡号字符都是规范的印刷单位且样本的空间比较小,基于这些特点,本文采用模板匹配法来进行卡号识别。将提取出的字符图像与模版对比,即可识别出银行卡的卡号。本系统采取的对比方法是逐像素点比对。通过对字符图像和各个模版进行逐点对比,计算出比对的相同像素点数目,然后比较各个模版相似度,得到字符图像的数字。测试结果如图13所示。图13 银行卡卡号识别图样本的测试结果表明,系统能正确识别绝大多数的样

    27、本,未能达到100的正确识别率。经过分析发现识别错误或匹配失败主要有以下三种原因:(1)银行卡图像样本背景太过复杂;(2)有些银行卡卡号二值化阈值选取不正确,未能消除背景干扰;(3)模板库数字模版样本较少,覆盖面不够广。结论本文通过对图像处理中已有算法的分析研究,借鉴了已有的一些程序,实现了银行卡卡号的识别。这个程序不仅可以识别银行卡卡号,其相关技术也可应用到车牌号码、护照号、身份证号等其他图像识别。在以后的研究工作中,我认为可以从以下几个方面对该系统进行改进。首先,可以加入图像倾斜校正模块,使得样本图像倾斜时可以校正。其次,应该适当扩大数字模板库,使得程序可以识别更多的银行卡类别。最后,通过

    28、适当方式增加函数处理图像,使得程序可以识别背景比较复杂的银行卡。在设计这个程序过程中,也遇到了一些问题。在一开始,我使用opencv的轮廓查找函数来对银行卡卡号进行定位。这时遇到了一个问题,在opencv里用cvFindContours查找轮廓时,有时候无法对一个轮廓完整的进行查找,查找轮廓得到的边界往往不包含整个轮廓。所以我加入了Y方向投影来保证查找的轮廓是完整的。在对不同银行卡进行识别时,由于不同银行卡的数字模版不同,我需要使用不同模版对得到的字符图像进行对比。我在如何对相应银行卡使用相应模版方面遇到了困扰。直到老师提醒了我,我将得到的字符与各种银行卡模版同时使用,最相似的模版对应的数字就是结果,解决了这个问题。致谢语 本文是在老师的悉心指导下完成的。老师为论文研究思路的设计和文献资料的选择提供了有益的指导,使得论文在成文阶段少走了很多弯路。同时,老师严谨细致的治学态度也令我受益匪浅。在论文完成之际,谨向老师致以衷心的感谢。参考文献:1 LU Xiaobo,LING Xiaojing,LIU Bi.License plate character recognition


    注意事项

    本文(毕业论文-基于opencv的银行卡号识别.doc)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开