1 案例背景
作为居民身份的象征,身份证是居民身份的唯一标识,它已成为生活中必不可少的证件。在火车站、酒吧等公共场所,流动人口大人员复杂,警察需要对公民的身份证进行核对,排除可疑人员。为了提高警察的办事效率,提出通过手机终端将居民的身份证号码进行自动识别。
身份证号码的自动识别技术属于图像数字识别领域,目前国内外采用得较多的方法主要有两类:基于模板匹配的 OCR 算法和基于人工神经网络的OCR算法,其中尤以模板匹配法应用最为广泛。模板匹配法主要是通过提取目标的特征(包括灰度特征、形状特征、网格
特征等)与模板库中的模板进行匹配计算它们的相似度或者欧式距离,当满足一定的阈值时就认为目标与该模板一致。模板匹配法通常用于目标特征容易提取且模板库比较小的情形,但模板匹配法容易受噪声干扰而降低识别的准确度,在提取的特征个数较多时匹配所需时间也会延长。

2 基本原理
身份证号码识别技术的基本原理如图 1 所示。首先需要扫描样本图像以获得样本字符的特征以放入特征库中,因为第二代居民身份证号码的字体比较特殊,需要从样本图像中获取数字 0~9及字母 x的特征作为特征库,其次扫描待识别图像提取待识别字符的特征与特
征库中的字符特征进行匹配从而得到识别结果。图像处理中常用到的方法有图像灰度化、二值化、基于投影的字符分割等算法。常常提取的字符特征包括直接将字符图像作为字符特征或将变换后的图像作为特征,将图像在水平及垂直方向上的投影作为特征,还有字
符的笔画密度特征、外围特征、统计特征等;在字符识别这一步中常见的方法有:结构模式识别、统计模式识别、统计识别与结构识别的结合、人工神经网络、基于改进 Adaboost的方法等。

图 1 身份证号码识别技术的基本原理图
本文在获取字符的灰度图像后,在灰度多值化的基础上提取字符的网格特征,再利用模板匹配的方法进行识别。具体的流程包括身份证边缘定位,身份证号码区域定位及灰度归一化,身份证号码单个字符分割,特征提取和身份证号码识别等,如图 2 所示为身份证号码识别的具体流程。

图2 身份证号码识别的处理流程
2.1 居民身份证边缘定位
第二代居民身份证的大小是固定的,宽度为8.6 cm,高度为 5.4 cm,但是在获取身份证图像时,由于焦距的远近,不能利用它的大小信息来获取身份证在图像中所处的位置。如图 3(a)所示为通过摄像头获得的居民身份证图像,在这一步中要求背景比较简单,能和身份证形成明显对比,且身份证在图像中的位置要大体居中不能过小,以保证在图像的横向及纵向 3/8、4/8、5/8处能检测到居民身份证,这将影响到定位的结果。为了确定身份证在图像中的位置,需要对图像进行二值化,但考虑到如果对整张图像进行灰度化及二值化会消耗很多时间,分别在纵向及横向上在图像的 3/8、4/8 及 5/8 处截取宽度为 40 个像素的区域进行灰度化及二值化运算,截取的区域如图 3(b)及 3(c)所示。常用的灰度化处理方法有加权平均法、平均值法和最大值法等。这里采用加权平均法[14],根据重要性及其他指标,将 R、G、B 三个分量以不同的权值进行加权平均。由于人眼对绿色的敏感度最高,对蓝色敏感度最低,因此,可以按公式(1),对 RGB 三个分量进行加权平
均能得到较合理的灰度图像。f (ij) = 0.299R(ij) + 0.587G(ij) + 0.114B(ij)) (1)式中,f (ij) 为像素的灰度值,R(ij) 为彩色图像中 R分量的值,G(ij) 为彩色图像中 G 分量的值,B(ij) 为彩色图像中 B 分量的值。截取的纵向及横向区域做灰度化运算后的结果如图 4(a)所示。对于二值化处理,采用了迭代法进行二值化,其思想是利用迭代的方法最终找到一个最佳的分割阈值。对于身份证图像中所选取的区域,首先遍历区域中所有
点的灰度值,找出该区域内的最大灰度值 Pmax 和最小灰度值 Pmin ,取阈值初值 T0 = (Pmax + Pmin)/2 。根据 T0 将图像分割为两部分并且分别求出各部分的灰度均值 Po 和 Pb ,进而计算新阈值 Ti + 1 = (Po + Pb)/2 。若 Ti + 1 = Ti ,则取阈值为 Ti ,否则返回继续循环迭代。在灰度图像中灰度值 i 在[0,255]这个区间内,Si 表示灰度值为 i 的像素点的个数,Ti 表示阈值,那么则有:


经过二值化运算后的区域,在边缘处与背景区分得很明显,如图 4(b)为纵向区域在二值化后的结果。再通过从上到下的搜索及从下向上的搜索就很容易确定居民身份证上下边缘在图像中 3/8、4/8 及 5/8 处的三个边缘点坐标。

如图 5 所示为根据二值化结果确定的居民身份证上下边缘三个点的位置,分别为上边缘 A1(左)、A2(中)、A3(右)及下边缘 B1(左)、B2(中)、B3(右)。由于光照等其他因素的影响,寻找到的边缘点并不一定是身份证的真实边缘点,这个时候需要排除其中一对点,该方法默认在中间区域即图像 4/8 处所确定的边缘点是准确的,只需要排除另一对点 A1、B1 或 A3、 B3 。以 A2、B2 为基准点,可以求得四条斜率 LA1A2、 LA3A2、LB1B2、LB3B2 ,当 |LA1A2 - LB1B2| < |LA3A2 - LB3B2| 时,则舍掉 A3、B3 这一对点,反之则舍掉 A1、B1这一对点,最后将得到上下边缘的各两个点作为居民身份证的上下边缘点,斜率 L 作为身份证在图像中旋转的斜率。同样,利用同样的方法也可以得到居民身份证左右边缘的各两个点。在知道居民身份证各条边上的两个点及求得斜率,身份证在图像中的位置也就确定了。
2.2 身份证号码区域定位及灰度归一化
身份证号码在居民身份证上的位置是固定的,在拍照获取照片时不管焦距如何变化,身份证号码所在区域相对于身份证本身的位置是不变的,它具有一定的比例关系。根据这一比例关系截取一包含身份证号码的矩形区域,如果身份证发生了旋转,即斜率 L 大于经验值
0.035时,则以该斜率为参考将矩形区域进行矫正。图 6所示为截取的身份证号码区域在经过矫正后的彩色图像。

图 6 身份证号码彩色区域
对得到的彩色图像利用式(1)做灰度化处理,但是因为光照的原因,有时候图像整体偏暗,有时候图像又整体偏亮,这会影响到数字字符的特征提取及最后的识别效果。因此在对图像做灰度化处理后在进行字符分割前需要将号码区域进行灰度拉伸,使得像素的灰度值分布在 0到 255间,也就是灰度归一化。
灰度归一化的方法是:对于输入图像 f (xy) ,灰度级变换 T 将产生一个输出图像 g(xy) ,且 g(xy) 的每一个像素值都是由 f (xy) 的对应输入像素点的值决定的,g(xy) = T( f (xy)) 。首先找出原图像 f (xy) 灰度的最大值max及最小值min,得到系数 k = 1.0 ´ 255/(max - min) ,那 么 对 于 图 像 f (xy) 中 的 每 一 像 素 ,利 用 变 换 T : g(xy) = ( f (xy) - min)´ k ,即 得 到 输 出 图 像 g(xy) ,

图 7 灰度拉伸后的身份证号码区域灰度图像
2.3 单个字符的分割及大小归一化
单个字符的分割是在求得灰度图像的分割阈值后,根据阈值进行行投影及列投影以确定每个字符的左右及上下边界,将字符的左右及上下边界坐标影射到原灰度图像,即可得到每个字符的灰度图像。常用的分割方法有阈值法、区域生长法、分裂合并法、边缘检测法、人工神经网络法、分类器和聚类法等。在这里,对于定位得到的数字区域,首先根据迭代法找出将目标(数字)与背景分割开的阈值 t ,然后根据阈值t 将图像在垂直方向上进行投影,计算每一列上灰度值小于阈值 t 的个数,对于数字间的背景区域在垂直方向上的投影值为 0,即可得到数字的左右边界坐标,再根据数字的左右边界将每个数字进行水平方向上的投影,找到数字的上边缘及下边缘,这样就可以分割出每一个字符。其中阈值 t 的计算方法[15]与前文计算阈值的方法是一样,在这不再描述。
对于分割出来的字符灰度图像,由于输入图像不同分割得到的字符图像尺寸也不相同,即使是同一幅图像中每个字符图像的尺寸也不尽相同,因此还需要将字符图像进行大小的归一化,目的是要使得字符图像与模板图像的尺寸一致。通过双线性插值算法对字符图像作
大小归一化。双线性插值[16]是利用了需要处理的原始图像像素点周围的四个像素点的相关性,通过双线性算法计算得出的。对于一个目的坐标,通过向后映射法得到其在原始图像的对应的浮点坐标 (i + uj + v) ,其中 ij均为非负整数,uv 为[0,1]区间的浮点数,则这个像素的值 f (i + uj + v) 可由原图像中坐标为 (ij)、(i + 1j)、 (ij + 1)、(i + 1j + 1) 所对应的周围四个像素的值决定,即:f (i + uj + v) = (1 - u)´(1 - v)´ f (ij) +
(1 - u)´ v ´ f (ij + 1) + u ´(1 - v)´ f (i + 1j) + u ´ v ´ f (i + 1j + 1) (4)式中 f (ij) 表示源图像 (ij) 处的的像素值,以此类推,这就是双线性内插值法。对于图 7 分割得到的单个字符图像再进行大小归一化之后的结果如图 8,设定字符尺寸为 40×72(宽 40像素,高 72像素)

图 8 对分割得到的字符进行大小归一化后的结果
2.4 特征提取
灰度多值化是指灰度图像 A 按照一定的法则 f 将各个像素的灰度值从 0~255变换到 0~n - 1,这个过程称为灰度多值化或 n 值化,在数学上描述为:

其中式(5)中 G(xy) 为图像 A 中像素的灰度值,g(xy) 为 G(xy) 经过 f 运算后的值;式(6)表示图像 A 在经过f 运算后灰度的维数从 256 维变为 n 维,当 n = 2 时,这
个过程就是人们所熟悉的灰度二值化,当 n = 26 时就是灰度 26值化。
一幅灰度图像再进行二值化处理时,会损失掉很多信息,有时还会因为图像质量问题使得二值化结果不能正确地区分出目标与背景,那么在此基础上提取到的特征也就不能有效地代表字符。如图 9 为从身份证照片中截取到的号码区域,该区域比较模糊,但是肉眼还是
能将号码识别出来;图 10 为将该号码区域进行二值化处理的结果,可以看出二值化之后目标即号码和背景没有被正确地区分开来,像数字 6、8、9 在二值化之后中间的空白区域被填充了,中间的背景像素被理解成了目标像素,使得二值化结果不能正确地反映出图像原本的信息。为此,提出将图像进行多值化处理,而不是二值化,图像中的像素被分为多类而不仅仅是被分为两类,这样可以适当减少信息的损失,在此基础上提取到的特征也
更能有效地区分出字符。

图 9 身份证号码的模糊图像

图 10 模糊图像作二值化处理后结果
在得到身份证号码字符的灰度图像后,将字符图像作 26 值化处理。为什么要将灰度图像作 26 值化处理?在身份证号码的灰度图像中,对属于同一个小区域内的像素,同属于目标或背景的两个像素的灰度值一般是差别不大的,如图 11 为身份证号码所在区域的灰度图像,在图像中间作一条水平线横穿整个图像,通过统计这条水平线上各像素的灰度值,发现在非数字区域也就是背景区域各像素的灰度值都是相差不大,在 10 个灰度级以内,同样在数字区域各像素的灰度值也是相差 10 个灰度级以内,但是数字区域和背景区域的灰度值相差可以达到 60 个灰度级,因此可以认为灰度值变化在 10 个灰度级以内的像素是同一类,在此基础上提出将灰度图像的灰度值从 256个等级作降级处理变为 26个等级,也
就是进行 26 值化,这样既能将像素进行分类又不会使原图像所包含的信息损失太大。

图 11 身份证号码区域的灰度图像为了提取字符的网格特征,首先将字符图像分为大小一致互不重叠的若干个小网格,对于大小为 40×72(宽 40像素,高 72像素)的字符图像,先将字符图像划分M ´ N 个网格,这里 M = 10 ,N = 12 ,再利用公式(7)将数字字符的灰度图像做 26 值化,最后利用式(8)统计每个小网格中像素灰度在 26 值化后的平均值作为该方块的特征,这些特征组合在一起构成特征向量,即得到每个数字字符的二维灰度特征。

其中,式(7)是将像素的灰度进行26值化处理,f (xy) 为像素的原灰度值,g(xy) 为 26值化后得到的值,即灰度值从原来的 0~255 降为 0~25;式(8)是计算第 (ij) 个网
格的特征值 E(ij),H 和 W 分别为该小方块的高和宽,g(xy) 为该小方块中像素灰度 26值化后的值,0  x < W, 0  y < H ,0  i < M ,0  j < N 。那么字符的特征向量则
等于

2.5 字符识别
字符识别就是将待识别字符的特征向量与模板库中保存的每个字符的特征向量进行匹配,找到与待识别字符匹配的字符。本文用到的匹配方法是通过求相似度,相似度最大的即认为是与待识别字符匹配的字符。求相似度的方法如下:

式中 S 定义为相似度,Ts(ab) 为待识别字符的特征属性,To(ab) 为模板的特征属性。

3 现成案例(代码+参考文献)
1【身份证识别】基于matlab GUI身份证号码识别【含Matlab源码 014期】

2【身份证识别】基于matlab GUI形态学二代身份证号码识别系统【含Matlab源码 948期】

3【身份证识别】基于matlab GUI形态学二代身份证识别系统【含Matlab源码 947期】

4 Matlab毕设系列 —说明
Matlab毕设系列–说明
链接:https://qq912100926.blog.csdn.net/article/details/121363930

5 参考文献
[1]曹佳宇,陆汝华,刘宇平,李亚兰 .基于OCR的身份证识别系统[J].信息技术与信息化. 2021,(01)

毕设题目:Matlab身份证识别相关推荐

  1. 【Matlab身份证识别】身份证号码识别【含GUI源码 014期】

    一.代码运行视频(哔哩哔哩) [Matlab身份证识别]身份证号码识别[含GUI源码 014期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  2. 毕设题目:Matlab条形码识别

    1 案例背景 条形码技术如今在物流.仓储.生产等领域中广泛应用,对其在各种复杂场景下的准确识别对管理和控制具有重要的意义.目前条码识别仍然以传统的光学图像处理方法为主[1],在使用时,条码将被红外线或 ...

  3. MATLAB身份证号识别

    MATLAB身份证号识别 MATLAB身份证号识别 将要处理图片 提取数字区域 紧接着将数字分割保存 . 自己的数据集 将图片格式化 将分割后的图片一一与10个不同数据进行对比,得到一个数组match ...

  4. matlab车牌识别课程设计,matlab车牌识别课程设计报告模板(附源代码).doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspmatlab matlab车牌识别课程设计报告模板(附源代码). ...

  5. android ocr 身份证识别

    ocr opencv 想必做过程图像识别的同学们都对这两个词不陌生吧. ocr (optical character recognition ,光学字符识别) 是指电子设备(例如扫描仪或数码相机)检查 ...

  6. MATLAB人脸识别疫情防护门禁系统GUI设计与实现

    题目名称:MATLAB人脸识别疫情防护门禁系统 课题介绍:该系统为基于MATLAB的疫情防护门禁系统.建立一个GUI可视化界面,将疑似病例录入进人脸库,对其进行训练.测试的时候,采集一张全身照人脸图片 ...

  7. 【身份证识别】形态学二代身份证号码识别系统【含GUI源码 948期】

    一.代码运行视频(哔哩哔哩) [身份证识别]形态学二代身份证号码识别系统[含GUI源码 948期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MA ...

  8. MATLAB人脸识别疫情防护门禁系统

    题目名称:MATLAB人脸识别疫情防护门禁系统 课题介绍:该系统为基于MATLAB的疫情防护门禁系统.建立一个GUI可视化界面,将疑似病例录入进人脸库,对其进行训练.测试的时候,采集一张全身照人脸图片 ...

  9. Lesson 6.1 身份证识别: 提取字段

    Lesson 6.1 身份证识别: 提取字段 小编最近试试识别身份证上面的文字. 第一步还是图像分割,第一步还是提取文本行,然后提取字段. 看上去,第一个感觉就是所有文字都是黑色的.可以简单过滤一下图 ...

  10. deep_ocr 是使得 OCR 比 tesseract 更好的中文识别、身份证识别等等

    deep ocr 估计很多开发员使用tesseract做中文识别,但是结果不是一般的差,譬如下面的图片 $ tesseract -l chi_sim test_data.png out_test_da ...

最新文章

  1. 004_常用词汇句子翻译记录
  2. 最新综述:车辆重识别技术
  3. Andriod Studio 解决问题 Failed to resolve: com.android.support:appcompat-v7:28.+
  4. Android中适用于ListView、GridView等组件的通用Adapter
  5. Android使用Retrofit2.0和RxJava2.0处理网络请求
  6. sql日期大于某天_(十五)sql/Linux 小技巧
  7. 面试题:HashMap和ConcurrentHashMap的区别,HashMap的底层源码。
  8. WCF开发实战系列二:使用IIS发布WCF服务(转)
  9. Python 完整学习路线,非常赞!
  10. 【渝粤教育】国家开放大学2018年春季 0284-21T外国文学 参考试题
  11. 自动化运维之saltstack
  12. 2018-03-28-日剂
  13. 思科模拟器交换机的基本配置
  14. “QQ尾巴病毒”核心技术的实现(转)
  15. 沪牌-上海牌照-拍牌经验分享: 我是如何三次拍中的?
  16. Cobbler批量安装操作系统配置实战
  17. 第9周项目6委派任务
  18. 【Arduino 连接 SD 卡模块实现数据读写】
  19. c语言一维数组教学设计,C语言教学中一维数组教学设计.doc
  20. 第四章第十节数据资产盘点-形成数据资产目录

热门文章

  1. nero刻录软件免费版_如何通过免费替代品获得Nero的最佳功能
  2. JAVA中ResourceBundle使用详解
  3. [Java] 利用xpdf库获取pdf文件的指定范围文本内容
  4. java画图板_java画图板工具下载
  5. eyb:Java代码通过FastDFS实现文件上传
  6. 服务监管框架下的 IT 运维服务与绩效管理体系建设
  7. 9、【易混淆概念集】-第五章 2 WBS 需求文件 VS 需求跟踪矩阵 确认范围 VS 控制质量 确认范围 VS 控制范围
  8. 怎样做一个U盘启动盘?
  9. python qq空间登录_Python案例之QQ空间自动登录程序实现-阿里云开发者社区
  10. QQ空间扫码登录协议 Java